如何使用 shell 脚本查找 ami id

How to find ami id using shell script

如何使用 shell 脚本查找 ami id

我的脚本:

for i in $(cat /tmp/amidel.txt); do
        echo "Image ID of instance which needed to be Deregistered is $i ";
        val1="$i"-i-*
        aws ec2 describe-images --filters "Name=name,Values=$val1" | awk '{ print   }' 
done

现在的问题是 "aws ec2 describe-images" returns 不同 awk 值的图像 id :

$ aws ec2 describe-images --filters "Name=name,Values=instance-20Aug15-i-*" |  awk '{ print   }'

输出:

ami-xxxx

$ aws ec2 describe-images --filters "Name=name,Values=instance-18Aug15-i-*" |  awk '{ print   }' 

输出:

ami-xxxx

发生这种情况是因为 "aws ec2 describe-images" 返回的第三个值是注释,它因每个 ami 图像而异:

$ aws ec2 describe-images --filters "Name=name,Values=instance-18Aug15-i-*" 

输出:

IMAGES  x86_64  This is for Daily auto AMI creation xen ami-bebfb1ec    008392659736/instance-18Aug15-i-1effb6d3    machine aki-503e7402    instance-18Aug15-i-1effb6d3 008392659736    False   /dev/sda1   ebs available   paravirtual
BLOCKDEVICEMAPPINGS /dev/sda1
EBS True    snap-51539764   8   gp2
BLOCKDEVICEMAPPINGS /dev/sdf
EBS False   snap-4e95d37b   20  gp2

第二个亚美:

$ aws ec2 describe-images --filters "Name=name,Values=instance-20Aug15-i-*" 

输出:

IMAGES  x86_64  This is created by ami-backup.sh    xen ami-52020b00    008392659736/instance-20Aug15-i-127fb8df    machine instance-20Aug15-i-127fb8df 008392659736    False   /dev/sda1   ebs simple  available   hvm
BLOCKDEVICEMAPPINGS /dev/sda1
EBS True    snap-2b563aca   8   gp2

所以请帮助我如何解析它以获得正确的 ami id 或者是否有任何其他方法可以从 ami 名称中找到 ami id?

awk 是解析 JSON 的不合适工具。如果您喜欢链接工具,jq 会更合适。

你可以change the output format returned by aws-cli。这使得 awk/grep 更合适。

You can also use --query instead of trying to parse it through awk. It uses the JMESPath syntax,比jq语法稍微简单一些。

这里有一些例子:

$ aws ec2 describe-images --image-ids ami-6b1cd400 --query Images[].ImageId
[
    "ami-6b1cd400"
]

$ aws ec2 describe-images --image-ids ami-6b1cd400 --query Images[].ImageId --output text
ami-6b1cd400

我们可以使用 AWS CLI 和 jQuery.
找到 AMI id 我已经设法用以下命令解决了这个问题:

aws ec2 describe-images --owners self --output json | jq '.Images[] | {ImageId}' | jq --raw-output '.ImageId'