Amazon Lambda 部署操作参考 - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Lambda 部署操作参考

您可以使用 Amazon Lambda 部署操作来管理无服务器部署的应用程序代码部署。您可以部署函数并使用部署策略进行流量部署,如下所示:

  • 用于流量转移的 Canary 和线性部署

  • 一次性部署

注意

只有 V2 类型的管道支持此操作。

操作类型

  • 类别:Deploy

  • 拥有者:AWS

  • 提供方:Lambda

  • 版本:1

配置参数

FunctionName

必需:是

您在 Lambda 中创建的函数的名称,例如。MyLambdaFunction

您必须已经创建了一个版本。

FunctionAlias

必需:否

您在 Lambda 中创建的函数的别名是要部署到的函数,例如。live操作执行开始时,别名必须存在且后面有一个版本。(这将是回滚目标版本。)

如果未提供,则该操作会将源对象部署到$LATEST并创建新版本。在此用例中,部署策略和目标版本选项不可用。

PublishedTargetVersion

必需:否

要部署到的所需的 Lambda 函数版本。 FunctionAlias它可以是管道变量或操作级别变量,例如#{variables.lambdaTargetVersion}。版本必须在动作执行开始时发布。

如果未提供任何输入工件,则为必填项。

DeployStrategy

必填项:否(默认为AllAtOnce

确定 Lambda 部署操作用于将流量从原始版本的 Lambda 函数转移到新版本所采用的速率。FunctionAlias可用的部署策略是金丝雀或线性的。可接受的格式:

  • AllAtOnce -

    所有流量一次性转移到更新后的 Lambda 函数。

    如果未指定,则默认为AllAtOnce)

  • Canary10Percent5Minutes-在第一个增量中移动 10% 的流量。其余 90% 部署在五分钟后进行转移。

    百分比和分钟数的值都可以更改。

  • Linear10PercentEvery1Minute-每分钟移动 10% 的流量,直到所有流量都转移完毕。

    百分比和分钟数的值都可以更改。

以下注意事项适用于此字段:

  • 最长总等待时间为 2 天。

  • 仅在提供时FunctionAlias可用。

警报

必需:否

为 Lambda 部署配置的警报名称的逗号分隔列表。最多可添加 10 个警报。当监控的警报进入警报状态时,操作失败。

下图显示了该操作的 “编辑” 页面示例。

带有 Lambda 部署操作的新管道的编辑操作页面

输入构件

  • 构件数:1

  • 描述:为支持部署期间的脚本操作而提供的文件(如果有)。

输出构件

  • 构件数:0

  • 描述:输出构件不适用于此操作类型。

输出变量

配置后,此操作会生成变量,该变量可由管道中下游操作的操作配置引用。此操作生成的变量可视为输出变量,即使操作没有命名空间也是如此。您可以使用命名空间配置操作,以使这些变量可用于下游操作的配置。

有关更多信息,请参阅 变量参考

FunctionVersion

已部署的新 Lambda 函数版本。

Lambda 部署操作的服务角色策略权限

CodePipeline 运行操作时, CodePipeline 服务角色需要以下权限,这些权限已适当缩小范围,便于具有最低权限的访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "StatementForLambda", "Effect": "Allow", "Action": [ "lambda:GetAlias", "lambda:GetFunctionConfiguration", "lambda:GetProvisionedConcurrencyConfig", "lambda:PublishVersion", "lambda:UpdateAlias", "lambda:UpdateFunctionCode" ], "Resource": [ "arn:aws:lambda:aws:{{customerAccountId}}:function:{{FunctionName}}", "arn:aws:lambda:aws:{{customerAccountId}}:function:{{FunctionName}}:*" ] }, { "Sid": "StatementForCloudWatch", "Effect": "Allow", "Action": [ "cloudwatch:DescribeAlarms" ], "Resource": [ "arn:aws:cloudwatch:aws:{{customerAccountId}}:alarm:{{AlarmNames}}" ] }, { "Sid": "StatementForLogs1", "Effect": "Allow", "Action": [ "logs:CreateLogGroup" ], "Resource": [ "arn:aws:logs:aws:{{customerAccountId}}:log-group:/aws/codepipeline/{{pipelineName}}", "arn:aws:logs:aws:{{customerAccountId}}:log-group:/aws/codepipeline/{{pipelineName}}:*" ] }, { "Sid": "StatementForLogs2", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:aws:{{customerAccountId}}:log-group:/aws/codepipeline/{{pipelineName}}:log-stream:*" ] } ] }

操作声明

YAML
name: Deploy actionTypeId: category: Deploy owner: AWS provider: Lambda version: '1' runOrder: 1 configuration: DeployStrategy: Canary10Percent5Minutes FunctionAlias: aliasV1 FunctionName: MyLambdaFunction outputArtifacts: [] inputArtifacts: - name: SourceArtifact region: us-east-1 namespace: DeployVariables
JSON
{ "name": "Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "Lambda", "version": "1" }, "runOrder": 1, "configuration": { "DeployStrategy": "Canary10Percent5Minutes", "FunctionAlias": "aliasV1", "FunctionName": "MyLambdaFunction" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1", "namespace": "DeployVariables" },

下列相关资源在您使用此操作的过程中会有所帮助。