对 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 代理软件包的签名
输入以下命令下载公有密钥。
shell$
wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg输入以下命令将公有密钥导入到密钥环中。
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)
输入以下命令验证指纹。将
key-value
替换为上一步中的密钥值。shell$
gpg --fingerprint key-value此命令输出中的指纹字符串应为
E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8
。如果指纹字符串不匹配,请勿安装该代理,请联系 AWS。验证指纹后,您可以使用该指纹验证 Lambda Insights 代理软件包。输入以下命令下载软件包签名文件。
shell$
wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm.sig输入以下命令验证签名:
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 的示例
创建一个类似于以下的 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" ]
创建一个类似于以下内容的名为
index.py
的 Python 文件:def handler(event, context): return { 'message': 'Hello World!' }
将 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使用您刚刚创建的 Amazon ECR 镜像创建 Lambda 函数。
将 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 代理软件包的签名
输入以下命令下载公有密钥。
shell$
wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg输入以下命令将公有密钥导入到密钥环中。
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)
输入以下命令验证指纹。将
key-value
替换为上一步中的密钥值。shell$
gpg --fingerprint key-value此命令输出中的指纹字符串应为
E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8
。如果指纹字符串不匹配,请勿安装该代理,请联系 AWS。验证指纹后,您可以使用该指纹验证 Lambda Insights 代理软件包。输入以下命令下载软件包签名文件。
shell$
wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm.sig输入以下命令验证签名:
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 的示例
创建一个类似于以下的 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" ]
创建一个类似于以下内容的名为
index.py
的 Python 文件:def handler(event, context): return { 'message': 'Hello World!' }
将 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
使用您刚刚创建的 Amazon ECR 镜像创建 Lambda 函数。
将 CloudWatchLambdaInsightsExecutionRolePolicy IAM 策略分配给函数的执行角色。