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

配置定义为容器映像的函数

您可以使用 Lambda 控制台和 Lambda API 创建定义为容器映像的函数、更新和测试映像代码以及配置其他函数设置。

注意

您不能将现有 .zip 文件存档函数转换为使用容器映像。您必须创建新函数。

当您使用映像标签选择映像时,Lambda 会将该标签转换为底层映像摘要。要检索映像的摘要,请使用 GetFunctionConfiguration API 操作。要将函数更新为较新的映像版本,您必须使用 Lambda 控制台更新函数代码,或使用 UpdateFunctionCode API 操作。配置操作(例如 UpdateFunctionConfiguration)不会更新函数的容器映像。

注意

在 Amazon ECR 中,如果将映像标签重新分配给另一个映像,则 Lambda 不会更新映像版本。

函数版本 $LATEST

在您发布函数版本时,代码和大多数配置设置都会被锁定,从而为该版本的用户维持一致的体验。只能在函数的未发布版本上更改代码和许多配置设置。默认情况下,控制台会显示函数未发布版本的配置信息。要查看函数的版本,请选择 Qualifiers(限定符)。未发布版本的名称为 $LATEST

请注意,Amazon Elastic Container Registry (Amazon ECR) 还使用最新标签来表示容器映像的最新版本。请务必小心,不要将此标签与 $LATEST 函数版本混淆。

有关管理版本的更多信息,请参阅Lambda 函数版本

容器映像部署

当您将代码作为容器映像部署到 Lambda 函数时,映像将为在 Lambda 上运行而进行优化。此过程可能需要几秒钟,在此期间函数处于挂起状态。优化过程完成后,函数将进入活动状态。

Amazon ECR 权限

为您的容器映像创建存储库时,Amazon ECR 向存储库策略添加权限,以允许 Lambda 检索映像并下载映像层的 URL。这些权限是 ecr:BatchGetImageecr:GetDownloadUrlForLayer

如果您的映像存储库不包含这些权限,Lambda 会向创建函数的 Amazon Identity and Access Management (IAM) 用户或角色添加以下权限:GetRepositoryPolicySetRepositoryPolicy

覆盖容器设置

您可以使用 Lambda 控制台或 Lambda API 覆盖以下容器映像设置:

  • ENTRYPOINT – 指定应用程序入口点的绝对路径。

  • CMD – 指定要通过 ENTRYPOINT 传入的参数。

  • WORKDIR – 指定工作目录的绝对路径。

  • ENV – 为 Lambda 函数指定环境变量。

您在 Lambda 控制台或 Lambda API 中提供的任何值都将覆盖 Dockerfile 中的值。

创建函数(控制台)

要创建定义为容器映像的函数,必须首先创建映像,然后将映像存储在 Amazon ECR 存储库中。

创建函数

  1. 打开 Lambda 控制台的“函数”页面

  2. 选择 Create function (创建函数)

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

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

    1. 对于 Function name(函数名称),输入函数名称。

    2. 对于 Container image URI(容器映像 URI),输入 Amazon ECR 映像 URI。

      • 或者,要浏览映像的 Amazon ECR 存储库,选择 Browse images(浏览映像)。从下拉列表中选择 Amazon ECR 存储库,然后选择映像。

    3. (可选)要覆盖包含在 Dockerfile 中的配置设置,请展开 Container image overrides(容器映像覆盖)。您可以覆盖以下任意设置:

      • 对于 Entrypoint,输入运行时可执行文件的完整路径。以下示例显示了 Node.js 函数的入口点:

        "/usr/bin/npx", "aws-lambda-ric"
      • 对于 Command,输入要使用 Entrypoint 传递到映像的其他参数。以下示例显示了 Node.js 函数的命令:

        "app.handler"
      • 对于 Working directory,输入函数工作目录的完整路径。以下示例显示了 Lambda 的 Amazon 基本映像的工作目录:

        "/var/task"
      注意

      对于覆盖设置,请确保将每个字符串括在引号 (" ") 中

  5. (可选)在 Permissions(权限)下,展开 Change default execution role(更改默认执行角色)。然后,选择创建新的执行角色,或使用现有角色。

  6. 选择创建函数

更新函数代码(控制台)

将容器映像部署到函数后,该映像是只读的。要更新函数代码,必须首先部署新的映像版本。创建新的映像版本,然后将映像存储在 Amazon ECR 存储库中。

要将函数配置为使用更新的容器映像

  1. 打开 Lambda 控制台的“函数”页面

  2. 选择要更新的函数。

  3. Image(映像)下,选择 Deploy new image(部署新映像)

  4. 选择 Browse images(浏览映像)

  5. Select container image(选择容器映像)对话框中,从下拉列表中选择 Amazon ECR 存储库,然后选择新映像版本。

  6. 选择 Save

覆盖映像参数(控制台)

您可以使用 Lambda 控制台覆盖容器映像中的配置值。

要覆盖容器映像中的配置值

  1. 打开 Lambda 控制台的“函数”页面

  2. 选择要更新的函数。

  3. Image configuration(映像配置)下,选择 Edit(编辑)

  4. 为任意覆盖设置输入新值,然后选择 Save(保存)

  5. (可选)要添加或覆盖环境变量,请在 Environment variables(环境变量)下选择 Edit(编辑)

    有关更多信息,请参阅 使用 Amazon Lambda 环境变量

使用 Lambda API

要管理定义为容器映像的函数,请使用以下 API 操作:

要创建定义为容器映像的函数,请使用 create-function 命令。将 package-type 设置为 Image 并用 code 参数指定容器映像 URI。请注意,您必须从与 Amazon EFS 中容器注册表相同的账户创建函数。

aws lambda create-function --region sa-east-1 --function-name my-function \ --package-type Image \ --code ImageUri=<ECR Image URI> \ --role arn:aws-cn:iam::123456789012:role/lambda-ex

要更新函数代码,请使用 update-function-code 命令。请使用 image-uri 参数指定容器映像位置。

注意

您无法更改函数的 package-type

aws lambda update-function-code --region sa-east-1 --function-name my-function \ --image-uri <ECR Image URI> \

要更新函数参数,请使用 update-function-configuration 操作。指定 EntryPointCommand 作为字符串数组,指定 WorkingDirectory 作为字符串。

aws lambda update-function-configuration --function-name my-function \ --image-config '{"EntryPoint": ["/usr/bin/npx", "aws-lambda-ric"], \ "Command": ["app.handler"] , \ "WorkingDirectory": "/var/task"}'

Amazon CloudFormation

您可以使用 Amazon CloudFormation 创建定义为容器映像的 Lambda 函数。在 Amazon CloudFormation 模板中,AWS::Lambda::Function 资源将指定 Lambda 函数。有关 AWS::Lambda::Function 资源中属性的描述,请参阅 Amazon CloudFormation 用户指南 中的 AWS::Lambda::Function

AWS::Lambda::Function 资源中,设置以下属性以创建定义为容器映像的函数:

  • AWS::Lambda::Function

    • PackageType – 设置为 Image

    • Code – 在 ImageUri 字段中输入容器映像 URI。

    • ImageConfig –(可选)覆盖容器映像配置属性。

AWS::Lambda::Function 中的 ImageConfig 属性包含以下字段:

  • Command – 指定要通过 EntryPoint 传入的参数。

  • EntryPoint – 指定应用程序的入口点。

  • WorkingDirectory – 指定工作目录。

注意

如果在 Amazon CloudFormation 模板中声明 ImageConfig 属性,则必须为全部三个 ImageConfig 属性提供值。

有关更多信息,请参阅 Amazon CloudFormation 用户指南 中的 ImageConfig