En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je identifier les instances Amazon Linux 1 EC2 dans mon compte AWS ?

Lecture de 3 minute(s)
0

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.

  1. 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()
  2. 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.

  3. Exécutez le script à l’aide de la commande suivante :

    python3 find_al1_instances.py [-r REGIONS [REGIONS ...]]
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an