如何将EC2 Windows机器的实例标识符变成批处理variables

我有一个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来做到这一点。 这里有一些链接开始:

  • EC2Dream – 使用PowerShell编写脚本
  • PowerShell和Amazon Web服务

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就足够了。