

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

# AWS Lambda 部署動作參考
<a name="action-reference-LambdaDeploy"></a>

您可以使用 AWS Lambda 部署動作來管理無伺服器部署的應用程式程式碼。您可以部署 函數，並使用流量部署的部署策略，如下所示：
+ 流量轉移的 Canary 和線性部署
+ 一次全部部署

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

**Topics**
+ [動作類型](#action-reference-LambdaDeploy-type)
+ [組態參數](#action-reference-LambdaDeploy-parameters)
+ [Input artifacts (輸入成品)](#action-reference-LambdaDeploy-input)
+ [輸出成品](#action-reference-LambdaDeploy-output)
+ [輸出變數](#action-reference-LambdaDeploy-output-variables)
+ [Lambda 部署動作的服務角色政策許可](#action-reference-LambdaDeploy-permissions-action)
+ [動作宣告](#action-reference-LambdaDeploy-example)
+ [另請參閱](#action-reference-LambdaDeploy-links)

## 動作類型
<a name="action-reference-LambdaDeploy-type"></a>
+ 類別：`Deploy`
+ 擁有者：`AWS`
+ 提供者：`Lambda`
+ 版本：`1`

## 組態參數
<a name="action-reference-LambdaDeploy-parameters"></a>

**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 部署動作編輯新管道的動作頁面\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/lambdadeploy-edit-screen.png)


## Input artifacts (輸入成品)
<a name="action-reference-LambdaDeploy-input"></a>
+ **成品數量：** `1`
+ **描述：**如果有提供的檔案，以支援部署期間的指令碼動作。

## 輸出成品
<a name="action-reference-LambdaDeploy-output"></a>
+ **成品數量：** `0`
+ **描述：**輸出成品不適用於此動作類型。

## 輸出變數
<a name="action-reference-LambdaDeploy-output-variables"></a>

設定時，此動作會產生變數，供管道中的下游動作的動作組態所參考。即使此動作沒有命名空間，此動作產生的變數仍可視為輸出變數。您可以設定動作的命名空間，讓這些變數可供下游動作的組態使用。

如需詳細資訊，請參閱[變數參考](reference-variables.md)。

**FunctionVersion**  
已部署的新 Lambda 函數版本。

## Lambda 部署動作的服務角色政策許可
<a name="action-reference-LambdaDeploy-permissions-action"></a>

當 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:*"
            ]
        }
    ]
}
```

------

## 動作宣告
<a name="action-reference-LambdaDeploy-example"></a>

------
#### [ 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"
},
```

------

## 另請參閱
<a name="action-reference-LambdaDeploy-links"></a>

以下相關資源可協助您使用此動作。
+  [教學課程：使用 CodePipeline 進行 Lambda 函數部署](tutorials-lambda-deploy.md) – 本教學課程會逐步引導您建立範例 Lambda 函數，您將在其中建立別名和版本、將壓縮的 Lambda 函數新增至來源位置，以及在管道中執行 Lambda 動作。