Key-Valueペアに基づいて既存のEC2リソースのAWSタグを変更しようとしています。キーと値のペアが一致した場合は、ラベルを追加/変更してください。 AWS CLI を使用してこれを行います。
宣言-a インスタンスインスタンス=$(aws ec2 説明インスタンス | jq ".Reservations[].Instances[].Tags[] | [.Key, .Value]")
これにより、[ "Name"、 "TestCLI2" ] [ "Instance", "Trial2" ] [ "Instance", "Trial1" ] [ "Name", "TestCLI1" ] で出力が生成されます。
すべてのインスタンスを Key="Instance" および Value=["Trial1", "Trial2] と一致させ、Trial3 に変更する必要があります。
ループを使用しようとしていますが、このJSONを解析してifステートメントを確認する方法を進めることはできません。
for i in "${instance[@]}" # すべてのインスタンスを繰り返します。
答え1
このコマンドを使用して、タグに一致するすべてのec2インスタンスをaws describe
取得できます。key="Instance"
value=["Trial1", "Trial2"]
$ aws ec2 describe-instances --region <yourRegion> \
--query Reservations[*].Instances[*].[InstanceId] \
--filters "Name=tag:<tagKey>,Values=<tagValue>" --output text
上記のコマンドは、フィルタパラメータと一致するインスタンスのインスタンスIDを提供します。次の手順では、リソースIDを次のコマンドに渡すことができます。
$ aws ec2 create-tags --resources <id1> <id2> ... \
--tags 'Key=<tagKey>,Value=<newValue>'
Create-tags
ラベルがない場合、コマンドは新しいラベルを作成します。その場合、古いタグ値を新しいタグ値で更新します。
を使用すると、xargs
これら2つのコマンドを1行にまとめることができます。
$ aws ec2 describe-instances --region <yourRegion> \
--query Reservations[*].Instances[*].[InstanceId] \
--filters "Name=tag:<tagKey>,Values=<tagValue>" \
--output text| xargs -n1 -I@ aws ec2 create-tags \
--resources @ --tags 'Key=<tagKey>,Value=<newValue>'
詳細は: