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

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

"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>"]] } } } } 

但是当机器启动时,它看起来并不像这个脚本运行。 我如何确保它运行? 或者我怎么知道它为什么不运行?

我无法find任何地方如何查看是否运行。

Solutions Collecting From Web of "如何在Windows EC2实例中执行UserData内容"

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

https://github.com/WinRb/WinRM

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

几件事寻找…

  1. 确认已经安装了cfn工具
  2. 在c:\ cfn子目录中查看 – 有一个称为日志的路径,在那里浮动 – 回顾一下。
  3. 查看程序文件\ amazon \ ec2tools – 里面有一个日志目录。 检查以确保它正在运行脚本
  4. 在上面的目录中有一个名为脚本的文件夹 – 你应该看到一些看起来像userdata.bat的东西 – 尝试运行,以确认它的工作原理。

对CloudFormation和Userdata进行疑难解答非常耗时 – 并且代价高昂,因为每次启动和停止实例时都会收到一小时的费用。 这对亚马逊来说有很大的好处。 (请带上每分钟定价)

我也有一段时间让脚本在我的AMI上运行。 当我使用标准的亚马逊AMI时 ,它工作,但它不适用于我的自定义生成AMIs。

然后我发现这个链接使用Sysprep创建一个标准的亚马逊机器映像 。

总结一下,我

  1. 我确保终止保护被打开(这导致我失去了所有我的工作一次)
  2. 启动到一个新的Windows实例
  3. 我通过安装我需要的Windows功能并安装需要的.MSI来定制实例。
  4. 我打开Windows更新并清除回收站
  5. 我从开始 – > 所有程序运行EC2ConfigService Settings
  6. 我选中了“在常规”选项卡上启用用户数据执行以启动下一个服务(在SysPrep中自动启用),例如<script></script> or <powershell></powershell>
  7. 确保在“ 图像”选项卡上设置了正确的密码策略。 我选择了随机。
  8. 单击应用 ,然后单击使用SysPrep关机
  9. 当EC2实例最终停止时,您可以从AWS控制台创建映像。

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