使用容器镜像添加Amazon AppConfigLambda 扩展 - Amazon AppConfig
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用容器镜像添加Amazon AppConfigLambda 扩展

你可以打包你的Amazon AppConfig将 Lambda 扩展作为容器镜像上载到在 Amazon Elastic Container Registry (Amazon ECR) 上托管的容器注册表。

添加Amazon AppConfigLambda 容器镜像的 Lambda 扩展

  1. 输入Amazon Web Services 区域以及中的 Amazon 资源名称 (ARN)Amazon Command Line Interface(Amazon CLI) 如下所示。将区域和 ARN 值替换为您的区域和匹配的 ARN 以检索 Lambda 图层的副本。

    aws lambda get-layer-version-by-arn \ --region us-east-1 \ --arn arn:aws:lambda::layer:AWS-AppConfig-Extension:00

    下面是响应。

    { "LayerVersionArn": "arn:aws:lambda::layer:AWS-AppConfig-Extension:00", "Description": "Amazon AppConfig extension: Use dynamic configurations deployed via Amazon AppConfig for your Amazon Lambda functions", "CreatedDate": "2021-04-01T02:37:55.339+0000", "LayerArn": "arn:aws:lambda::layer:Amazon-AppConfig-Extension", "Content": { "CodeSize": 5228073, "CodeSha256": "8otOgbLQbexpUm3rKlMhvcE6Q5TvwcLCKrc4Oe+vmMY=", "Location" : "S3-Bucket-Location-URL" }, "Version": 30, "CompatibleRuntimes": [ "python3.8", "python3.7", "nodejs12.x", "nodejs10.x", "ruby2.7" ], }
  2. 在上面的响应中,返回的值Location是包含 Lambda 扩展程序的 Amazon Simple Storage Service (Amazon S3) 存储桶的 URL。将 URL 粘贴到 Web 浏览器中以下载 Lambda 扩展名 .zip 文件。

    注意

    Amazon S3 存储桶 URL 仅可用 10 分钟。

    (可选)或者,您也可以使用以下内容。curl命令来下载 Lambda 扩展程序。

    curl -o extension.zip "S3-Bucket-Location-URL"

    (可选)或者,您也可以组合步骤 1步骤 2以检索 ARN 并立即下载 .zip 扩展名文件。

    aws lambda get-layer-version-by-arn \ --arn arn:aws:lambda::layer:AWS-AppConfig-Extension:00 \ | jq -r '.Content.Location' \ | xargs curl -o extension.zip
  3. 将以下行添加到Dockerfile将扩展程序添加到容器镜像。

    COPY extension.zip extension.zip RUN yum install -y unzip \ && unzip extension.zip /opt \ && rm -f extension.zip
  4. 确保 Lambda 函数执行角色具有AppConfig:GetConfiguration权限集。

示例

本节包括启用Amazon AppConfig基于容器镜像的 Python Lambda 函数上的 Lambda 扩展。

  1. 创建Dockerfile类似于以下内容。

    FROM public.ecr.aws/lambda/python:3.8 AS builder COPY extension.zip extension.zip RUN yum install -y unzip \ && unzip extension.zip -d /opt \ && rm -f extension.zip FROM public.ecr.aws/lambda/python:3.8 COPY --from=builder /opt /opt COPY index.py ${LAMBDA_TASK_ROOT} CMD [ "index.handler" ]
  2. 将扩展层下载到与Dockerfile.

    aws lambda get-layer-version-by-arn \ --arn arn:aws:lambda::layer:AWS-AppConfig-Extension:00 \ | jq -r '.Content.Location' \ | xargs curl -o extension.zip
  3. 创建一个名为的 Python 文件index.py与在相同的目录中Dockerfile.

    import urllib.request def handler(event, context): return { # replace parameters here with your application, environment, and configuration names 'configuration': get_configuration('myApp', 'myEnv', 'myConfig'), } def get_configuration(app, env, config): url = f'http://localhost:2772/applications/{app}/environments/{env}/configurations/{config}' return urllib.request.urlopen(url).read()
  4. 运行以下步骤以构建docker映像并将其上载到 Amazon ECR

    // set environment variables export ACCOUNT_ID = <YOUR_ACCOUNT_ID> export REGION = <AWS_REGION> // create an ECR repository aws ecr create-repository --repository-name test-repository // build the docker image docker build -t test-image . // sign in to AWS aws ecr get-login-password \ | docker login \ --username AWS \ --password-stdin "$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com" // tag the image docker tag test-image:latest "$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/test-repository:latest" // push the image to ECR docker push "$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/test-repository:latest"
  5. 使用您上面创建的 Amazon ECR 镜像创建 Lambda 函数。有关将 Lambda 函数作为容器的更多信息,请参阅创建定义为容器镜像的 Lambda 函数.

  6. 确保 Lambda 函数执行角色具有AppConfig:GetConfiguration权限集。