使用目标账户门防止 StackSet 部署失败
账户门是一项可选功能,用于 CloudFormation 在目标账户中开始执行 StackSet 操作之前验证该账户是否满足特定要求。此验证是通过充当先决条件检查的 AWS Lambda 函数执行。
账户门的一个常见示例是确认目标账户上无有效或未解决的 CloudWatch 警报。CloudFormation 将在您每次在目标账户中启动堆栈操作时调用此 Lambda 函数,并且仅在此函数返回 SUCCEEDED
代码时继续。如果 Lambda 函数返回 FAILED
状态,则 CloudFormation 不会继续执行请求的操作。如果您未配置账户门 Lambda 函数,CloudFormation 会跳过检查并继续执行操作。
如果您的目标账户的账户门检查失败,则失败的操作将计入您指定的堆栈容错数量或百分比。有关容错能力的更多信息,请参阅StackSet 操作选项。
账户门仅适用于 StackSets 操作。此功能不适用于 StackSet 外部的其他 CloudFormation 操作。
要求
必须满足以下要求才能使用账户门:
-
Lambda 函数必须命名为
AWSCloudFormationStackSetAccountGate
才能使用此功能。 -
AWSCloudFormationStackSetExecutionRole 要有权调用 Lambda 函数。如果没有这些权限,CloudFormation 会跳过账户门检查,并继续堆栈操作。
-
必须在目标账户中添加 Lambda
InvokeFunction
权限,账户门才能正常工作。目标账户信任策略必须具有与管理员账户的信任关系。下面是一个示例策略语句,可授予 LambdaInvokeFunction
权限。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "*" } ] }
用于创建 Lambda 函数的 CloudFormation 模板
使用以下示例模板创建 Lambda AWSCloudFormationStackSetAccountGate
函数。要使用这些模板中的任意一种创建新堆栈,请参阅通过 CloudFormation 控制台创建堆栈。
模板位置 |
描述 |
---|---|
创建实现 Lambda 账户门函数(将返回 |
|
创建实现 Lambda 账户门函数(将返回 |