Versuchen Sie es mit dem neuen boto3
. Referenz → http://boto3.readthedocs.org/en/latest/
Mit pip. Ver ist 0.0.6.
$ sudo pip install boto3
$ sudo pip list | grep boto3
boto3 (0.0.6)
Reproduzieren Sie so etwas wie "$ aws ec2 description-instance".
>>> import boto3
>>> client = boto3.client('ec2')
>>> response = client.describe_instances()
>>> type(response)
<type 'dict'>
Es wird als Diktattyp zurückgegeben. Sie können es so lassen, wie es ist, aber wenn Sie versuchen, es in JSON zu konvertieren, tritt ein Fehler auf.
>>> import json
>>> res_json = json.dumps(response)
TypeError: datetime.datetime(2014, 4, 4, 11, 34, 13, tzinfo=tzutc()) is not JSON serializable
Nach ein wenig Recherche scheint es [nicht kompatibel mit dem Datum / Uhrzeit-Typ] zu sein (http://stackoverflow.com/questions/11875770/how-to-overcome-datetime-datetime-not-json-serializable-in-python), bson ( Binäres JSON) und so weiter.
Auf einem Mac scheint es jedoch nutzlos zu sein, wenn nur bson enthalten ist, fügen Sie also Pymongo usw. ein.
$ sudo pip install pymongo
>>> from bson import json_util
>>> res_json = json.dumps(response, default=json_util.default)
>>> type(res_json)
<type 'str'>
Wenn es so ist, wie es ist, handelt es sich um Informationen aller Instanzen. Grenzen Sie sie daher mit Filtern ein. Wenn durch Instanz-ID eingegrenzt.
>>> response = client.describe_instances(Filters=[{'Name':'instance-id','Values':['i-XXXXXXXX']}])
Wenn Filter zu einer Variablen gemacht und durch den Tag-Namen eingegrenzt wird.
>>> f = [{'Name':'tag-value', 'Values':['XXXXXXXX']}]
>>> response = client.describe_instances(Filters=f)
Start / Stopp usw. für das Instanzobjekt. Versuchen Sie zunächst, das Instanzobjekt abzurufen, indem Sie die Instanz-ID angeben.
>>> import boto3
>>> ec2 = boto3.resource('ec2')
>>> instance = ec2.Instance('i-XXXXXXXX')
>>> instance.private_ip_address
"10.X.X.X"
Das andere ist, es aus der Instances Collection zu bekommen. Zum Beispiel aus dem Tag-Namen. Es dauert jedoch länger, da alle Instanzen durchlaufen werden.
>>> 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"
Arbeiten Sie mit dem Instanzobjekt, das mit einer der beiden Methoden erfasst wurde. Instanz stoppen. Warten ist möglich. Die Selbstschleife ist nicht mehr erforderlich.
>>> 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'}
Instanzstart. Dies ist auch möglich zu warten.
>>> 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