如何在 AWS 中通过 CloudFormation 配置 "Instance Protection"?
How to configure "Instance Protection" over CloudFormation in AWS?
我需要使用 CloudFormation 模板为我的 Auto Scaling 组中的实例设置 "Instance Protection" 属性。
我通常在我的 AWS 控制台中这样做:EC2 -> Auto Scaling Groups
但我似乎无法在 CloudFormation 上找到它 documentation
CloudFormation 目前似乎不支持此功能。
如果您查看 Autoscaling 的 CFN 文档,它有一个 TerminationProtection 元素,它是一个字符串列表。我在文档中找不到可用选项列表,但是当我使用 CLI 时,似乎没有任何相关内容:
$> aws autoscaling describe-termination-policy-types
{
"TerminationPolicyTypes": [
"ClosestToNextInstanceHour",
"Default",
"NewestInstance",
"OldestInstance",
"OldestLaunchConfiguration"
]
}
可以使用 CloudFormation 来完成,但这并不容易。
CloudFormation 仍然(截至 2020 年 6 月 29 日)未正式支持 Auto Scaling 实例保护功能。此功能 launched 于 2015 年 12 月 7 日推出,遗憾的是从未与 CloudFormation 集成。
为了将来参考,确认功能是否已与 CloudFormation 集成,此外 resource documentation you can also refer to the CloudFormation release history 查看是否提到了所需的功能。
其他 AWS SDK 往往具有更完整的 API 覆盖范围并且更新更频繁,因此作为解决方法,您可以使用例如创建 AutoScaling 组带有 --new-instances-protected-from-scale-in
标志的 AWS CLI create-auto-scaling-group
命令。
如果在 CloudFormation 之外创建自动缩放组不是一种选择,另一个(更复杂的)解决方法是在现有 CloudFormation 资源之上修补自定义资源,以使用新的更新新创建的自动缩放组使用更新的 SDK 之一进行功能设置。它可以工作,但您需要创建一个 lambda 函数和所有支持的 IAM 角色和权限,并将它们全部挂钩到一个自定义资源中。有关如何执行此操作以支持另一个 CloudFormation 不支持的功能(将 ACM 证书附加到 CloudFront 分配)的示例,请参阅我的 .
当然,最简单的方法是等待 AWS 将对此功能的官方支持添加到 CloudFormation,因为他们最终会这样做。 [更新 06/2020] 好吧,四年了,我已经放弃了等待。我承认我错了!
他们终于在 2020 年 10 月 26 日添加了此功能。
我需要使用 CloudFormation 模板为我的 Auto Scaling 组中的实例设置 "Instance Protection" 属性。
我通常在我的 AWS 控制台中这样做:EC2 -> Auto Scaling Groups
但我似乎无法在 CloudFormation 上找到它 documentation
CloudFormation 目前似乎不支持此功能。
如果您查看 Autoscaling 的 CFN 文档,它有一个 TerminationProtection 元素,它是一个字符串列表。我在文档中找不到可用选项列表,但是当我使用 CLI 时,似乎没有任何相关内容:
$> aws autoscaling describe-termination-policy-types
{
"TerminationPolicyTypes": [
"ClosestToNextInstanceHour",
"Default",
"NewestInstance",
"OldestInstance",
"OldestLaunchConfiguration"
]
}
可以使用 CloudFormation 来完成,但这并不容易。
CloudFormation 仍然(截至 2020 年 6 月 29 日)未正式支持 Auto Scaling 实例保护功能。此功能 launched 于 2015 年 12 月 7 日推出,遗憾的是从未与 CloudFormation 集成。
为了将来参考,确认功能是否已与 CloudFormation 集成,此外 resource documentation you can also refer to the CloudFormation release history 查看是否提到了所需的功能。
其他 AWS SDK 往往具有更完整的 API 覆盖范围并且更新更频繁,因此作为解决方法,您可以使用例如创建 AutoScaling 组带有 --new-instances-protected-from-scale-in
标志的 AWS CLI create-auto-scaling-group
命令。
如果在 CloudFormation 之外创建自动缩放组不是一种选择,另一个(更复杂的)解决方法是在现有 CloudFormation 资源之上修补自定义资源,以使用新的更新新创建的自动缩放组使用更新的 SDK 之一进行功能设置。它可以工作,但您需要创建一个 lambda 函数和所有支持的 IAM 角色和权限,并将它们全部挂钩到一个自定义资源中。有关如何执行此操作以支持另一个 CloudFormation 不支持的功能(将 ACM 证书附加到 CloudFront 分配)的示例,请参阅我的
当然,最简单的方法是等待 AWS 将对此功能的官方支持添加到 CloudFormation,因为他们最终会这样做。 [更新 06/2020] 好吧,四年了,我已经放弃了等待。我承认我错了!
他们终于在 2020 年 10 月 26 日添加了此功能。