Lambda Function
Steps
In this example, we are going to deploy the source code in the directory Lambda.CreateBooking/ to your AWS account:
We want this Lambda function to be deployed under the application Kattehotell.
Step 1: Prepare an ECR repository
- Navigate to repository SharedKontoInfrastruktur
- Navigate to
./Shared/<application-name>/eu-west-1/ecr/main.tf - Update
localswith new entries: - Create a Pull Request to Terraform apply this change.
Terraform will provision a new ECR repository with the name
${application_name}-${service}. In our example, the resulting ECR repository will be namedkattehotell-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@v0 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 will build and push your Docker image to your ECR repository.
Why did deploy_image_to_lambda_function_test crash?
This pipeline will crash when running deploy_image_to_lambda_function_test as the Lambda function does not exist yet.
We will fix this in the forthcoming steps.
Step 3: Create Lambda Function
Provision your Lambda Function referencing the ECR repository's URI as follows:
module "application" {
source = "git@github.com:BYM-IKT/terraform-byks-module.git"
environment = "test"
...
lambda_functions = {
create-booking = {
...
ecr_uri = data.terraform_remote_state.shared_ecr.outputs["create-booking"]
image_tag = "test"
}
}
}
Create a Pull Request to Terraform apply this change.
Terraform will provision a new Lambda function named ${environment}-${application_name}-${service}.
In our example, the resulting name of the Lambda function will be test-kattehotell-create-booking.
Step 4: Retry application pipeline
The whole pipeline created in Step 2 should work now. Try rerunning it.