AWS CLIで複数インスタンスの設定値を一括更新

はじめに

業務で複数インスタンスを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となった。終わり

タイトルとURLをコピーしました