如何使用shell脚本找到ami id

Ash*_*rpe 0 shell awk amazon-ec2 amazon-web-services amazon-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
Run Code Online (Sandbox Code Playgroud)

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

$ aws ec2 describe-images --filters "Name=name,Values=instance-20Aug15-i-*" |  awk '{ print  $9 }'
Run Code Online (Sandbox Code Playgroud)

输出:

ami-xxxx

$ aws ec2 describe-images --filters "Name=name,Values=instance-18Aug15-i-*" |  awk '{ print  $11 }' 
Run Code Online (Sandbox Code Playgroud)

输出:

ami-xxxx
Run Code Online (Sandbox Code Playgroud)

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

$ aws ec2 describe-images --filters "Name=name,Values=instance-18Aug15-i-*" 
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

对于第二阿米:

$ aws ec2 describe-images --filters "Name=name,Values=instance-20Aug15-i-*" 
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

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

ted*_*r42 5

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

您可以更改aws-cli返回的输出格式.这使得awk/grep更合适.

您也可以使用--query而不是尝试解析它awk.它使用JMESPath语法,这比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
Run Code Online (Sandbox Code Playgroud)