如何在 aws-cli --query 参数中扩展变量

How to expand variable in aws-cli --query parameter

我正在尝试编写一个非常简单的脚本,而且我对 aws cli 还很陌生。使用我的脚本,我正在输出所有允许所有开放 IP (0.0.0.0/0) 的安全组 ID,并且我正在使用

aws ec2 describe-security-groups --filters Name=ip-permission.cidr,Values='0.0.0.0/0' --region "$region" --query 'SecurityGroups[*].{Name:GroupName,vpc:VpcId,sg:GroupId,Region:"$region"}' --output table. 

region 是在脚本的前面部分定义的,因为我要遍历所有区域。

但是,当显示 table 时,区域列显示 None。我怎样才能包含只有 aws ec2 describe-security-groups 过滤器的区域,这样它就不会输出 None?

命令的输出中不存在region,因此您无法查找值region

describe-security-groups-output

所以另一种选择是扩展 $region variable 的值,然后使用转义序列将该值打印为静态值。

Region:\``echo $region`\`

你可以使用

export region=us-east-1 && aws ec2 describe-security-groups --region=$region --filters Name=ip-permission.cidr,Values='0.0.0.0/0' --query "SecurityGroups[*].{Name:GroupName,vpc:VpcId,sg:GroupId,Region:\``echo $region`\` }" --output table

示例输出

---------------------------------------------------------------------------------------
|                               DescribeSecurityGroups                                |
+-------------------------------+------------+------------------------+---------------+
|             Name              |  Region    |          sg            |      vpc      |
+-------------------------------+------------+------------------------+---------------+
|  launch-wizard-17             |  us-west-2 |  sg-12345  |  vpc-12345 |

AWS-cli 看区域,所以你可以一次获取所有区域,从所有区域获取 security group 使用下面的脚本。

#!/bin/bash

for region in $(aws ec2 describe-regions --query "Regions[].RegionName" --output text); do 
    echo "SG for region ${region}"
    aws ec2 describe-security-groups --region=$  --filters Name=ip-permission.cidr,Values='0.0.0.0/0' --query "SecurityGroups[*].{Name:GroupName,vpc:VpcId,sg:GroupId,Region:\``echo $region`\` }" --output table
done

aws-cli-cheatsheet