【问题标题】:How do I execute UserData content in a Windows EC2 instance如何在 Windows EC2 实例中执行 UserData 内容
【发布时间】:2013-07-13 20:42:26
【问题描述】:

我在尝试通过自动缩放使 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>"]]
      }
    }
  }
}

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

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

【问题讨论】:

    标签: windows amazon-ec2 autoscaling amazon-cloudformation


    【解决方案1】:

    要寻找的几件事...

    1. 验证已安装 cfn 工具
    2. 查看 c:\cfn 子目录 - 有一条名为 logs 的路径在某处浮动 - 查看它。
    3. 查看程序文件\amazon\ec2tools - 那里有一个日志目录。检查以确保它正在运行脚本
    4. 在上面的目录中,有一个名为 scripts 的文件夹 - 您应该会看到类似于 userdata.bat 的内容 - 尝试运行它以确认它可以正常工作。

    对 CloudFormation 和 Userdata 进行故障排除非常耗时 - 并且可能成本高昂 - 因为每次启动和停止实例时,您都需要支付一个小时的费用。对亚马逊有很大好处的东西。 (请提供每分钟定价)

    【讨论】:

    • C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt 是我找到的最有用的文件。它包含您的脚本的日志,这些脚本安装在 C:\Program Files\Amazon\Ec2ConfigService\Scripts 作为 UserScript.bat/ps1
    【解决方案2】:

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

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

    总而言之,我

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

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

    【讨论】:

      【解决方案3】:

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

      https://github.com/WinRb/WinRM

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

      【讨论】:

      • 这并没有回答关于 UserData 的问题。
      猜你喜欢
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 2017-07-07
      • 2019-04-23
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 2016-10-26
      相关资源
      最近更新 更多