AWS CloudFormation 未在 Auto Scaling 组中创建初始实例
AWS CloudFormation not creating initial instance in Auto Scaling group
(已删除过期的 Pastbin Link)
然后我尝试创建堆栈但未能创建 Auto Scaling 组,因为未创建任何 EC2 实例。如何触发初始实例的创建?
Received 0 SUCCESS signal(s) out of 1. Unable to satisfy 100% MinSuccessfulInstancesPercent requirement
注意 - 请查看其他答案以了解更可能的罪魁祸首。一旦第一个问题得到解决,将其留在这里作为缺少的配置集也可能会导致问题。
UserData 调用 cfn-init,它引用了一个不存在的配置集 InstallAndRun
:
"/opt/aws/bin/cfn-init ",
" --stack ", { "Ref" : "AWS::StackName" },
" --resource LaunchConfig",
" --configsets InstallAndRun ",
" --region ", { "Ref" : "AWS::Region" },"\n",
要使用 cfn-init 并指定配置集,您需要在启动配置元数据中指定一个 AWS::CloudFormation::Init
块,并包含引用您希望 cfn-init 执行的配置元素的配置集定义。有关详细信息,请参阅 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html#aws-resource-init-configsets。
例如,您需要:
"LaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration"
"Metadata" : {
"AWS::CloudFormation::Init" : {
"configSets" : {
"InstallAndRun" : [ "config1" ]
},
"config1" : {
"commands" : {
"test" : {
"command" : "echo \"$MAGIC\" > test.txt",
"env" : { "MAGIC" : "I come from the environment!" },
"cwd" : "~",
"test" : "test ! -e ~/test.txt",
"ignoreErrors" : "false"
}
}
}
}
},
"Properties" : {
...
}
}
如果没有该元数据,cfn-init 将失败,并且 cfn-signal 行会告诉 cloudformation 资源初始化失败。
作为诊断过程,尝试删除对 cfn-init 和 cfn-signal 的引用并查看实例是否启动。如果是这样,并且您确实有一些要使用 cfn-init 定义的实例配置步骤,请定义元数据块以指定这些步骤,并将对 cfn-init 和 cfn-signal 的调用添加回用户数据.
我相信我能够使用您的模板复制您的症状 - 该问题可能与您使用的 AMI 有关。我从市场 link 中为我的区域选择了 AMI,正如参数描述中缩短的 url 所引用的那样。我仍在等待资源创建失败(已经将近一个小时了!),但除此之外症状匹配。
启动时,伸缩组在 ASG 控制台可见,但实例数为 0。但是,Activity 历史选项卡显示了多次启动实例的尝试,但都失败了:
所有的描述是:
Description: Launching a new EC2 instance. Status Reason: In
order to use this AWS Marketplace product you need to accept terms and
subscribe. To do so please visit
http://aws.amazon.com/marketplace/pp?sku=aw0evgkw8e5c1q413zgy5pjce.
Launching EC2 instance failed.
您是否接受了条款并在市场上订阅了该 AMI?这里有更多详细信息:https://aws.amazon.com/marketplace/help/200799470#topic1
注意:我相信您只会在 cloudformation 等待时在控制台中看到 ASG - 在 cfn 回滚后,asg(和 activity 历史记录)将消失。由于我还在等待asg资源创建失败,我还没有确定这一点。
确认将安装 AutoScalingGroup 实例的子网可以使用 NAT 网关或 Internet 网关连接到 Internet。这是因为实例在堆栈的 UserData 语句中安装了一些来自 Internet 的包。
我相信有人会觉得这个答案有帮助。我在创建 Auto Scaling Group 时遇到了类似的问题,我尝试调试日志 (cfn-init),但我没有发现任何错误。如此处 https://serverfault.com/questions/1023697/received-0-success-signals-out-of-1-unable-to-satisfy-100-minsuccessfulinsta 所述,我已删除 Auto Scaling 组中的创建策略和更新策略。
LB、启动配置、子网、SG 等其他一切都已成功创建,但我在这个特定问题上停留了一段时间。
如果您使用了 CreatePolicy,cloudformation 服务期望返回通知(例如来自 cfn-init 的通知)以确认成功。如果不是,它将继续抛出错误“收到 0 个成功信号,共 2 个。无法满足 100% MinSuccessfulInstancesPercent 要求”
最好的解决方法是让 cfn-init 向 cloudformation 报告成功。如果您不使用 cfn-init 并遵循用户数据部分中的引导脚本,最好的方法是一起避免 CreatePolicy。
(已删除过期的 Pastbin Link)
然后我尝试创建堆栈但未能创建 Auto Scaling 组,因为未创建任何 EC2 实例。如何触发初始实例的创建?
Received 0 SUCCESS signal(s) out of 1. Unable to satisfy 100% MinSuccessfulInstancesPercent requirement
注意 - 请查看其他答案以了解更可能的罪魁祸首。一旦第一个问题得到解决,将其留在这里作为缺少的配置集也可能会导致问题。
UserData 调用 cfn-init,它引用了一个不存在的配置集 InstallAndRun
:
"/opt/aws/bin/cfn-init ",
" --stack ", { "Ref" : "AWS::StackName" },
" --resource LaunchConfig",
" --configsets InstallAndRun ",
" --region ", { "Ref" : "AWS::Region" },"\n",
要使用 cfn-init 并指定配置集,您需要在启动配置元数据中指定一个 AWS::CloudFormation::Init
块,并包含引用您希望 cfn-init 执行的配置元素的配置集定义。有关详细信息,请参阅 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html#aws-resource-init-configsets。
例如,您需要:
"LaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration"
"Metadata" : {
"AWS::CloudFormation::Init" : {
"configSets" : {
"InstallAndRun" : [ "config1" ]
},
"config1" : {
"commands" : {
"test" : {
"command" : "echo \"$MAGIC\" > test.txt",
"env" : { "MAGIC" : "I come from the environment!" },
"cwd" : "~",
"test" : "test ! -e ~/test.txt",
"ignoreErrors" : "false"
}
}
}
}
},
"Properties" : {
...
}
}
如果没有该元数据,cfn-init 将失败,并且 cfn-signal 行会告诉 cloudformation 资源初始化失败。
作为诊断过程,尝试删除对 cfn-init 和 cfn-signal 的引用并查看实例是否启动。如果是这样,并且您确实有一些要使用 cfn-init 定义的实例配置步骤,请定义元数据块以指定这些步骤,并将对 cfn-init 和 cfn-signal 的调用添加回用户数据.
我相信我能够使用您的模板复制您的症状 - 该问题可能与您使用的 AMI 有关。我从市场 link 中为我的区域选择了 AMI,正如参数描述中缩短的 url 所引用的那样。我仍在等待资源创建失败(已经将近一个小时了!),但除此之外症状匹配。
启动时,伸缩组在 ASG 控制台可见,但实例数为 0。但是,Activity 历史选项卡显示了多次启动实例的尝试,但都失败了:
所有的描述是:
Description: Launching a new EC2 instance. Status Reason: In order to use this AWS Marketplace product you need to accept terms and subscribe. To do so please visit http://aws.amazon.com/marketplace/pp?sku=aw0evgkw8e5c1q413zgy5pjce. Launching EC2 instance failed.
您是否接受了条款并在市场上订阅了该 AMI?这里有更多详细信息:https://aws.amazon.com/marketplace/help/200799470#topic1
注意:我相信您只会在 cloudformation 等待时在控制台中看到 ASG - 在 cfn 回滚后,asg(和 activity 历史记录)将消失。由于我还在等待asg资源创建失败,我还没有确定这一点。
确认将安装 AutoScalingGroup 实例的子网可以使用 NAT 网关或 Internet 网关连接到 Internet。这是因为实例在堆栈的 UserData 语句中安装了一些来自 Internet 的包。
我相信有人会觉得这个答案有帮助。我在创建 Auto Scaling Group 时遇到了类似的问题,我尝试调试日志 (cfn-init),但我没有发现任何错误。如此处 https://serverfault.com/questions/1023697/received-0-success-signals-out-of-1-unable-to-satisfy-100-minsuccessfulinsta 所述,我已删除 Auto Scaling 组中的创建策略和更新策略。 LB、启动配置、子网、SG 等其他一切都已成功创建,但我在这个特定问题上停留了一段时间。
如果您使用了 CreatePolicy,cloudformation 服务期望返回通知(例如来自 cfn-init 的通知)以确认成功。如果不是,它将继续抛出错误“收到 0 个成功信号,共 2 个。无法满足 100% MinSuccessfulInstancesPercent 要求”
最好的解决方法是让 cfn-init 向 cloudformation 报告成功。如果您不使用 cfn-init 并遵循用户数据部分中的引导脚本,最好的方法是一起避免 CreatePolicy。