我有一个希望在 EC2 Windows AMI 启动时运行的批处理文件。我想从该批处理文件运行的程序将 EC2 机器的实例 ID 作为参数。将实例 ID 作为参数传递给该程序的最简单方法是什么?
从亚马逊关于该主题的文档中,我看到您应该向指定的 URL 发出 WGET 并解析响应。因此,表达这个问题的另一种方式可能是“如何将 HTTP 请求的内容作为 Windows 批处理文件中的参数传递给程序”
在伪代码中,这是我想做的:
set ID = GET http://169.254.169.254/2008-08-08/meta-data/instance-id
myprogram.exe /instanceID=%ID%
关于我如何进行的任何建议?
PowerShell 3.0 和Invoke-WebRequest:
或者,如果您需要批量生存,请使用curl的 win32 二进制文件。
或者根据您的用例,您可以在 API 调用期间使用 CloudFormation 获取 Instance-Id 并将其传递给 cf-init 以执行应用程序部署的引导操作。
替代方案:也许您可以在 Amazon 的 EC2 上使用PowerShell来执行此操作。以下是一些开始的链接:
Powershell 是最简单的方法:
$webclient = new-object System.Net.WebClient
$myip = $webclient.DownloadString(" http://169.254.169.254/latest/meta-data/local-ipv4 ")
myprogram.exe /instanceID=$myip
所以我找到了另一种方法:
它看起来更干净,结果包含您所期望的“实例 ID”
wget
没有将下载文件的内容输出到屏幕的选项(或者至少我这里没有的版本),所以无论如何你都必须使用临时文件。然后你可以做的是:set /p
通常会提示输入某些内容,我们只是在此处重定向文件的内容。这假定实例 ID 是该文件中唯一的内容。使用时解析文本可以带来更多乐趣,for /f
但对于简单的“将文件的第一行放入变量”set /p
就足够了。