So erhalten Sie die Instanz-ID eines EC2-Windows-Computers in eine Stapelvariable

8

Ich habe eine Batch-Datei, die ich beim Start eines EC2 Windows AMI ausführen möchte. Das Programm, das ich aus dieser Batchdatei ausführen möchte, verwendet die Instanz-ID des EC2-Computers als Parameter. Was ist der einfachste Weg, um diese Instanz-ID als Argument an dieses Programm zu übergeben?

Aus der Dokumentation von Amazon zu diesem Thema geht hervor , dass Sie ein WGET an eine bestimmte URL senden und die Antwort analysieren sollen. Eine alternative Art, diese Frage zu formulieren, könnte sein: "Wie übergebe ich den Inhalt einer HTTP-Anforderung als Argument in einer Windows-Batchdatei an ein Programm?"

Im Pseudocode möchte ich Folgendes tun:

set ID = GET http://169.254.169.254/2008-08-08/meta-data/instance-id
myprogram.exe /instanceID=%ID%

Irgendwelche Vorschläge, wie ich vorgehen könnte?

Jason Kester
quelle

Antworten:

6

PowerShell 3.0 und Invoke-WebRequest :

PS> $instanceId = Invoke-WebRequest -Uri http://169.254.169.254/latest/meta-data/instance-id

Oder wenn Sie im Batch überleben müssen, geben Sie uns eine Win32-Binärdatei von Curl .

Abhängig von Ihrem Anwendungsfall können Sie CloudFormation verwenden, um die Instanz-ID während des API-Aufrufs abzurufen und an cf-init zu übergeben, um eine Bootstrap-Aktion für Ihre Anwendungsbereitstellung durchzuführen.

sqlreader
quelle
2
Dies gibt eine Antwort zurück - um die tatsächliche ID zu erhalten - möchten Sie möglicherweise verwenden:$instanceId = (Invoke-WebRequest -Uri http://169.254.169.254/latest/meta-data/instance-id).Content
Jochen van Wylick
2
$wc = New-Object System.Net.WebClient;
$instanceIdResult = $wc.DownloadString("http://169.254.169.254/latest/meta-data/instance-id")
Write-Host $instanceIdResult
steveIm
quelle
2
Wie unterscheidet sich dies von der anderen Antwort mit einem WebClient und DownloadString?
Chris S
0

wgetEs gibt keine Option, um den Inhalt der heruntergeladenen Datei auf dem Bildschirm auszugeben (oder zumindest die Version, die ich hier nicht habe), daher müssen Sie trotzdem eine temporäre Datei verwenden. Was Sie dann tun können, ist Folgendes:

wget -O "instance-id" "http://169.254.169.254/2008-08-08/meta-data/instance-id"
set /p ID=< instance-id

set /pfordert normalerweise zu etwas auf und wir leiten den Inhalt der Datei hier einfach um. Dies setzt voraus, dass die Instanz-ID das einzige ist, was in dieser Datei enthalten ist. Sie können ein bisschen mehr Spaß beim Parsen von Text haben, wenn Sie verwenden, for /faber für ein einfaches "Setzen Sie die erste Zeile dieser Datei in eine Variable" set /preicht aus.

Joey
quelle
Gibt wget -O - http: // ... die Datei nicht als Standard aus?
David North
Ah, drat. Wurde nicht geschrieben, wget --helpaber es funktioniert, ja. Es tut uns leid.
Joey