如何将 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
我有 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