我正在尝试根据键值对更改现有 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
您可以使用aws describe
命令获取与key="Instance"
和标签匹配的所有 ec2 实例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
您可以将这两个命令合并到一行中。
$ 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>'
欲了解更多信息: