在 AWS 中查找并删除过时的 AMI

Find and remove outdated AMIs in AWS

我需要删除 AWS 中过时的 Ami 列表。但首先我需要确认是否有任何地方仍在使用那些 Ami 的。有什么有效的方法可以找出来吗

首先,您需要定义“Outdated AMIs”,它可以是创建日期或其他。但这里的脚本将列出实例 ID 以及特定区域中特定实例使用的 AMI 详细信息。默认情况下,它将查看默认区域。

#Get list of EC2 instance
echo "Getting EC2"
EC2_LIST=$(aws ec2 describe-instances --query 'Reservations[].Instances[].{InstanceId:InstanceId}' --output text | tr '\n' ' ')
#Get list of AMI used by ec2
echo "Getting AMI"
LIST_AMI_ID=$(aws ec2 describe-instances --query 'Reservations[].Instances[].{ImageId:ImageId,InstanceId:InstanceId}' --output text | tr '\n' ' ')

EC2_LIST_ARRAY=($EC2_LIST)
LIST_AMI_ID_ARRAY=($LIST_AMI_ID)

for index in ${!LIST_AMI_ID_ARRAY[*]}; do

echo "Get details for AMI ${LIST_AMI_ID_ARRAY[$index]}"
#Get details of AMI
AMI_DETAILS=$(aws ec2 describe-images --image-ids ${LIST_AMI_ID_ARRAY[$index]} --query 'Images[].{CreationDate:CreationDate,Tags:Tags[]}')
echo "Instance having ID ${EC2_LIST_ARRAY[$index]} using  AMI ID ${LIST_AMI_ID_ARRAY[$index]}  Details: $AMI_DETAILS"
done

输出

Get details for AMI ami-0219162cf838b3455
Instance having ID i-0ceb0dfa197fd7455 using  AMI ID ami-0219162cf838b3455  Details: [
    {
        "CreationDate": "2019-10-22T05:17:46.000Z",
        "Tags": [
            {
                "Key": "Base_AMI_Name",
                "Value": "ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-20191021"
            },
            {
                "Key": "OS_Version",
                "Value": "Ubuntu"
            },
            {
                "Key": "Release",
                "Value": "Latest"
            },
            {
                "Key": "Name",
                "Value": "postgres"
            },
            {
                "Key": "Scope",
                "Value": "database"
            }
        ]
    }
]

aws-cli-cheatsheet

为了它的价值,我也为此目的构建了一个小工具——一些 JavaScript 围绕 AWS API 调用。

这基本上是尝试查找您帐户中使用的所有 AMI,并按年龄和新引入的弃用标志查看 AMI:

目前它非常简单,但我愿意接受功能请求。 ;)