如何找到非共享的aws ami

时间:2015-03-30 07:02:02

标签: amazon-web-services aws-cli ec2-ami

我想删除我自己的非AMI所有AMI 例如:

$aws ec2 describe-images --executable-users 804427628951


这将列出具有显式启动权限的用户804427628951的所有图像。但我不知道如何列出所有非共享AMI。能否请你帮忙?
感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用以下命令列出所有自己的亚马逊机器映像(AMI):

aws ec2 describe-images --filters Name=image-type,Values=machine Name=owner-id,Values=YOUR_ACCOUNT_ID

在输出中,私有图像将显示为"Public": false

您还可以只显示私人图片:

aws ec2 describe-images --filters Name=image-type,Values=machine Name=is-public,Values=false Name=owner-id,Values=YOUR_ACCOUNT_ID

答案 1 :(得分:0)

您可以列出帐户中的AMI,以及如何使用aws ec2 describe-imagesaws ec2 describe-image-attribute的组合来共享它们。后者可以返回launchPermission元素,该元素是与AMI共享的帐户的列表。将两者结合起来可以让您遍历所有图像并计算它们共享的次数,如下所示:

for ami in $(aws ec2 describe-images --owners self | jq -r '.Images[].ImageId')
  do aws ec2 describe-image-attribute --image-id $ami --attribute 'launchPermission' | \
    jq '.ImageId + " - " + ([.LaunchPermissions[]]|length|tostring)'
done

对于您而言,您仅对未共享的图像感兴趣,因此您可能需要这样做:

for ami in $(aws ec2 describe-images --owners self | jq -r '.Images[].ImageId')
  do
    ct=$(aws ec2 describe-image-attribute --image-id $ami --attribute 'launchPermission' | \
      jq '[.LaunchPermissions[]]|length')
    if [ 0 -eq $ct ]; then echo $ami; fi
done