

# 对 Lambda 容器映像部署启用 Lambda Insights
<a name="Lambda-Insights-Getting-Started-docker"></a>

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

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

**Topics**
+ [x86-64 容器映像部署](#Lambda-Insights-Getting-Started-docker-x86-64)
+ [ARM64 容器映像部署](#Lambda-Insights-Getting-Started-docker-ARM64)

## x86-64 容器映像部署
<a name="Lambda-Insights-Getting-Started-docker-x86-64"></a>

对于在 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`。有关更多信息，请参阅 [Lambda Insights 扩展程序的可用版本](Lambda-Insights-extension-versions.md)。

**验证 Linux 服务器上 Lambda Insights 代理软件包的签名**

1. 输入以下命令下载公有密钥。

   ```
   shell$ wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg
   ```

1. 输入以下命令将公有密钥导入到密钥环中。

   ```
   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)
   ```

1. 输入以下命令验证指纹。将 `key-value` 替换为上一步中的密钥值。

   ```
   shell$  gpg --fingerprint key-value
   ```

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

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

   ```
   shell$  wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm.sig
   ```

1. 输入以下命令验证签名：

   ```
   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 示例
<a name="Lambda-Insights-Getting-Started-docker-example"></a>

本部分包括一个对基于容器镜像的 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" ]
   ```

1. 创建一个类似于以下内容的名为 `index.py` 的 Python 文件：

   ```
   def handler(event, context):
     return {
       'message': 'Hello World!'
     }
   ```

1. 将 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
   ```

1. 使用您刚刚创建的 Amazon ECR 镜像创建 Lambda 函数。

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

## ARM64 容器映像部署
<a name="Lambda-Insights-Getting-Started-docker-ARM64"></a>

对于在 AL2\$1aarch64 容器（采用 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`。有关更多信息，请参阅 [Lambda Insights 扩展程序的可用版本](Lambda-Insights-extension-versions.md)。

**验证 Linux 服务器上 Lambda Insights 代理软件包的签名**

1. 输入以下命令下载公有密钥。

   ```
   shell$ wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg
   ```

1. 输入以下命令将公有密钥导入到密钥环中。

   ```
   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)
   ```

1. 输入以下命令验证指纹。将 `key-value` 替换为上一步中的密钥值。

   ```
   shell$  gpg --fingerprint key-value
   ```

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

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

   ```
   shell$  wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm.sig
   ```

1. 输入以下命令验证签名：

   ```
   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 示例
<a name="Lambda-Insights-Getting-Started-docker-example-ARM64"></a>

本部分包括一个对基于容器镜像的 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" ]
   ```

1. 创建一个类似于以下内容的名为 `index.py` 的 Python 文件：

   ```
   def handler(event, context):
     return {
       'message': 'Hello World!'
     }
   ```

1. 将 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
   ```

1. 使用您刚刚创建的 Amazon ECR 镜像创建 Lambda 函数。

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