EC2インスタンスの中で169.254.169.254にアクセスすると、EC2インスタンスのメタデータを参照することが出来ます。
exsample
-
169.254.169.254/latest/meta-data/instance-id
でインスタンスID -
169.254.169.254/latest/meta-data/instance-type
でインスタンスタイプ
が参照できる。
本記事ではそんなメタデータをPowerShellをつかって一括出力してみます。
実行した環境
- Windows Server 2016
- Windows PowerShell 5.1
PowerShellで一括出力サンプル
function expand-awsmeta([string]$base , [string]$leaf) {
if ($leaf.EndsWith("/")) {
(Invoke-RestMethod "$base$leaf" ) -split "`n" | ForEach-Object { expand-awsmeta "$base$leaf" $_ }
}
else {
try {
$value = Invoke-RestMethod "$base$leaf"
Select-Object @{n = 'uri'; e = { "$base$leaf" } }, @{n = 'value'; e = { $value } } -InputObject ""
}
catch {
# public-keysだけ
# 169.254.169.254/latest/meta-data/public-keys/0/openssh-key といった形なので妥協
Select-Object @{n = 'uri'; e = { "$base" } }, @{n = 'value'; e = { $leaf } } -InputObject ""
}
}
}
expand-awsmeta "169.254.169.254/latest/" "meta-data/"
expand-awsmeta "169.254.169.254/latest/" "dynamic/"
上記コマンドをPowerShellプロンプトにコピペして実行すると下記のように一括でメタデータが出力されます。
やっていること
AWSのメタデータのURIについては、169.254.169.254/latest/meta-data/
にアクセスすると項目の一覧が取得でき、169.254.169.254/latest/meta-data/
+<<項目名>>
でアクセスすると値が取得できます。
データを眺めてみると、末尾が/
で終わっている項目名は項目名のリストになっているようなので、function expand-awsmetaを定義して、末尾が/
だったら再帰的に読み込んでます。
169.254.169.254/latest/meta-data/public-keys/
項目だけは、取得した項目をそのまま後ろにつけるのではなく、169.254.169.254/latest/meta-data/public-keys/0/openssh-key
のようにする必要があるようで、これは今回取得を妥協しています。(今回は項目名(キー名)だけ取得している)
総評
一覧で出力してみると、こういう項目もあったのかといった感があります。