我有一个batch file,我想在启动EC2 Windows AMI时运行。 我想从该batch file运行的程序将EC2机器的实例ID作为参数。 将实例ID作为parameter passing给该程序的最简单方法是什么?
从Amazon关于这个主题的文档中 ,我发现你应该发布一个WGET到指定的URL并parsing响应。 所以这个问题的替代方法可能是“如何将HTTP请求的内容作为Windowsbatch file中的parameter passing给程序”
在伪代码中,这是我想要做的:
set ID = GET http://169.254.169.254/2008-08-08/meta-data/instance-id myprogram.exe /instanceID=%ID%
有关我如何进行的任何build议?
PowerShell 3.0和Invoke-WebRequest :
PS> $instanceId = Invoke-WebRequest -Uri http://169.254.169.254/latest/meta-data/instance-id
或者如果你需要批量生存,我们一个curl的win32二进制文件。
或者根据您的使用情况,您可以使用CloudFormation在API调用期间获取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
$wc = New-Object System.Net.WebClient; $instanceIdResult = $wc.DownloadString("http://169.254.169.254/latest/meta-data/instance-id") Write-Host $instanceIdResult
wget没有选项可以将下载的文件的内容输出到屏幕上(或者至less我这里没有的版本),所以你必须使用一个临时文件。 你可以做什么,然后是以下内容:
wget -O "instance-id" "http://169.254.169.254/2008-08-08/meta-data/instance-id" set /p ID=< instance-id
set /p通常会提示一些东西,我们只是在这里redirect文件的内容。 这假定实例ID是该文件中唯一的东西。 在使用for /f时,你可以有更多的乐趣来parsing文本,但是对于一个简单的“将该文件的第一行放入variables” set /p就足够了。