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