如何将 AWS EC2 描述实例与描述图像相结合?

How can I combine AWS EC2 describe-instances with describe-image?

我有 2 个 API 调用,第二个使用第一个的 AMI-ID

aws ec2 describe-instances \
    --query "Reservations[*].{ \
        OWNERID:OwnerId, \
        IP:Instances[0].PublicIpAddress, \
        ImageID:Instances[0].ImageId, \
        AZ:Instances[0].Placement.AvailabilityZone, \
        STATE:Instances[0].State.Name, \
        KEY:Instances[0].KeyName, \
        VPC:Instances[0].VpcId, \
        ID:Instances[0].InstanceId, \
        INSTANCETYPE:Instances[0].InstanceType \
        }" --output text

aws ec2 describe-images \
    --image-ids ami-xxx\
    --query "Images[*].{ImageName:Name, AWSDescription:Description}" \
    --output text

我正在尝试让单个实例的图像名称和来自各自图像的描述位于同一行,对于单个 table 以及来自两个调用的所有列。

是否可以在同一命令中执行此操作(我对此表示强烈怀疑)? 如果没有,我将如何处理 shell 脚本? 我是否必须从第一次调用中获取 AMI-ID 并使用它?但是第一次调用 returns 整个 table,我如何才能将额外的列“附加”到第一列旁边而不是下面?

JSON 输出和 JQ 是一种操作 awscli 数据的方法

以下方法从两个 awscli 调用中选择字段并将它们合并到一个 CSV 文件中。对于更大的任务,使用 JQ 合并 JSON 输出和 @csv 过滤器。

echo "InstanceId,InstanceName,ImageId,ImageName,ImageDescription" > ec2-instances.csv

instances_data=$(echo $instances | jq -r '.Reservations[].Instances[] | [.InstanceId, (.Tags[] | select(.Key=="Name") | .Value), .ImageId]  | join(",")')

for instance in $instances_data
do
    image_id=$(echo $instance | cut -f3 -d',')
    image_data=$(aws ec2 describe-images --image-ids $image_id | jq -r '.Images[] | [.Name, .Description] | join(",")')
    echo "${instance},${image_data}" >> ec2-instances.csv
done 

ec2-instances.csv:

InstanceId,InstanceName,ImageId,ImageName,ImageDescription
i-abc123,nat-instance,ami-e7ee9edd,amzn-ami-vpc-nat-hvm-2015.03.0.x86_64-gp2,Amazon Linux AMI VPC NAT x86_64 HVM GP2