

# 使用目标账户门防止 StackSet 部署失败
<a name="stacksets-account-gating"></a>

账户门是一项可选功能，用于 CloudFormation 在目标账户中开始执行 StackSet 操作之前验证该账户是否满足特定要求。此验证是通过充当先决条件检查的 AWS Lambda 函数执行。

账户门的一个常见示例是确认目标账户上无有效或未解决的 CloudWatch 警报。CloudFormation 将在您每次在目标账户中启动堆栈操作时调用此 Lambda 函数，并且仅在此函数返回 `SUCCEEDED` 代码时继续。如果 Lambda 函数返回 `FAILED` 状态，则 CloudFormation 不会继续执行请求的操作。如果您未配置账户门 Lambda 函数，CloudFormation 会跳过检查并继续执行操作。

如果您的目标账户的账户门检查失败，则失败的操作将计入您指定的堆栈容错数量或百分比。有关容错能力的更多信息，请参阅[StackSet 操作选项](stacksets-concepts.md#stackset-ops-options)。

账户门仅适用于 StackSets 操作。此功能不适用于 StackSet 外部的其他 CloudFormation 操作。

## 要求
<a name="stacksets-accountgating_reqs"></a>

必须满足以下要求才能使用账户门：
+ Lambda 函数必须命名为 `AWSCloudFormationStackSetAccountGate` 才能使用此功能。
+ **AWSCloudFormationStackSetExecutionRole** 要有权调用 Lambda 函数。如果没有这些权限，CloudFormation 会跳过账户门检查，并继续堆栈操作。
+ 必须在目标账户中添加 Lambda `InvokeFunction` 权限，账户门才能正常工作。目标账户信任策略必须具有与管理员账户的信任关系。下面是一个示例策略语句，可授予 Lambda `InvokeFunction` 权限。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "lambda:InvokeFunction"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------

## 用于创建 Lambda 函数的 CloudFormation 模板
<a name="stacksets-sample-accountgate"></a>

使用以下示例模板创建 Lambda `AWSCloudFormationStackSetAccountGate` 函数。要使用这些模板中的任意一种创建新堆栈，请参阅[通过 CloudFormation 控制台创建堆栈](cfn-console-create-stack.md)。


|  模板位置  |  说明  | 
| --- | --- | 
| [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateSucceeded.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateSucceeded.yml) | 创建实现 Lambda 账户门函数（将返回 `SUCCEEDED` 状态）的堆栈。 | 
| [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateFailed.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateFailed.yml) | 创建实现 Lambda 账户门函数（将返回 `FAILED` 状态）的堆栈。 | 