ホスト名とインスタンスIDのマップを作る
Session Managerでリモートログインするときなど、EC2のインスタンスIDを欲しい場合がある。
インスタンスIDよりもホスト名のほうが覚えやすいのでホスト名からインスタンスIDを手軽に特定できるようにしておくと便利。
Nameタグにホスト名を登録
EC2のメタ情報としてはホスト名のフィールドはないので、EC2インスタンスのNameタグにホスト名を登録しておく。
タグであればNameタグ以外のタグでもオーケー。
運用にあわせてタグ名を読み替える。
aws ec2 describe-instances コマンドの JSON フォーマット
aws ec2 describe-instances コマンドでEC2インスタンスのメタ情報を一括取得できる。
デフォルトではJSONフォーマットで出力される。
フォーマットは以下の通り。
{
"Reservations": [
{
"Groups": [],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": "ami-xxxxxxxxxxxxxxx",
"InstanceId": "i-xxxxxxxxxxxxxxxx", // ← インスタンスID
"InstanceType": "t2.micro",
"LaunchTime": "2022-03-14T11:40:31+00:00",
...
"Tags": [
{
"Key": "Name",
"Value": "some.example.com" // ← 登録しておいたホスト名
},
...
],
}
],
...
}
]
}
必要なのはInstanceId
とTags
。
今回の例ではNameタグにホスト名を登録しているが、別のタグで登録している場合は以降でそちらを使うようにする。
jq コマンドで整形する
JSONフォーマットなのでjqコマンドで整形する。
インスタンスの一覧はReservations
の配列の中のInstances
の配列。Instances
で列挙されるオブジェクトのなかではインスタンスIDとホスト名は以下に記載される。
- インスタンスID:
InstanceId
- ホスト名:
Tags
の中のKey
がName
となっているオブジェクトのValue
$ aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | [.InstanceId, (.Tags[] | select(.Key=="Name") | .Value) ] | @csv'
"i-xxxxxxxxxxxxxxxx","some.example.com"
Nameタグ以外のタグ名にした場合はKey=="Name"
の部分を変える。
\手を動かしながらTerraformを学びたい人にオススメ!/