How to deploy 20+ lambdas using aws-sam-deploy pipe
Asked by koti r:

we have 20 + lambdas with 100+ end points, need to deployed with AWS SAM templates. Please suggest the best approach and please provide the sample scripts/templates if any.


Answers:
author: Igor Stoyanov
body: [@koti r](/t5/user/viewprofilepage/user-id/4622205) Hi. Thanks for your question. Maybe this [article](https://github.com/aws-samples/aws-serverless-samfarm/issues/5) can help you.

Regards, Igor.

comments: author: koti r
body: Hi [Igor Stoyanov](https://community.atlassian.com/t5/user/viewprofilepage/user-id/4550492), Thanks for sharing with me, but I have one query related to the same. Please find the details below.

In our architecture, we have to deploy 20 lambdas, each lambda is deployed through a separate template which is in root folder of the code and we have three different environments like Test, Staging and Production. When i tried to deploy lambda1 in 3 environments, it is working fine, but when i try to deploy lambda2 into 3 environments, getting error like environment defined multiple times. Please find the sample code and error attached here. Any help for this solution is highly appreciated. Thanks in advance.

pipelines:  
default:  
- step:  
name: lambda1 deployement  
deployment: Test  
caches:  
- node  
condition:  
changesets:  
includePaths:  
- "folder/subfolder/lambda1/\*.js"  
- "folder/subfolder/lambda1/package\*.json"  

script:  
- cd folder/subfolder/lambda1  
- npm install  
- apt-get update  
- apt-get install zip  
- zip -r ../lambda1.zip \* .\[\^.\]\*  
- pipe: atlassian/aws-sam-deploy:1.3.1  
variables:  
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID  
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY  
AWS_DEFAULT_REGION: 'myregion'  
S3_BUCKET: 'mybucket'  
STACK_NAME: 'lambda1'  
SAM_TEMPLATE: '../../../template.yaml'  
CAPABILITIES: \['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND'\]  
- step:  
name: lambda1 deployement  
deployment: Staging  
caches:  
- node  
condition:  
changesets:  
includePaths:  
- "folder/subfolder/lambda1/\*.js"  
- "folder/subfolder/lambda1/package\*.json"  

script:  
- cd folder/subfolder/lambda1  
- npm install  
- apt-get update  
- apt-get install zip  
- zip -r ../lambda1.zip \* .\[\^.\]\*  
- pipe: atlassian/aws-sam-deploy:1.3.1  
variables:  
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID  
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY  
AWS_DEFAULT_REGION: 'myregion'  
S3_BUCKET: 'mybucket'  
STACK_NAME: 'lambda1'  
SAM_TEMPLATE: '../../../template.yaml'  
CAPABILITIES: \['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND'\]  
- step:  
name: lambda1 deployement  
deployment: Production  
caches:  
- node  
condition:  
changesets:  
includePaths:  
- "folder/subfolder/lambda1/\*.js"  
- "folder/subfolder/lambda1/package\*.json"  

script:  
- cd folder/subfolder/lambda1  
- npm install  
- apt-get update  
- apt-get install zip  
- zip -r ../lambda1.zip \* .\[\^.\]\*  
- pipe: atlassian/aws-sam-deploy:1.3.1  
variables:  
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID  
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY  
AWS_DEFAULT_REGION: 'myregion'  
S3_BUCKET: 'mybucket'  
STACK_NAME: 'lambda1'  
SAM_TEMPLATE: '../../../template.yaml'  
CAPABILITIES: \['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND'\]  
- step:  
name: lambda2 deployement  
deployment: Test  
caches:  
- node  
condition:  
changesets:  
includePaths:  
- "folder/subfolder/lambda2/\*.js"  
- "folder/subfolder/lambda2/package\*.json"  

script:  
- cd folder/subfolder/lambda2  
- npm install  
- apt-get update  
- apt-get install zip  
- zip -r ../lambda2.zip \* .\[\^.\]\*  
- pipe: atlassian/aws-sam-deploy:1.3.1  
variables:  
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID  
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY  
AWS_DEFAULT_REGION: 'myregion'  
S3_BUCKET: 'mybucket'  
STACK_NAME: 'lambda2'  
SAM_TEMPLATE: '../../../template.yaml'  
CAPABILITIES: \['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND'\]  
- step:  
name: lambda2 deployement  
deployment: Staging  
caches:  
- node  
condition:  
changesets:  
includePaths:  
- "folder/subfolder/lambda2/\*.js"  
- "folder/subfolder/lambda2/package\*.json"  

script:  
- cd folder/subfolder/lambda2  
- npm install  
- apt-get update  
- apt-get install zip  
- zip -r ../lambda2.zip \* .\[\^.\]\*  
- pipe: atlassian/aws-sam-deploy:1.3.1  
variables:  
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID  
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY  
AWS_DEFAULT_REGION: 'myregion'  
S3_BUCKET: 'mybucket'  
STACK_NAME: 'lambda2'  
SAM_TEMPLATE: '../../../template.yaml'  
CAPABILITIES: \['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND'\]  
- step:  
name: lambda2 deployement  
deployment: Production  
caches:  
- node  
condition:  
changesets:  
includePaths:  
- "folder/subfolder/lambda2/\*.js"  
- "folder/subfolder/lambda2/package\*.json"  

script:  
- cd folder/subfolder/lambda2  
- npm install  
- apt-get update  
- apt-get install zip  
- zip -r ../lambda2.zip \* .\[\^.\]\*  
- pipe: atlassian/aws-sam-deploy:1.3.1  
variables:  
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID  
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY  
AWS_DEFAULT_REGION: 'myregion'  
S3_BUCKET: 'mybucket'  
STACK_NAME: 'lambda2'  
SAM_TEMPLATE: '../../../template.yaml'  
CAPABILITIES: \['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND'\]  
If I do so the error is like, defined test or staging or production in multiple times. How can i deploy 20 lambdas whenever there is a change in the corresponding code. Please suggest. Thank you


author: Igor Stoyanov
body: [@koti r](/t5/user/viewprofilepage/user-id/4622205) hi. What you ask is under development: [Support multi-step deployments](https://jira.atlassian.com/browse/BCLOUD-18261)   

Also i found a question related to your problem: <https://community.atlassian.com/t5/Bitbucket-questions/The-deployment-environment-test-in-your-bitbucket-pipelines-yml/qaq-p/971584>  

maybe you can find some useful info there.  
Regards, Igor


Tags: aws

bitbucket-pipelines