AWS Lambda 部署操作参考 - AWS CodePipeline

AWS Lambda 部署操作参考

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

  • 用于流量转移的金丝雀和线性部署

  • 一次性全部部署

注意

此操作仅支持 V2 类型管道。

操作类型

  • 类别:Deploy

  • 拥有者:AWS

  • 提供方:Lambda

  • 版本:1

配置参数

FunctionName

必需:是

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

您必须已创建一个版本。

FunctionAlias

必需:否

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

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

PublishedTargetVersion

必需:否

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

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

DeployStrategy

必需:否(默认值是 AllAtOnce

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

  • AllAtOnce -

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

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

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

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

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

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

此字段有以下注意事项:

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

  • 仅在提供 FunctionAlias 时可用。

警报

必需:否

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

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

使用 Lambda 部署操作的新管道的编辑操作页面

输入构件

  • 构件数:1

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

输出构件

  • 构件数:0

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

输出变量

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

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

FunctionVersion

已部署的新 Lambda 函数版本。

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

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

JSON
{ "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:us-east-1:111122223333:function:{{FunctionName}}", "arn:aws:lambda:us-east-1:111122223333:function:{{FunctionName}}:*" ] }, { "Sid": "StatementForCloudWatch", "Effect": "Allow", "Action": [ "cloudwatch:DescribeAlarms" ], "Resource": [ "arn:aws:cloudwatch:us-east-1:111122223333:alarm:{{AlarmNames}}" ] }, { "Sid": "StatementForLogs1", "Effect": "Allow", "Action": [ "logs:CreateLogGroup" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/us-east-1/codepipeline/{{pipelineName}}", "arn:aws:logs:us-east-1:111122223333:log-group:/us-east-1/codepipeline/{{pipelineName}}:*" ] }, { "Sid": "StatementForLogs2", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/us-east-1/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" },

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