WindowsバッチでインスタンスIDを取得する方法を紹介します。EC2インスタンスから実行する場合を想定しています。
・定番の「http://169.254.169.254」にアクセスしてメタデータを取得する方法です。
・バッチの for を使用しています。なぜこのようなことをしているか謎に思えるかもしれませんが、Windowsバッチの不便さからくるしかたない技です。これにより実行結果を変数に代入することができます。
・もしバッチファイル内で記載するなら %%i のように%を重ねる必要あります。
C:\>for /f "usebackq tokens=*" %i IN (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/instance-id`) DO @set instanceid=%i
C:\>echo %instanceid%
<インスタンスIDが出力される>
【2022年1月追記】
IMDS v1はセキュリティ上問題があるため v2が推奨しています。v2はセッショントークンによりメタ情報を取得します。方式は次を参考にしてください。
https://awsjp.com/AWS/hikaku/InstanceMetaData-v1-v2.html
参考
・IPアドレスを取得(プライベートではなくグローバルアドレス)
C:\>for /f "usebackq tokens=*" %i IN (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/public-ipv4`) DO @set ipaddr=%i
C:\>echo %ipaddr%
・ホスト名(AWS でのDNS名)
C:\>for /f "usebackq tokens=*" %i IN (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/hostname`) DO @set hostname=%i
C:\>echo %hostname%
・セキュリティグループ名
C:\>for /f "usebackq tokens=*" %i IN (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/security-groups`) DO @set securitygroups=%i
C:\>echo %securitygroups%
(*)その他メタデータ取得は以下のコマンドで実行します。これを上記に当てはめれば好きな項目が取得できます。
PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/
【超重要】本ページは情報が古くなっている可能性があります。参考程度にしてください。
[ 一覧に戻る]
【注意事項】本ページの内容は個人的に調査した結果がであり内容が正しいことは保証されません。
またAWSサービスは常に改良、アップデートされており本ページの内容が古く誤った内容になる可能性もあります。変更になっても本ページが正しく更新されるとは限りません。
あくまでも参考程度でご覧ください。内容により発生したいかなる時間的損害、金銭的損害、その他の損害に関しても何人も保証しません。