I am following the readme here: https://github.com/awslabs/aws-sam-local
I have a lambda written in python 3.6 and its similar to the helloworld example here : https://g
Ensure that the variables are declared in template.yml. A config file overwrites the variables but does not create variables when they don't exist in the original template.
Any environment variables you want to use with SAM Local in this manner need to exist in your SAM template. From this GitHub issue:
... SAM Local only parses environment variables that are defined in the SAM template.
In the template, you can provide no value, an empty string, or choose a sensible default.
A portion of a template including environment variables:
Resources:
MyFunction1:
Type: 'AWS::Serverless::Function'
Properties:
.....
Environment:
Variables:
api_key:
BUCKET_NAME:
You can think of the environment variables file as a mechanism to override environment variables that the template "knows" about. It does not work as a mechanism to inject arbitrary environment variables into the local runtime.
template file
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Timeout: 3
Parameters:
SomeVar:
Type: String
Description: My SomeVar
Default: default value
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs12.x
Environment:
Variables:
SOME_VAR: !Ref SomeVar
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
Outputs:
HelloWorldApi:
Description: "API Gateway endpoint URL for Prod stage for Hello World function"
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
HelloWorldFunction:
Description: "Hello World Lambda Function ARN"
Value: !GetAtt HelloWorldFunction.Arn
HelloWorldFunctionIamRole:
Description: "Implicit IAM Role created for Hello World function"
Value: !GetAtt HelloWorldFunctionRole.Arn
from https://github.com/awslabs/aws-sam-cli/issues/1163#issuecomment-557874976
then in code
console.log(process.env.SOME_VAR);
when you run sam local start-api
and it will print default value
when you run sam local start-api --parameter-overrides SomeVar=other_value
and it will print other_value
then if you create file env.json
with this content
{ "PreviewsFunction": { "SOME_VAR": "123" } }
when you run sam local start-api --env-vars env.json
and it will print 123
p.s. it will work with start-api/start-lambda/invoke
all in the same way, but it looks like sam deploy
only works with --parameter-overrides SomeVar=other_value
and no --env-vars