AWS Magic
develop
develop
  • Welcome
  • Lambda
    • Local Lambda Development
      • Prerequisites
      • Starter Kit or Manual?
      • Use Starter Kit
      • Manual Configuration
        • Environment Variables
        • Python Setup
        • Node Setup
        • Source & Config Files
        • Test The Configuration
      • Run Lambda in VSCode
      • Debug Lambda in VSCode
      • Deploy Lambda Function
    • Lambda & API GW
  • TypeScript
    • Promises
Powered by GitBook
On this page
  • Open VSCode Terminal
  • Activate Virtual Environment
  • Set Environment Variables
  • Configure AWS CLI Credentials
  • Configure S3 Bucket
  • Modify SAM Configuration
  • Build and Package
  • Deploy
  • Test Your Stack

Was this helpful?

  1. Lambda
  2. Local Lambda Development

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.

PreviousDebug Lambda in VSCodeNextLambda & API GW

Last updated 5 years ago

Was this helpful?

Open VSCode Terminal

Create a new terminal by pressing control + shift + `.

Activate Virtual Environment

$ source .venv/bin/activate

Set 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. ()

(.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]: json

Configure 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: ozlambdabucket

Modify SAM Configuration

Change template.yaml to look like below, with Outputs section.

template.yaml
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 $PROFILENAME

Deploy

(.venv)$ sam deploy --template-file packaged.yaml --region us-east-1 \
--capabilities CAPABILITY_IAM --stack-name $STACKNAME --profile $PROFILENAME

You 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-cfn

Test Your Stack

(.venv)$ aws cloudformation describe-stacks --stack-name $STACKNAME \
--region us-east-1 --query "Stacks[].Outputs" --profile $PROFILENAME

You 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}"

AWS document on creating IAM user