如何使用shell脚本找到ami id

时间:2015-09-22 07:40:53

标签: shell amazon-web-services awk amazon-ec2 ami

如何使用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  $11 }' 
done

现在的问题是" aws ec2 describe-images"返回不同awk值的图像ID:

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

输出:

ami-xxxx

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

输出:

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

对于第二个Ami:

$ 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?

2 个答案:

答案 0 :(得分:5)

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

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

You can also use --query而非尝试通过awk解析它。它使用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

答案 1 :(得分:1)

我们可以使用AWS CLI和jQuery查找AMI ID。
我设法通过以下命令解决了这个问题:

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