对 Lambda 容器映像部署启用 Lambda Insights - Amazon CloudWatch

对 Lambda 容器映像部署启用 Lambda Insights

要为部署为容器映像的 Lambda 函数启用 Lambda Insights,请在 Dockerfile 中添加相应的行。这些行会将 Lambda Insights 代理安装为容器镜像中的扩展程序。对于 x86-64 容器和 ARM64 容器,要添加的行是不同的。

注意

Lambda 洞察代理仅在使用 Amazon Linux 2 和 Amazon Linux 2023 的 Lambda 运行时上受支持。

x86-64 容器映像部署

对于在 x86-64 容器上运行并部署为容器映像的 Lambda 函数,要为其启用 Lambda Insights,请在 Dockerfile 中添加以下行。这些行会将 Lambda Insights 代理安装为容器镜像中的扩展程序。

RUN curl -O https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm && \ rpm -U lambda-insights-extension.rpm && \ rm -f lambda-insights-extension.rpm

创建 Lambda 函数后,向函数的执行角色分配 CloudWatchLambdaInsightsExecutionRolePolicy IAM 策略,并对基于容器镜像的 Lambda 函数启用 Lambda Insights。

注意

要使用较早版本的 Lambda Insights 扩展程序,请将先前命令中的 URL 替换为以下 URL:https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.1.0.111.0.rpm。目前,仅 1.0.111.0 及更高版本的 Lambda Insights 可用。有关更多信息,请参阅 Lambda Insights 扩展程序的可用版本

验证 Linux 服务器上 Lambda Insights 代理软件包的签名
  1. 输入以下命令下载公有密钥。

    shell$ wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg
  2. 输入以下命令将公有密钥导入到密钥环中。

    shell$ gpg --import lambda-insights-extension.gpg

    该输出值将类似于以下内容。记下 key 值,您将需要在下一步中使用该值。在此示例输出中,密钥值为 848ABDC8

    gpg: key 848ABDC8: public key "Amazon Lambda Insights Extension" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
  3. 输入以下命令验证指纹。将 key-value 替换为上一步中的密钥值。

    shell$ gpg --fingerprint key-value

    此命令输出中的指纹字符串应为 E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8。如果指纹字符串不匹配,请勿安装该代理,请联系 AWS。

  4. 验证指纹后,您可以使用该指纹验证 Lambda Insights 代理软件包。输入以下命令下载软件包签名文件。

    shell$ wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm.sig
  5. 输入以下命令验证签名:

    shell$ gpg --verify lambda-insights-extension.rpm.sig lambda-insights-extension.rpm

    输出应与以下内容类似:

    gpg: Signature made Thu 08 Apr 2021 06:41:00 PM UTC using RSA key ID 848ABDC8 gpg: Good signature from "Amazon Lambda Insights Extension" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8

    在预期输出中,可能会出现关于受信任签名的警告。只有当您或您信任的某个人对密钥进行了签名,密钥才是可信的。这并不意味着签名无效,只是您尚未验证公有密钥而已。

    如果输出中包含 BAD signature,请检查是否正确执行了以上步骤。如果您继续获得 BAD signature 响应,请与 AWS 联系,并避免使用所下载的文件。

x86-64 示例

本部分包括一个对基于容器镜像的 Python Lambda 函数启用 Lambda Insights 的示例。

对 Lambda 容器镜像启用 Lambda Insights 的示例
  1. 创建一个类似于以下的 Dockerfile:

    FROM public.ecr.aws/lambda/python:3.8 // extra lines to install the agent here RUN curl -O https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm && \ rpm -U lambda-insights-extension.rpm && \ rm -f lambda-insights-extension.rpm COPY index.py ${LAMBDA_TASK_ROOT} CMD [ "index.handler" ]
  2. 创建一个类似于以下内容的名为 index.py 的 Python 文件:

    def handler(event, context): return { 'message': 'Hello World!' }
  3. 将 Dockerfile 和 index.py 放在同一目录中。然后,在该目录中执行以下步骤来构建 Docker 镜像并将其上载到 Amazon ECR。

    // 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
  4. 使用您刚刚创建的 Amazon ECR 镜像创建 Lambda 函数。

  5. CloudWatchLambdaInsightsExecutionRolePolicy IAM 策略分配给函数的执行角色。

