如何将AWS EC2描述实例与描述映像结合使用?



我有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

我试图有单独的实例与图像名称和描述从他们各自的图像在同一行,为一个表与所有的列从两个调用。

有可能在同一个命令中做到这一点吗(我强烈怀疑)?如果没有,我该如何使用shell脚本呢?我是否必须从第一次呼叫中获取AMI-ID并使用它?但是第一次调用返回的是一个完整的表,我怎么能"追加"呢?额外的列在第一列旁边而不是下面?

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

最新更新