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

时间:2013-07-15 20:37:51

标签: windows amazon-ec2 autoscaling amazon-cloudformation

我在尝试使用自动缩放功能正确运行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>"]]
      }
    }
  }
}

但是当机器启动时,它看起来并不像这个脚本一直在运行。我如何确保它运行?或者我如何弄清楚它为什么没有运行?

我无法在任何地方找到任何关于如何运行的记录。

3 个答案:

答案 0 :(得分:4)

要寻找的事情......

  1. 确认已安装cfn工具
  2. 查看c:\ cfn子目录 - 那里有一条叫做日志的路径在那里漂浮 - 请查看。
  3. 查看程序文件\ amazon \ ec2tools - 那里有一个日志目录。检查以确保它正在运行脚本
  4. 在上面的目录中有一个名为scripts的文件夹 - 您应该看到类似于userdata.bat的内容 - 尝试运行它以确认它有效。
  5. 对CloudFormation和Userdata进行故障排除非常耗时 - 并且成本很高 - 因为每次启动和停止实例时,您都需要支付一小时的费用。对亚马逊来说非常有利的东西。 (请按分钟定价)

答案 1 :(得分:3)

我还有一段时间让脚本在我的AMI上运行。 当我使用标准的Amazon AMI 时,它有效,但它不适用于我的自定义构建AMI。

然后我找到了这个链接Create a Standard Amazon Machine Image Using Sysprep

总结一下,我

  1. 我确保已启用终止保护(这导致我失去了所有工作)
  2. 推出新的Windows实例
  3. 我通过安装我需要的Windows功能和安装我需要的.MSI来定制实例。
  4. 我打开了Windows更新并清除了回收站
  5. 我从开始 - &gt;运行EC2ConfigService Settings 所有计划
  6. 我检查了&#34; 为下次服务启动启用UserData执行(在SysPrep自动启用),例如。 <script></script> or <powershell></powershell> &#34;在常规标签上。
  7. 确保在图片标签上设置了正确的密码政策。我选择了随意。
  8. 点击应用,然后点击使用SysPrep关闭
  9. 最终停止EC2实例时,您可以从AWS控制台创建图像。
  10. 这个新的AMI能够正确运行我的UserData脚本。

答案 2 :(得分:0)

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

https://github.com/WinRb/WinRM

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