[PYTHON] Obtenez des informations sur les instances EC2 avec des préfixes arbitraires dans le nom de l'instance avec boto

Qu'est-ce que le boto ??

Il semble que ce soit un SDK pour Python qui exploite AWS. (Je veux un nom de code pour les SDK autres que Python

http://aws.amazon.com/jp/sdkforpython/

Préparation

Installation

Il semble facile d'entrer avec la commande pip

$ sudo yum install python-pip
$ sudo pip install boto

Définition des informations d'identification (AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY)

Je ne veux pas écrire de code solide, je le définis donc dans le fichier de configuration. Apparemment, il semble chercher dans l'ordre "/etc/boto.cfg", "~ / .boto", et cette fois je veux le garder pour chaque utilisateur, alors définissez-le dans ~ / .boto selon le format suivant

[Credentials]
aws_access_key_id = <your access key>
aws_secret_access_key = <your secret key>

https://code.google.com/p/boto/wiki/BotoConfig

Extra: je suis accro à ça. .. ..

Je n'ai pas pu le trouver dans la documentation, mais quand je regarde l'implémentation de boto, il vérifie si "AWS_CREDENTIAL_FILE" est défini dans la variable d'environnement, et s'il est défini, la logique donne la priorité à ce paramètre.

https://github.com/boto/boto/blob/b9dbaad430fc35160d86fb921c4c1f75d66b6ddf/boto/pyami/config.py#L66-L77

Initialement, lors de l'importation de boto, une erreur s'est produite dans la classe ConfigPaser et elle est devenue "Eh ???". La cause était que l'en-tête (première ligne) du fichier défini dans AWS_CREDENTIAL_FILE contenait la chaîne "==========". Je ne pense pas que quiconque souffre de la même erreur, mais pour référence. (C'est un mystère pourquoi un tel en-tête a été utilisé en premier lieu.

Essayez de mettre en œuvre

import boto
import boto.ec2
from boto.ec2.connection import EC2Connection
from boto.ec2.regioninfo import RegionInfo
import re

def get_ec2_instances(region_end_point, re_pt):
    region = RegionInfo(endpoint = region_end_point)
    ec2_connection = boto.ec2.connection.EC2Connection(region = region)

    result = []
    instances = [i for r in ec2_connection.get_all_instances() for i in r.instances]
    for i in instances:
        if re_pt.match(i.tags['Name']):
            result.append(i)

    return result

if __name__ == "__main__":
    re_pt = re.compile('production')
    ec2_instance_list = get_ec2_instances('ec2.ap-northeast-1.amazonaws.com', re_pt)

    print(ec2_instance_list)

Vous pouvez maintenant obtenir les informations d'instance EC2 avec le préfixe «production» comme nom d'instance de la région de Tokyo.

Impressions etc.

Recommended Posts

Obtenez des informations sur les instances EC2 avec des préfixes arbitraires dans le nom de l'instance avec boto
environnement en ligne de serveur de code (3) Lancer une instance EC2 avec Boto3
Arrêter une instance avec une balise spécifique dans Boto3
Obtenir des informations avec l'API Zabbix
Obtenez des informations sur l'alambic avec Python