はじめに
業務で複数インスタンスをIMDSv2に更新する機会があり、一応めもしておく。
スクリプト作成
スクリプトは自分で作れないのでChatGPTに作ってもらいました。
外だしのファイルに記述したインスタンスIDを元に、http-tokensをrequiredにしてもらいます。
スクリプトの中身
[cloudshell-user@ip-10-132-70-140 ~]$ cat test2.sh
#!/bin/bash
# インスタンスIDが記述されたテキストファイル
instance_file="instances.txt"
# ファイルからインスタンスIDを読み込み、各インスタンスに対してhttp-tokensをrequiredに設定
while IFS= read -r instance_id
do
aws ec2 modify-instance-metadata-options --instance-id "$instance_id" --http-tokens "required"
done < "$instance_file"
[cloudshell-user@ip-10-132-70-140 ~]$
外だしのインスタンスID一覧
[cloudshell-user@ip-10-132-70-140 ~]$ cat instances.txt
i-02fb535b5f70ba474
i-0e660c9941de821df
やってみる
現在の設定を確認
[cloudshell-user@ip-10-132-70-140 ~]$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].{InstanceId:InstanceId,HttpTokens:MetadataOptions.HttpTokens,HttpEndpoint:MetadataOptions.HttpEndpoint}'
[
[
{
"InstanceId": "i-0e660c9941de821df",
"HttpTokens": "optional",
"HttpEndpoint": "enabled"
}
],
[
{
"InstanceId": "i-02fb535b5f70ba474",
"HttpTokens": "optional",
"HttpEndpoint": "enabled"
}
]
]
[cloudshell-user@ip-10-132-70-140 ~]$
2台ともoptionalとなっている。
実行してみる
[cloudshell-user@ip-10-132-70-140 ~]$ sh ./test2.sh
{
"InstanceId": "i-02fb535b5f70ba474",
"InstanceMetadataOptions": {
"State": "pending",
"HttpTokens": "required",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
}
}
{
"InstanceId": "i-0e660c9941de821df",
"InstanceMetadataOptions": {
"State": "pending",
"HttpTokens": "required",
"HttpPutResponseHopLimit": 2,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
}
}
[cloudshell-user@ip-10-132-70-140 ~]$
2台ともrequiredとなった。終わり