Local to Lambda via Aws CLI
Problem
Handing source control of Lambda functions from your local PC to AWS Lambda.
I’ve overwritten code in one Lambda function thinking I was in another with the inline editor that is built within the AWS Lambda platform.
This was totally my fault, but I would put a practice in place that would stop this from happening again.
Solution
Implement source control via BitBucket & Sourcetree. Develop locally and push coding changes up to S3 bucket (with versioning enabled) and update Lambda function code via CLI.
My Setup:
- S3 bucket to only store Lambda function files
- AWS CLI on local PC
- BitBucket or similar – I use BitBucket with Sourcetree
- Using NodeJS to handle the code within the Lambda functions
- S3 Bucket and Lambda must be in the same region
- AWS Account with CLI access
If you have function files already in your S3 bucket, use sync to copy those down to your local repo http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
cd c:\localrepo\lambda\
aws s3 sync s3://s3LambdaFunctionBucket/ .
Total of 3 commands via Windows Powershell.
Zip the index.js file Copy Zip to S3 bucket Update Lambda Function from Zip
Compress-Archive -Path c:\localrepo\lambda\functionName\index.js -DestinationPath c:\localrepo\lambda\functionName.zip -Force
aws s3 cp functionName.zip s3://s3LambdaFunctionBucket/functionName.zip
aws lambda update-function-code --function-name arn:aws:lambda:{yourRegion}:{yourID}:function:functionName --zip-file fileb://C:\localrepo\lambda\functionName.zip
https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html
Zipping the Lambda File:
Compress-Archive -Path c:\localrepo\lambda\functionName\index.js -DestinationPath c:\localrepo\lambda\functionName.zip -Force
-Path c:\localrepo\lambda\functionName\index.js
This is the location of your local repo and Lambda function index.js
-DestinationPath c:\localrepo\lambda\functionName.zip
This is the location of where the zip file will be placed. Just keep this in mind for the next steps.
-Force
This allows the zip file to be overwritten if it already exists.
Pushing the zip file to s3 bucket:
aws s3 cp functionName.zip s3://s3LambdaFunctionBucket/functionName.zip
Updating the Lambda function (method 1). This will update the Lambda function from local copy.
aws lambda update-function-code --function-name arn:aws:lambda:{yourRegion}:{yourID}:function:functionName --zip-file fileb://C:\localrepo\lambda\functionName.zip
Updating the Lambda function (method 2). This will update the Lambda function from S3 Bucket copy.
aws lambda update-function-code --function-name arn:aws:lambda:{yourRegion}:{yourID}:function:functionName --s3-bucket s3LambdaFunctionBucket --s3-key functionName.zip
After this, you will have three copies of your Lambda code and a great platform for version control. In the event that you need to roll back to a version of code, you will be all set to push those changes out.
- Bit Bucket Remote Repo
- Local PC Repo
- S3 Bucket for Lambda Functions