Je souhaite trouver toutes les instances Amazon Elastic Compute Cloud (Amazon EC2) qui exécutent Amazon Linux 1 (AL1) dans mon compte AWS.
Brève description
La prise en charge de la maintenance pour AL1 prend fin le 31 décembre 2023. Après cette date, vous pouvez continuer à exécuter AL1 sur vos instances EC2 et utiliser les AMI AL1 pour lancer de nouvelles instances EC2. Cependant, les mises à jour de sécurité critiques pour AL1 fournies par AWS sont interrompues.
Résolution
Procédez comme suit pour identifier les instances EC2 qui exécutent AL 1 sur votre compte AWS :
Important : Le script suivant répertorie uniquement les instances AL1 qui utilisent l'AMI détenue par Amazon. Il n'inclut pas les AMI personnalisées ou détenues par le client.
-
Créez le fichier de script Python suivant sur un terminal Linux ou bash (par exemple : find_al1_instances.py).
import argparse
import boto3
import json
from collections import defaultdict
def filter_regions(regions):
enabled_regions_raw = boto3.client('account').list_regions(
RegionOptStatusContains=['ENABLED', 'ENABLED_BY_DEFAULT'],
MaxResults=50)
enabled_regions = set([r['RegionName'] for r in enabled_regions_raw['Regions']])
valid_regions = enabled_regions.intersection(set(regions)) if regions else enabled_regions
print(f"Identified valid AWS regions: {valid_regions}")
return valid_regions
def instances_ordered_by_amis(ec2, region):
result = defaultdict(list)
for instance in ec2.instances.all():
if instance.state['Name'] not in ['shutting-down', 'terminated']:
result[instance.image_id].append(instance.id)
return result
def filter_al1_amis(ec2, amis):
result = []
for ami in amis:
try:
if ec2.Image(ami).image_owner_alias == 'amazon' and ec2.Image(ami).name.startswith('amzn-ami-'):
result.append(ami)
except:
# properties not set, cannot determine if this AMI is Amazon Linux 1 or not
continue
return result
def find_al1_instances(regions):
result = defaultdict(list)
for region in regions:
ec2 = boto3.resource('ec2', region_name=region)
amis_instances_dict = instances_ordered_by_amis(ec2, region)
al1_amis = filter_al1_amis(ec2, amis_instances_dict.keys())
result[region].extend(
[instance_id for instance_ids in
[instances for ami, instances in amis_instances_dict.items() if ami in al1_amis]
for instance_id in instance_ids]
)
return result
def main():
parser = argparse.ArgumentParser(
prog='find_al1_instances',
description='Find all EC2 instances running official Amazon Linux 1 AMIs',
epilog='Note: This python script does not list EC2 instances running derived Amazon Linux 1 AMIs')
parser.add_argument(
'-r', '--regions', nargs='+',
help='Space separated list of AWS regions names to search')
args = parser.parse_args()
account_id = boto3.client('sts').get_caller_identity()['Account']
print(f"Using AWS account: {account_id}")
regions = filter_regions(args.regions)
output = find_al1_instances(regions)
print("Found following EC2 instances in your AWS account running official Amazon Linux 1 AMIs:")
print(json.dumps(output, indent=4, sort_keys=True))
if __name__ == "__main__":
main()
-
Exécutez les commandes suivantes pour installer les dépendances dans yum/apt-get/dnf :
Remarque : Les commandes suivantes utilisent l'utilitaire de gestion de packages yum. Ces commandes fonctionnent également avec les outils apt-get ou dnf.
sudo yum install python3-pip
python3 -m pip install boto3
Remarque : Si vous ne disposez pas des informations d'identification boto3, consultez la section Informations d'identification sur le site Web de documentation de Boto2 1.34.7.
-
Exécutez le script à l’aide de la commande suivante :
python3 find_al1_instances.py [-r REGIONS [REGIONS ...]]