如何在Windows EC2实例中执行UserData内容

如何在Windows EC2实例中执行UserData内容,windows,amazon-ec2,autoscaling,amazon-cloudformation,Windows,Amazon Ec2,Autoscaling,Amazon Cloudformation,我在尝试使用自动缩放正确运行云形成模板时遇到了很多麻烦。我有以下资源: "LaunchConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Properties" : { "KeyName" : { "Fn::FindInMap" : [ "EnvironmentToKeyName", { "Ref" : "Environment" }, "KeyName" ] }, "ImageId" : { "F

我在尝试使用自动缩放正确运行云形成模板时遇到了很多麻烦。我有以下资源:

"LaunchConfig" : {
  "Type" : "AWS::AutoScaling::LaunchConfiguration",
  "Properties" : {
    "KeyName" : { "Fn::FindInMap" : [ "EnvironmentToKeyName", { "Ref" : "Environment" }, "KeyName" ] },
    "ImageId" : { "Fn::FindInMap" : [ "AWSRegionToAMI", { "Ref" : "AWS::Region" }, "AMI" ] },
    "SecurityGroups" : [ "neat_spi" ],
    "InstanceType" : { "Ref" : "InstanceType" },
    "UserData" : { "Fn::Base64" : {
        "Fn::Join" : ["", [ "<script>", "call c:\\chef\\boot.bat", { "Ref" : "Environment" }, "</script>"]]
      }
    }
  }
}
“启动配置”:{
“类型”:“AWS::AutoScaling::LaunchConfiguration”,
“财产”:{
“KeyName”:{“Fn::FindInMap”:[“EnvironmentToKeyName”,{“Ref”:“Environment”},“KeyName”]},
“ImageId”:{“Fn::FindInMap”:[“AWSRegionToAMI”,{“Ref”:“AWS::Region”},“AMI”]},
“安全组”:[“整洁的spi”],
“InstanceType”:{“Ref”:“InstanceType”},
“UserData”:{“Fn::Base64”:{
“Fn::Join”:[“”、[“”、“call c:\\chef\\boot.bat”、{“Ref”:“Environment”}、“]]
}
}
}
}
但是当机器启动时,这个脚本看起来根本没有运行。我如何确保它运行?或者我该如何找出它为什么不运行


我在任何地方都找不到任何关于如何查看是否运行此操作的日志记录。

VM启动后,您可以使用WinRM在其上运行远程命令。下面是一个示例客户端:


确保在Windows AMI中启用了WinRM,并且安全组中打开了正确的端口。

需要查找的几件事

  • 验证是否安装了cfn工具
  • 查看c:\cfn子目录中的某个地方,有一个名为logs的路径在浮动,请查看该路径
  • 在program files\amazon\ec2tools下查看-其中有一个日志目录。检查以确保它正在运行脚本
  • 在上面的目录中有一个名为scripts的文件夹-您应该看到类似于userdata.bat的内容-尝试运行该文件夹以确认其工作正常

  • 对CloudFormation和Userdata进行故障排除非常耗时,而且成本高昂,因为每次启动和停止实例都会收取一小时的费用。这对亚马逊来说非常有利。(请按分钟计费)

    我花了很长时间才让脚本在我的AMI上运行当我使用标准Amazon AMI时,它可以工作,但在我的自定义构建AMI时,它不能工作

    然后我找到了这个链接

    总而言之,我

  • 我确保已打开终止保护(这导致我一次丢失所有工作)
  • 已启动到新的Windows实例中
  • 我通过安装所需的windows功能和安装所需的.MSI等操作自定义了该实例
  • 我打开了Windows更新并清除了回收站
  • 我从开始运行
    EC2ConfigService设置
    ->所有程序
  • 我在常规选项卡上选中了“为下一次服务启动启用用户数据执行(在SysPrep自动启用),例如
  • 确保在图像选项卡上设置了正确的密码策略。我选择了随机的
  • 单击应用,然后单击关闭SysPrep
  • 当EC2实例最终停止时,您可以从AWS控制台创建映像

  • 这个新的AMI能够正确运行我的UserData脚本。

    C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt是我找到的最有用的文件。它包含在C:\Program Files\Amazon\Ec2ConfigService\scripts下作为UserScript.bat/ps1安装的脚本日志。这并不能回答有关UserData的问题。