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

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

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

您可以打包Amazon AppConfigLambda 扩展作为容器映像,将其上传到您在 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是 Amazon Simple Storage Service (Amazon S3) 存储桶的 URL,其中包含 Lambda 扩展。将 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 函数执行角色具有应用程序配置:获取配置权限集。

Example

本节包括一个示例,用于启用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. 使用您上面创建的亚马逊 ECR 映像创建 Lambda 函数。有关作为容器的 Lambda 函数的详细信息,请参阅创建定义为容器映像的 Lambda 函数

  6. 确保 Lambda 函数执行角色具有应用程序配置:获取配置权限集。