From 5c51901fe4dfacc12a431c0e2ea2bf89b1fd7559 Mon Sep 17 00:00:00 2001 From: Rehan Haider Date: Sat, 7 Dec 2024 07:12:09 +0000 Subject: [PATCH] custom docker in lambda --- .github/workflows/codeql.yml | 70 ------- .../50001050-cdk-fn-lambda-custom-docker.md | 172 ++++++++++++++++++ .../aws/50001050-01-aws-lambda-output.png | Bin 0 -> 36479 bytes 3 files changed, 172 insertions(+), 70 deletions(-) delete mode 100644 .github/workflows/codeql.yml create mode 100644 content/aws/50001050-cdk-fn-lambda-custom-docker.md create mode 100644 content/images/aws/50001050-01-aws-lambda-output.png diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 86b99f50..00000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,70 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - #push: - # branches: [ main ] - #pull_request: - # The branches below must be a subset of the branches above - # branches: [ main ] - schedule: - - cron: "37 10 * * 1" - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: ["javascript", "python"] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://git.io/codeql-language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - # ℹī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 diff --git a/content/aws/50001050-cdk-fn-lambda-custom-docker.md b/content/aws/50001050-cdk-fn-lambda-custom-docker.md new file mode 100644 index 00000000..3fc9caa4 --- /dev/null +++ b/content/aws/50001050-cdk-fn-lambda-custom-docker.md @@ -0,0 +1,172 @@ +Title: How to create a Lambda function in a ECR Docker image using AWS CDK in Python +Date: 2024-12-06 +Category: AWS Academy +Series: AWS CDK +series_index: 1040 +Tags: aws, cdk, python +Author: Rehan Haider +Summary: This article provides a walkthrough on how to deploy an AWS Lambda function using a AWS provided ECR Docker image with AWS CDK in Python +Keywords: lambda, cdk, docker, python, aws, ecr + + + +In previous posts we looked at how to create using AWS CDK: + +1. [Default Lambda function]({filename}50001000-cdk-fn-create-lambda.md), +2. [Lambda function with Python dependencies using a Lambda layer]({filename}50001020-cdk-fn-lambda_layers.md) +3. [Lambda function with Python dependencies that uses AWS provided Docker image]({filename}50001030-cdk-fn-lambda-python-deps.md) +4. [Lambda function using a AWS ECR Docker image]({filename}50001040-cdk-fn-lambda-aws-docker.md) + +But what if you need something more custom? We can use a similar approach to the previous post, but it requires a bit more work. + + +## Prerequisites + +1. Ensure that you have [AWS CDK and SAM CLI installed]({filename}00000100-cdk-installing-cdk-sam-cli.md). +2. If needed [create a new CDK application]({filename}50000020-cdk-new-app.md). + + +## Create a Lambda function using a custom Docker image + +We will need to do the following: + + +1. Create the `Dockerfile` +3. Create a `requirements.txt` file to specify the Python packages to be installed. +4. Add AWS Lambda Runtime Interface Client (RIC) to the Dockerfile. +5. Write the lambda function. +6. Create the lambda stack. + + +### 1. Create the Dockerfile + +Let's create a `lambda` directory in `cdk_app` to store the files for this function. + +```Dockerfile +# filename: cdk_app/lambda/Dockerfile + +FROM ubuntu:latest + +ARG FUNCTION_DIR="/function" + +# 👇đŸŊ Install Python and pip +RUN apt update -y +RUN apt install -y python3 python3-pip + +# 👇đŸŊ Copy the rest of the application +RUN mkdir -p ${FUNCTION_DIR} +COPY . ${FUNCTION_DIR} + + +# 👇đŸŊ Set working directory +WORKDIR ${FUNCTION_DIR} + +# 👇đŸŊ Install dependencies +# A target directory is required since latest versions of Ubuntu have implemented PEP 668 +# which prevents pip from installing packages system-wide. +RUN python3 -m pip install --target ${FUNCTION_DIR} -r requirements.txt + +# 👇đŸŊ Install AWS Lambda Runtime Interface Client +RUN python3 -m pip install --target ${FUNCTION_DIR} awslambdaric + +# 👇đŸŊ Define the entrypoint +ENTRYPOINT ["python3", "-m", "awslambdaric"] + +# 👇đŸŊ Set the handler to be used by the Lambda runtime +CMD ["index.handler"] +``` + +Within this image we have: + +1. Used the latest Ubuntu as the base image. This could be changed to a different image if needed. +2. We ensure that Python and pip are installed. +3. Created a directory for the function code. +4. Copied the function code into function directory. +5. Installed the Python packages specified in the `requirements.txt` file in the function directory. +6. Installed the AWS Lambda Runtime Interface Client (RIC) in the function directory. +7. Set the command to be executed when the container starts. + +!!! note + 1. The RIC is required for the Lambda function to communicate with the Lambda runtime. + 2. The packages are installed in the function directory since the latest versions of Ubuntu have implemented PEP 668 which prevents pip from installing packages system-wide. + 3. The `ENTRYPOINT` and `CMD` instructions are used to specify the command to be executed when the container starts. + + +### 2. Create a requirements.txt file + +Create a new file called `requirements.txt` in the `cdk_app/lambda` directory. Any Python packages that you may need to install can be added to this file. + +``` +requests +``` + +### 3. Create the lambda function + +Within the `lambda` directory create a new file called `index.py`. This is the main Python file that will be executed by the Lambda function. + +```python +# filename: cdk_app/lambda/index.py + +import requests + +def handler(event, context): + response = requests.get("https://jsonplaceholder.typicode.com/todos/1") + + return {"statusCode": 200, "body": response.json()} +``` + + +### 4. Create a lambda_stack.py file + +We modify the `lambda_stack.py` file to create the CDK stack. + +```python +# filename: cdk_app/lambda_stack.py + +from aws_cdk import ( + Stack, + aws_lambda as _lambda, +) +from constructs import Construct + +class LambdaStack(Stack): + + def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: + super().__init__(scope, construct_id, **kwargs) + + fn = _lambda.DockerImageFunction( + self, + "LambdaFunction", + code=_lambda.DockerImageCode.from_image_asset("cdk_app/lambda"), + ) +``` + +In the above code we use the `DockerImageFunction` construct to create the Lambda function. It takes the following arguments: + +1. `self`: The construct itself. +2. `id`: The unique identifier for the function. +3. `code`: The Docker image code. In this case we are using the `DockerImageCode.from_image_asset` method to specify the path to the Docker image. +4. `environment`: The environment variables for the function. This is not required but is useful for testing purposes. + +Compared to previous examples, we don't need to identify the handler function as this is specified in the `Dockerfile`. + +Now finally, let's initialise the stack by creating the `app.py` file. + +```python +# filename: app.py + +import aws_cdk as cdk + +from cdk_app.lambda_stack import LambdaStack + +app = cdk.App() +lambda_stack = LambdaStack(app, "LambdaStack") + +app.synth() +``` + +To deploy the stack, run `cdk deploy`. + +When the lambda function is deployed, you can go to the console and test the function. It should show the below output. + +![Lambda function output]({static}/images/aws/50001050-01-aws-lambda-output.png) \ No newline at end of file diff --git a/content/images/aws/50001050-01-aws-lambda-output.png b/content/images/aws/50001050-01-aws-lambda-output.png new file mode 100644 index 0000000000000000000000000000000000000000..cd20d8d8343df92efadb41da6b7eed11680f5401 GIT binary patch literal 36479 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