Deploy a Lambda Function
Tutorial
In this example, the source code in the directory Lambda.CreateBooking/ is deployed to your AWS account:
This Lambda function is deployed under the product name Kattehotell, and the function name create-booking.
Step 1: Prepare an ECR repository
- Navigate to repository SharedKontoInfrastruktur
- Navigate to
./Shared/kattehotell/eu-west-1/ecr/main.tf - Update
localswith new entries: - Create a Pull Request to Terraform apply this change.
Terraform provisions a new ECR repository with the name
${product_name}-${function_name}. In this example, the resulting ECR repository receives the namekattehotell-create-booking.
Step 2: Build and push Docker Image
Before you can proceed the ECR repository cannot be empty.
-
Create a GitHub Actions workflow file
.github/workflows/deploy-to-test.yml:with the following content:. ├── .github/ │ └── workflows/ │ └── deploy-to-test.yml └── Lambda.CreateBooking/ ├── ... └── Dockerfile./.github/workflows/deploy-to-test.ymlwherename: Deploy Lambda Function to TEST on: push: branches: [master] workflow_dispatch: jobs: build_push_image_to_shared: name: Build image and publish to ECR runs-on: ubuntu-latest permissions: id-token: write contents: read steps: - name: "Lambda.CreateBooking" uses: BYM-IKT/github-actions/build-and-push-image-to-ecr@master with: dockerfile-path: Lambda.CreateBooking/Dockerfile aws-account-id: "<<AWS_ACCOUNT_ID>>" ecr-name: kattehotell-create-booking image-tags: latest deploy_image_to_lambda_function_test: needs: [build_push_image_to_shared] name: "Deploy to TEST" uses: BYM-IKT/github-actions/.github/workflows/deploy-image-to-lambda.yml@master with: environment: testing aws-account-id-target: <<AWS_ACCOUNT_ID>> ecr-name: kattehotell-create-booking image-tag-target: latest image-tag-new: test lambda-name: test-kattehotell-create-booking<<AWS_ACCOUNT_ID>>is replaced with the Id of your AWS Account. -
Run the pipeline, which builds and pushes your Docker image to your ECR repository.
Why did deploy_image_to_lambda_function_test crash?
This pipeline crashes when running deploy_image_to_lambda_function_test as the Lambda function does not exist yet.
This is fixed in the next steps.
Step 3: Create Lambda Function
Provision your Lambda Function referencing the ECR repository's URI as follows:
| locals.tf | |
|---|---|
Create a Pull Request to Terraform apply this change.
Terraform provisions a new Lambda function named ${environment}-${product_name}-${function_name}.
In this example, the resulting name of the Lambda function is test-kattehotell-create-booking.
Step 4: Retry application pipeline
The whole pipeline created in Step 2 should work now. Try rerunning it.