ARM64 容器映像部署

对于在 AL2_aarch64 容器(采用 ARM64 架构)上运行并部署为容器映像的 Lambda 函数,要为其启用 Lambda Insights,请在 Dockerfile 中添加以下行。这些行会将 Lambda Insights 代理安装为容器镜像中的扩展程序。

RUN curl -O https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm && \ rpm -U lambda-insights-extension-arm64.rpm && \ rm -f lambda-insights-extension-arm64.rpm

创建 Lambda 函数后,向函数的执行角色分配 CloudWatchLambdaInsightsExecutionRolePolicy IAM 策略,并对基于容器镜像的 Lambda 函数启用 Lambda Insights。

注意

要使用较早版本的 Lambda Insights 扩展程序,请将先前命令中的 URL 替换为以下 URL:https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.1.0.229.0.rpm。目前,仅 1.0.229.0 及更高版本的 Lambda Insights 可用。有关更多信息,请参阅 Lambda Insights 扩展程序的可用版本

验证 Linux 服务器上 Lambda Insights 代理软件包的签名
  1. 输入以下命令下载公有密钥。

    shell$ wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg
  2. 输入以下命令将公有密钥导入到密钥环中。

    shell$ gpg --import lambda-insights-extension.gpg

    该输出值将类似于以下内容。记下 key 值,您将需要在下一步中使用该值。在此示例输出中,密钥值为 848ABDC8

    gpg: key 848ABDC8: public key "Amazon Lambda Insights Extension" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
  3. 输入以下命令验证指纹。将 key-value 替换为上一步中的密钥值。

    shell$ gpg --fingerprint key-value

    此命令输出中的指纹字符串应为 E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8。如果指纹字符串不匹配,请勿安装该代理,请联系 AWS。

  4. 验证指纹后,您可以使用该指纹验证 Lambda Insights 代理软件包。输入以下命令下载软件包签名文件。

    shell$ wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm.sig
  5. 输入以下命令验证签名:

    shell$ gpg --verify lambda-insights-extension-arm64.rpm.sig lambda-insights-extension-arm64.rpm

    输出应与以下内容类似:

    gpg: Signature made Thu 08 Apr 2021 06:41:00 PM UTC using RSA key ID 848ABDC8 gpg: Good signature from "Amazon Lambda Insights Extension" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8

    在预期输出中,可能会出现关于受信任签名的警告。只有当您或您信任的某个人对密钥进行了签名,密钥才是可信的。这并不意味着签名无效,只是您尚未验证公有密钥而已。

    如果输出中包含 BAD signature,请检查是否正确执行了以上步骤。如果您继续获得 BAD signature 响应,请与 AWS 联系,并避免使用所下载的文件。

ARM64 示例

本部分包括一个对基于容器镜像的 Python Lambda 函数启用 Lambda Insights 的示例。

对 Lambda 容器镜像启用 Lambda Insights 的示例
  1. 创建一个类似于以下的 Dockerfile:

    FROM public.ecr.aws/lambda/python:3.8 // extra lines to install the agent here RUN curl -O https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm && \ rpm -U lambda-insights-extension-arm64.rpm && \ rm -f lambda-insights-extension-arm64.rpm COPY index.py ${LAMBDA_TASK_ROOT} CMD [ "index.handler" ]
  2. 创建一个类似于以下内容的名为 index.py 的 Python 文件:

    def handler(event, context): return { 'message': 'Hello World!' }
  3. 将 Dockerfile 和 index.py 放在同一目录中。然后,在该目录中执行以下步骤来构建 Docker 镜像并将其上载到 Amazon ECR。

    // 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
  4. 使用您刚刚创建的 Amazon ECR 镜像创建 Lambda 函数。

  5. CloudWatchLambdaInsightsExecutionRolePolicy IAM 策略分配给函数的执行角色。