У меня есть командный файл, который я хотел бы запустить при запуске EC2 Windows AMI. Программа, которую я хочу запустить из этого командного файла, принимает в качестве параметра идентификатор экземпляра машины EC2. Каков самый простой способ передать этот идентификатор экземпляра в качестве аргумента этой программе?
Из Документация Amazon по этому вопросу, Я вижу, что вы должны отправить WGET на указанный URL и проанализировать ответ. Таким образом, альтернативный способ сформулировать этот вопрос может быть: «Как передать содержимое 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:
PS> $instanceId = Invoke-WebRequest -Uri http://169.254.169.254/latest/meta-data/instance-id
Или, если вам нужно выжить в пакетном режиме, используйте двоичный файл win32 завиток.
Или в зависимости от вашего варианта использования вы можете использовать CloudFormation, чтобы получить идентификатор экземпляра во время вызова API и передать его в cf-init для начальное действие для развертывания вашего приложения.
Альтернатива: возможно, вы могли бы сделать это, используя PowerShell на Amazon EC2. Вот несколько ссылок для начала:
Powershell - самый простой способ сделать это:
$ webclient = новый объект 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
не имеет возможности вывести содержимое загруженного файла на экран (или, по крайней мере, версия, которая у меня здесь, отсутствует), поэтому вам все равно придется использовать временный файл. Тогда вы можете сделать следующее:
wget -O "instance-id" "http://169.254.169.254/2008-08-08/meta-data/instance-id"
set /p ID=< instance-id
set /p
обычно запрашивает что-то, и мы просто перенаправляем сюда содержимое файла. Это предполагает, что идентификатор экземпляра - единственное, что находится в этом файле. Вы можете получить больше удовольствия от парсинга текста при использовании for /f
но для простого "поместите первую строку этого файла в переменную" set /p
достаточно.