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。