AWS Lambda is a popular cloud-based computing service that enables developers to run their code without the need to manage the underlying infrastructure. Azure DevOps is a cloud-based platform that provides tools for continuous integration and continuous deployment (CI/CD) to automate the deployment of code changes to multiple environments. In this article, we will explore how to build a pipeline in Azure DevOps to deploy AWS Lambda functions.
Step 1: Connect Azure DevOps to your AWS Account
o deploy AWS Lambda functions using Azure DevOps, you need to connect your Azure DevOps account to your AWS account. This will allow Azure DevOps to access your AWS environment and perform the necessary deployment operations.
To connect your Azure DevOps account to AWS, follow these steps:
- Go to your Azure DevOps project and select Project Settings.
- In the Project Settings page, select the “Service connections” section.
- Click on the “New service connection” button and select “Amazon Web Services.”
- Enter your AWS account information, including your access and secret keys, and click “Save.”
Step 2: Create a New Pipeline
Now that you have connected your Azure DevOps account to your AWS account, you can create a new pipeline to deploy your AWS Lambda function.
parameters:
- name: function_name
type: string
default: "Your function name"
- stage: Build
jobs:
- job: build_zip
container: python:3.9
steps:
- script: 'python3 --version'
displayName: '🔍 Check python version'
- script: |
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install aws-sam-cli
pip install -r src/requirements.txt
sam --version
sam build
cd .aws-sam/build/${{ parameters.function_name}}
python -c "import shutil; shutil.make_archive('../../../${{parameters.function_name}}', 'zip', '.')"
displayName: '📦 Build zip file'
- publish: $(System.DefaultWorkingDirectory)/${{ parameters.function_name}}.zip
artifact: ${{ parameters.function_name}}
When this jobs complete, I should find a new artifact that holds the zip file, I can download it and check if it contains all the codes and deps.
In the release part, I download the artifact, the destination should be $(System.ArtifactsDirectory)
. And then, I use the AWS CLI to run a command with sub command update-function-code
with parameters --function-name $(LAMBDA_NAME) --zip-file fileb://$(FUNCTION_NAME).zip
If you have a layer to attach to the Lambda you should then run this script with lambda name in args:
LAYER_ARN=$(aws lambda list-layer-versions --layer-name layer_name| jq .LayerVersions[0].LayerVersionArn | sed 's/"//g')
LAMBDA=$1
# Update the lambda function
aws lambda update-function-code --function-name $LAMBDA --zip-file fileb://thezipfile.zip
sleep 5 # This is optional
# Attach layer to the lambda
aws lambda update-function-configuration --function-name $LAMBDA --layers $LAYER_ARN --handler app.lambda_handler
Step 4: Test and Deploy your Pipeline
Once you have configured your pipeline, you can test and deploy it to your AWS environment. To test your pipeline, you can use a test environment in your Azure DevOps project. To deploy your pipeline to production, you can trigger a deployment from your Azure DevOps project or set up an automatic deployment trigger.
In conclusion, building a pipeline in Azure DevOps for AWS Lambda functions is a simple and efficient way to automate the deployment of code changes to your AWS environment. By using Azure DevOps and AWS CloudFormation, you can streamline your deployment process and ensure that your code changes are deployed quickly and reliably to your AWS environment.