2015-09-22 5 views
0

Как найти AMI идентификатор, используя сценарий оболочкиКак найти AMI идентификатор, используя сценарий оболочки

Мой Сценарий:

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 описывают-изображения» возвращает идентификатор изображения для различных AWK значение:

$ 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 описывает-образа" является комментарием, который изменяется для каждого ами изображения:

$ 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 

Для 2-го Ами:

$ 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 идентификатор или есть другой способ, чтобы найти AMI идентификатор из имени ами?

+0

'AWK«/ami-[[:alnum:]]+/{match($0,/.*(ami-[[:alnum:]]+). * /, а); print a [1]} '' может быть –

ответ

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 
Смежные вопросы