如何使用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?
答案 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'