创建定义为容器映像的 函数 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

创建定义为容器映像的 函数

在此入门练习中,您将创建一个定义为容器镜像的函数。首先,使用 Docker CLI 为函数代码创建容器镜像,然后使用 Lambda 控制台从容器镜像创建函数。

Prerequisites

要完成以下步骤,您需要命令行终端或 Shell,以便运行命令。在单独的数据块中列出了命令和预期输出:

aws --version

您应看到以下输出:

aws-cli/2.0.57 Python/3.7.4 Darwin/19.6.0 exe/x86_64

对于长命令,使用转义字符 (\) 将命令拆分为多行。

在 Linux 和 macOS 中,可使用您首选的外壳程序和程序包管理器。在 Windows 10 中,您可以 安装 Windows Subsystem for Linux,获取 Ubuntu 和 Bash 与 Windows 集成的版本。

本练习使用 Docker CLI 命令创建容器映像。要安装 Docker CLI,请参阅 Docker Docs 网站上的获取 Docker

创建容器映像

Amazon在 Amazon Elastic Container Registry (Amazon ECR) 中提供了一组基本镜像。在本入门练习中,我们使用 Node.js 基本映像创建容器映像。有关基本映像的更多信息,请参阅 Lambda 的Amazon基本镜像

在以下命令中,请将 123456789012 替换为您的 Amazon 账户 ID。

使用 Amazon Node.js 14 基本镜像创建镜像

  1. 在本地计算机上,为新函数创建项目目录。

  2. 在项目目录中创建一个名为 app.js 的文件。将以下代码添加到 app.js

    exports.handler = async (event) => { // TODO implement const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
  3. 使用文本编辑器在项目目录中创建一个名为 Dockerfile 的新文件。将以下内容添加到 Dockerfile

    FROM public.ecr.aws/lambda/nodejs:14 # Copy function code COPY app.js ${LAMBDA_TASK_ROOT} # Set the CMD to your handler CMD [ "app.handler" ]
  4. 生成 Docker 映像。从项目目录中,运行以下命令:

    docker build -t hello-world .
  5. (可选)Amazon基本镜像包括 Lambda 运行时接口模拟器,因此您可以在本地测试函数。

    1. 运行 Docker 映像。从项目目录中,运行 docker run 命令:

      docker run -p 9000:8080 hello-world:latest
    2. 测试 Lambda 函数。在新的终端窗口中,运行 curl 命令来调用函数:

      curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

将镜像上载到 Amazon ECR 存储库

在以下命令中,请将替换为 123456789012 替换为您的 Amazon 账户 ID,并将区域值设置为您想要在其中创建 ECR 存储库的区域。

  1. 对您的 Amazon ECR 注册表进行 Docker CLI 身份验证。

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
  2. 使用 create-repository 命令在 Amazon ECR 中创建存储库。

    aws ecr create-repository --region us-east-1 --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
  3. 使用 docker tag 命令将映像标记为与存储库名称匹配。

    docker tag hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  4. 使用 docker push 命令将镜像部署到 Amazon ECR。

    docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

更新用户权限

确保创建函数的 IAM 用户或角色的权限包含Amazon托管策略 GetRepositoryPolicySetRepositoryPolicy。有关访问 Amazon ECR 存储库中镜像的用户权限的信息,请参阅 Amazon ECR 权限

例如,使用 IAM 控制台创建具有以下策略的角色:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": ["ecr:SetRepositoryPolicy","ecr:GetRepositoryPolicy"], "Resource": "arn:aws:ecr:<region>:<account>:repository/<repo name>/" } ] }

创建定义为容器镜像的 Lambda 函数

使用 Lambda 控制台创建定义为容器镜像的函数。

使用控制台创建函数

  1. 打开 Lamba 控制台的 Functions(函数)页面

  2. 选择创建函数

  3. 选择 Container image(容器映像)选项。

  4. Basic information (基本信息) 中,执行以下操作:

    1. 对于 Function name(函数名称),请输入 my-function

    2. 对于 Container image URI(容器镜像 URI),输入您之前创建的 Amazon ECR 镜像的 URI。

  5. 选择创建函数

Lambda 创建函数和执行角色,该角色授予函数上载日志的权限。在您调用函数时,Lambda 担任执行角色,并使用该执行角色为Amazon开发工具包创建凭证和从事件源读取数据。

调用 Lambda 函数

使用控制台中提供的示例事件数据调用 Lambda 函数。

调用函数

  1. 选择函数后,选择 Test (测试) 选项卡。

  2. Test event (测试事件) 部分中,选择 New event (新事件)。在 Template (模板) 中,保留默认的 hello-world 选项。输入此测试的 Name(名称)并记录以下示例事件模板:

    { "key1": "value1", "key2": "value2", "key3": "value3" }
  3. 选择 Save changes(保存更改),然后选择 Test(测试)。每个用户每个函数可以创建最多 10 个测试事件。这些测试事件不适用于其他用户。

    Lambda 代表您运行函数。函数处理程序接收并处理示例事件。

  4. 成功完成后,在控制台中查看结果。

    • Execution result (执行结果) 显示执行状态为 succeeded (已成功)。展开 Details (详细信息) 以查看函数执行结果。请注意,logs(日志)链接将在 CloudWatch 控制台中打开 Log groups(日志组)页面。

    • Summary 部分显示在 Log output 部分中报告的密钥信息(执行日志中的 REPORT 行)。

    • Log output(日志输出)部分显示 Lambda 针对每次调用生成的日志。该函数会将这些日志写入 CloudWatch。为方便起见,Lambda 控制台会为您显示这些日志。选择 Click here(单击此处)可将日志添加到 CloudWatch 日志组,然后在 CloudWatch 控制台中打开 Log groups(日志组)页面。

  5. 再运行函数(选择 Test(测试))几次可收集可在下一步骤中查看的一些指标。

  6. 选择 Monitor(监控)选项卡。此页面显示了 Lambda 发送到 CloudWatch 的指标的图表。

    有关这些图表的更多信息,请参阅 在 Lambda 控制台监控函数

清除

如果已完成容器镜像,请参阅 Amazon Elastic Container Registry 用户指南中的删除镜像

如果您已完成使用您的函数,请将其删除。您还可以删除存储函数日志的日志组以及控制台创建的执行角色。

要删除 Lambda 函数

  1. 打开 Lamba 控制台的 Functions(函数)页面

  2. 选择函数。

  3. 依次选择 ActionsDelete

  4. Delete function(删除函数)对话框中,选择 Delete(删除)

删除日志组

  1. 打开 CloudWatch 控制台的 Log groups page(日志组页面)。

  2. 选择函数的日志组 (/aws/lambda/my-function)。

  3. 依次选择 Actions(操作)Delete log group(s)(删除日志组)

  4. Delete log group(s)(删除日志组)对话框中,选择 Delete(删除)

删除执行角色

  1. 打开 IAM 控制台的 Roles page(角色页面)。

  2. 选择函数的角色 (my-function-role-31exxmpl)。

  3. 选择删除角色

  4. Delete role(删除角色)对话框中,选择 Yes, delete(是的,删除)

您可以使用 Amazon CloudFormation 和 Amazon CLI 自动创建和清理函数、日志组和角色。有关功能齐全的示例应用程序,请参阅 Lambda 示例应用程序