Essayez d'utiliser le nouveau boto3
. Référence → http://boto3.readthedocs.org/en/latest/
Avec pip. Ver est 0.0.6.
$ sudo pip install boto3
$ sudo pip list | grep boto3
boto3 (0.0.6)
Reproduisez quelque chose comme $ aws ec2 describe-instances
.
>>> import boto3
>>> client = boto3.client('ec2')
>>> response = client.describe_instances()
>>> type(response)
<type 'dict'>
Il revient sous forme de type dict. Vous pouvez le laisser tel quel, mais si vous essayez de le convertir en JSON, une erreur se produira.
>>> import json
>>> res_json = json.dumps(response)
TypeError: datetime.datetime(2014, 4, 4, 11, 34, 13, tzinfo=tzutc()) is not JSON serializable
Après quelques recherches, il semble être non compatible avec le type datetime, bson ( Binary JSON) et ainsi de suite.
Cependant, sur un Mac, cela semble inutile si seul bson est inclus, insérez donc pymongo et ainsi de suite.
$ sudo pip install pymongo
>>> from bson import json_util
>>> res_json = json.dumps(response, default=json_util.default)
>>> type(res_json)
<type 'str'>
Si c'est comme ça, ce sont des informations de toutes les instances, donc affinez-les avec des filtres. Lorsque restreint par l'ID d'instance.
>>> response = client.describe_instances(Filters=[{'Name':'instance-id','Values':['i-XXXXXXXX']}])
Lorsque le filtre est transformé en variable et réduit par le nom du tag.
>>> f = [{'Name':'tag-value', 'Values':['XXXXXXXX']}]
>>> response = client.describe_instances(Filters=f)
Démarrer / arrêter etc. pour l'objet d'instance. Tout d'abord, essayez d'obtenir l'objet d'instance en spécifiant l'ID d'instance.
>>> import boto3
>>> ec2 = boto3.resource('ec2')
>>> instance = ec2.Instance('i-XXXXXXXX')
>>> instance.private_ip_address
"10.X.X.X"
L'autre est de l'obtenir à partir de la collection Instances. Par exemple, à partir du nom de la balise. Cependant, cela prend plus de temps car il boucle toutes les instances.
>>> import boto3
>>> ec2 = boto3.resource('ec2')
>>> tag_name = "TAG_NAME"
>>> instance = [i for i in ec2.instances.all() for t in i.tags if t["Value"] == tag_name][0]
>>> instance.private_ip_address
"10.X.X.X"
Opérez sur l'objet d'instance acquis par l'une ou l'autre méthode. Arrêt de l'instance. Attendre est possible. L'auto-boucle n'est plus nécessaire.
>>> instance.stop()
{u'StoppingInstances': [{u'InstanceId': 'i-XXXXXXXX', u'CurrentState': {u'Code': 64, u'Name': 'stopping'}, u'PreviousState': {u'Code': 16, u'Name': 'running'}}], 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA'}}
>>> instance.wait_until_stopped()
>>> instance.state
{u'Code': 80, u'Name': 'stopped'}
Lancement de l'instance. Il est également possible d'attendre.
>>> instance.start()
{u'StartingInstances': [{u'InstanceId': 'i-XXXXXXXX', u'CurrentState': {u'Code': 0, u'Name': 'pending'}, u'PreviousState': {u'Code': 80, u'Name': 'stopped'}}], 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA'}}
>>> instance.wait_until_running()
>>> instance.state
{u'Code': 16, u'Name': 'running'}
Recommended Posts