更改 AWS 中现有资源的标签

更改 AWS 中现有资源的标签

我正在尝试根据键值对更改现有 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>'

欲了解更多信息:

相关内容