为什么 AWS CloudFormation 的 UserData 字段中有一个 <script> 标签?

Why is there a <script> tag in the UserData field in AWS CloudFormation?

在 CloudFormation JSON 中,我们有一个 base64 编码的 UserData 字段,其中包含一个对我来说看起来像批处理脚本的内容(至少在 Windows 上)。但是它被<script></script>包围了。

这很奇怪,因为格式是 JSON,甚至不是 XML,那么 XML 标签在那里做什么?它是遗留的东西,还是在模仿网络浏览器中的 <script> 标签?

示例:

"UserData": {
    "Fn::Base64": {
        "Fn::Join": [
            "",
            [
                "<script>\n",
                "cfn-init.exe -v -s MyStack -r MyResource --region us-west-1b\n",
                "</script>\n"
            ]
        ]
    }
}

用户数据 字段将信息传递给 Amazon EC2 实例。它可以是数据库的密码、后端服务器的 IP 地址或您选择的任何内容。

但是,安装在标准 Windows AMI 上的软件也会查找:

  • <script>...</script> -- 这些标签中的任何内容都将在实例首次启动时在命令行上执行
  • <powershell>...</powershell> -- 这些标签中的任何内容都将在实例首次启动时在 PowerShell 中执行

参见:Running Commands on Your Windows Instance at Launch

对于亚马逊 Linux 实例,以 #! 开头的用户数据将在 shell.

中执行

所以... 为什么 XML 在字符串中? 这是因为字符串只是通过用户数据传递到实例上的实用程序软件,并且软件正在寻找这些标签。没有它们,脚本将不会被执行。