AWS Lambda 部署動作參考 - AWS CodePipeline

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS Lambda 部署動作參考

您可以使用 AWS Lambda 部署動作來管理無伺服器部署的應用程式程式碼。您可以部署 函數,並使用流量部署的部署策略,如下所示:

  • 流量轉移的 Canary 和線性部署

  • 一次全部部署

注意

只有 V2 類型管道才支援此動作。

動作類型

  • 類別:Deploy

  • 擁有者:AWS

  • 提供者:Lambda

  • 版本:1

組態參數

FunctionName

必要:是

您在 Lambda 中建立的函數名稱,例如 MyLambdaFunction

您必須已建立版本。

FunctionAlias

必要:否

您在 Lambda 中建立的函數別名,以及要部署到的函數,例如 live。別名必須存在,並在動作執行開始時有一個版本。(這會是復原目標版本。)

如果未提供,動作會將來源成品部署到 $LATEST並建立新的版本。在此使用案例中,部署策略和目標版本選項不可用。

PublishedTargetVersion

必要:否

要部署到 FunctionAlias 的所需 Lambda 函數版本。它可以是管道或動作層級變數,例如 #{variables.lambdaTargetVersion}。版本必須在動作執行開始時發佈。

如果未提供輸入成品,則為必要項。

DeployStrategy

必要:否 (預設為 AllAtOnce)

決定 Lambda 部署動作用來將流量從 Lambda 函數的原始版本轉移到 FunctionAlias 新版本的速率。可用的部署策略為 Canary 或線性。接受的格式:

  • AllAtOnce -

    將所有流量一次轉移到更新的 Lambda 函數。

    如果未指定,則預設值為 AllAtOnce)

  • Canary10Percent5Minutes - 在第一個增量中轉移 10% 的流量。剩餘的 90% 會在五分鐘之後部署。

    您可以變更百分比和分鐘的值。

  • Linear10PercentEvery1Minute - 每分鐘轉移 10% 的流量,直到轉移所有流量為止。

    您可以變更百分比和分鐘的值。

此欄位適用下列考量事項:

  • 等待時間上限為 2 天。

  • 只有在提供 FunctionAlias 時才可用。

警示

必要:否

針對 Lambda 部署設定的警示名稱逗號分隔清單。最多可新增 10 則警示。當監控的警示進入 ALARM 狀態時,動作會失敗。

下圖顯示 動作的編輯頁面範例。

使用 Lambda 部署動作編輯新管道的動作頁面

Input artifacts (輸入成品)

  • 成品數量: 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" },

以下相關資源可協助您使用此動作。