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