You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash中用jq提取AWS的vm-managed-itg*资源并赋值变量

解决AWS Resource Groups Tagging API结合jq提取指定ARN并赋值给Bash变量的问题

错误原因解析

aws resourcegroupstaggingapi get-resources的返回JSON结构顶层是对象,核心资源数据存储在ResourceTagMappingList数组字段中。直接使用jq -r '.[].ResourceARN'会报错,因为顶层并非数组,无法直接遍历提取ResourceARN。

正确命令示例

1. 提取符合条件的ARN

通过jq定位到资源数组,筛选ARN包含vm-managed-itg的条目并提取ARN:

aws resourcegroupstaggingapi get-resources --resource-type-filters cloudwatch:alarm | jq -r '.ResourceTagMappingList[] | select(.ResourceARN | contains("vm-managed-itg")) | .ResourceARN'
  • .ResourceTagMappingList[]:遍历存储资源信息的数组
  • select(.ResourceARN | contains("vm-managed-itg")):筛选ARN包含指定字符串的资源条目
  • -r:输出无引号的原始字符串,方便后续变量处理

如果需要更精准的正则匹配(比如匹配以vm-managed-itg开头的ARN),可以将contains替换为test:

aws resourcegroupstaggingapi get-resources --resource-type-filters cloudwatch:alarm | jq -r '.ResourceTagMappingList[] | select(.ResourceARN | test("^.*vm-managed-itg.*$")) | .ResourceARN'

2. 赋值给Bash变量

情况1:存储为数组(推荐处理多个ARN)

# 将提取的ARN逐行存入数组
readarray -t ALARM_ARNS < <(aws resourcegroupstaggingapi get-resources --resource-type-filters cloudwatch:alarm | jq -r '.ResourceTagMappingList[] | select(.ResourceARN | contains("vm-managed-itg")) | .ResourceARN')

# 验证数组内容
echo "匹配的ARN数量:${#ALARM_ARNS[@]}"
for arn in "${ALARM_ARNS[@]}"; do
    echo "$arn"
done

情况2:存储为换行分隔的字符串

# 将提取的ARN存入单个变量(换行分隔)
ALARM_ARNS=$(aws resourcegroupstaggingapi get-resources --resource-type-filters cloudwatch:alarm | jq -r '.ResourceTagMappingList[] | select(.ResourceARN | contains("vm-managed-itg")) | .ResourceARN')

# 输出结果
echo "$ALARM_ARNS"

内容的提问来源于stack exchange,提问作者gcpdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:15:36