Назад | Перейти на главную страницу

Как получить идентификатор экземпляра компьютера EC2 с Windows в пакетную переменную

У меня есть командный файл, который я хотел бы запустить при запуске 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 достаточно.