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