Deploy Lambda Function
At some point during your local lambda development journey, you may decide to deploy the lambda function. Below you can find how to do it.
Open VSCode Terminal
Create a new terminal by pressing control + shift + `.
Activate Virtual Environment
$ source .venv/bin/activateSet Environment Variables
In the terminal screen activate the virtualenv and set environment variables.
(.venv)$ PROJECTNAME=projectOne
(.venv)$ FUNCTIONNAME=functionOne
(.venv)$ BUCKETNAME=ozlambdabucket
(.venv)$ PROFILENAME=lambdadev
(.venv)$ STACKNAME=$FUNCTIONNAME-cfn Configure AWS CLI Credentials
You need an IAM user in order to proceed. (AWS document on creating IAM user)
(.venv)$ aws configure --profile $PROFILENAME
AWS Access Key ID [None]: AKIAQ4QLF5QD6GY8NKHW
AWS Secret Access Key [None]: T1A6BYuMGo4i84JO6bDYPcXAh+N1OvvemH0tb3Qa
Default region name [None]: us-east-1
Default output format [None]: jsonConfigure S3 Bucket
We need an S3 bucket to store packaged lambda code. Find a bucket name that is not already taken. Below we are using ozlambdabucket.
(.venv)$ aws s3 mb s3://$BUCKETNAME --region us-east-1 --profile $PROFILENAME
make_bucket: ozlambdabucketModify SAM Configuration
Change template.yaml to look like below, with Outputs section.
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: A starter AWS Lambda function.
Resources:
functionOne:
Type: 'AWS::Serverless::Function'
Properties:
Handler: dist/index.handler
Runtime: nodejs8.10
CodeUri: .
Description: A starter AWS Lambda function.
MemorySize: 128
Timeout: 3
Environment:
Variables:
Stage: DEV
Outputs:
functionOneArn:
Description: "functionOne Lambda Function ARN"
Value: !GetAtt functionOne.Arn
functionOneRoleArn:
Description: "functionOne Lambda Function Role"
Value: !GetAtt functionOneRole.Arn
Build and Package
Be sure you are under function folder.
(venv)$ # cd $PROJECTNAME/$FUNCTIONAME
(venv)$ sam build
(venv)$ sam package --output-template packaged.yaml --s3-bucket $BUCKETNAME \
--profile $PROFILENAMEDeploy
(.venv)$ sam deploy --template-file packaged.yaml --region us-east-1 \
--capabilities CAPABILITY_IAM --stack-name $STACKNAME --profile $PROFILENAMEYou will see an output similar to this one;
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - functionOne-cfnTest Your Stack
(.venv)$ aws cloudformation describe-stacks --stack-name $STACKNAME \
--region us-east-1 --query "Stacks[].Outputs" --profile $PROFILENAMEYou will see an output similar to this one;
[
[
{
"OutputKey": "functionOneArn",
"OutputValue": "arn:aws:lambda:us-east-1:061226742791:function:functionOne-cfn-functionOne-37WRWIL2LYZ8",
"Description": "functionOne Lambda Function ARN"
},
{
"OutputKey": "functionOneRoleArn",
"OutputValue": "arn:aws:iam::061226742791:role/functionOne-cfn-functionOneRole-12J5NO0E1SLTJ",
"Description": "functionOne Lambda Function Role"
}
]
]Get the Lambda Function ARN from the output of the previous command and invoke it using AWS CLI.
(.venv)$ aws lambda invoke \
--function-name arn:aws:lambda:us-east-1:061226742791:function:functionOne-cfn-functionOne-37WRWIL2LYZ8 \
--payload file://src/event.json response.json
{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}
(.venv)$ cat response.json
"{\n \"key1\": \"value1\",\n \"key2\": \"value2\",\n \"key3\": \"value3\"\n}"Last updated
Was this helpful?