'PyCharm AWS Toolkit/SAM Deploy parameter override doesn't work

I am deploying a serverless application to AWS. I have a environment parameter in my SAM template ENV: 'DEV'. When I do the deployment up to AWS, I specified a template parameter to change the variable to PROD. I can see in the SAM deploy log that the parameter override worked, but when I look at the function in the Lamda console it still has DEV listed like in the template.

How to I make it override the value upon deploy?

Template Yaml:

Resources:
  GetWeatherFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: get-weather
      CodeUri: get-weather/
      Handler: app.lambda_handler
      Runtime: python3.7
      Timeout: 30
      Architectures:
        - x86_64
      Policies: AWSLambdaBasicExecutionRole
      Environment:
        Variables:
          ENV: 'DEV'

Deploy Window:

Deploy GUI

Deploy Log (some information changed for privacy, none of it relevant to the issue):

"C:\Program Files\Amazon\AWSSAMCLI\bin\sam.cmd" deploy --template-file C:\Users\User\PycharmProjects\Company\.aws-sam\build\packaged-template.yaml --stack-name MyProject --s3-bucket my-lambda-functions --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --no-execute-changeset --parameter-overrides \"ENV\"=\"PROD\"

    Deploying with following values
    ===============================
    Stack name                   : MyProject
    Region                       : us-east-1
    Confirm changeset            : False
    Disable rollback             : False
    Deployment s3 bucket         : my-lambda-functions
    Capabilities                 : ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
    Parameter overrides          : {"ENV": "PROD"}
    Signing Profiles             : {}

Lambda Console:

lambda console



Solution 1:[1]

The "Template Parameters" field maps to the CloudFormation template parameters rather than an individual Lambda's environment variables.

You'll need to add a Parameter definition to the top of your template:

Parameters:
  EnvironmentName:
    Type: String
    Default: DEV

And then you can refer to it anywhere in your template, for example:

Resources:
  GetWeatherFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: get-weather
...
      Environment:
        Variables:
          ENV: 
            Ref: EnvironmentName

Then in the screen above you'll need to supply the EnvironmentName parameter - it should actually automatically detect that a parameter has been defined in the template.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 kiiadi