

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

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

您可以使用 AWS Lambda 部署操作来管理无服务器部署的应用程序代码部署。您可以部署函数并使用部署策略进行流量部署，如下所示：
+ 用于流量转移的金丝雀和线性部署
+ 一次性全部部署

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

**Topics**
+ [操作类型](#action-reference-LambdaDeploy-type)
+ [配置参数](#action-reference-LambdaDeploy-parameters)
+ [输入构件](#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**  
必需：否  
要部署到的所需的 Lambda 函数版本。 FunctionAlias它可以是管道或操作级别变量，例如 `#{variables.lambdaTargetVersion}`。在操作开始执行时，版本必须已发布。  
如果未提供任何输入构件，则为必需项。

**DeployStrategy**  
必需：否（默认值是 `AllAtOnce`）  
  
确定 Lambda 部署操作用于将流量从原始版本的 Lambda 函数转移到新版本所采用的速率。**FunctionAlias**可用的部署策略是金丝雀或线性。接受的格式：  
+ `AllAtOnce` - 

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

   如果未指定，则默认值为 `AllAtOnce`。
+ `Canary10Percent5Minutes` - 在第一次增量中转移 10% 的流量。其余 90% 在五分钟后进行部署。

  百分比和分钟数的值都可以更改。
+ `Linear10PercentEvery1Minute` - 每分钟转移 10% 的流量，直到所有流量转移完毕。

  百分比和分钟数的值都可以更改。
此字段有以下注意事项：  
+ 最长总等待时间为 2 天。
+ 仅在提供时**FunctionAlias**可用。


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

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

![\[使用 Lambda 部署操作的新管道的编辑操作页面\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/lambdadeploy-edit-screen.png)


## 输入构件
<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>

下列相关资源在您使用此操作的过程中会有所帮助。
+  [教程：使用 Lambda 函数部署 CodePipeline](tutorials-lambda-deploy.md)：本教程将引导您创建示例 Lambda 函数，您将在其中创建别名和版本，将压缩后的 Lambda 函数添加到源位置，然后在管道中运行 Lambda 操作。