2017-09-26 2 views
0

je suis writtnig une fonction lambda sur le cadre serverless qui resturns l'état de l'instance, j'ai utilisé boto3afficher les paramètres « ec2.describe.instance.status

describe_instance_status()  

mon code fonctionne très bien, je reçois tous les paramètres, mais Je veux afficher uniquement l'état de l'instance (en attente | en cours | d'arrêt).

voici mon code:

import json 
import boto3 
import logging 
import sys 
import os 
import traceback 

# Import local dependencies sys.path.append('./site-packages') 

from botocore.exceptions import ClientError from pprint import pprint 

#setup simple logging for INFO logger = logging.getLogger() 
logger.setLevel(logging.INFO) 

from botocore.exceptions import ClientError 


def instance_status(event, context): 
    """Take an instance Id and return its status""" 
body = {} 
status_code = 200 

try: 
    client = boto3.client('ec2') 
    r = client.describe_instance_status(InstanceIds=['i-070ad081']) 
    body["message"] = str(r) 
except Exception as e: 
    print(traceback.format_exc()) 
    status_code = 500 
    body["message"] = str(e) 
#need a json body to return the status 
response = { 
    "statusCode": status_code, 
    "body": json.dumps(body) 
} 
return response 

est ici la sortie http:

{ 
"message": "{u'InstanceStatuses': [{u'InstanceId': 'i-070ad071', u'InstanceState': {u'Code': 16, u'Name': 'running'}, u'AvailabilityZone': 'us-east-1a', u'SystemStatus': {u'Status': 'ok', u'Details': [{u'Status': 'passed', u'Name': 'reachability'}]}, u'InstanceStatus': {u'Status': 'ok', u'Details': [{u'Status': 'passed', u'Name': 'reachability'}]}}], 'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': '35684bc5-2ab5-4225-8f8b-66bb217866f8', 'HTTPHeaders': {'transfer-encoding': 'chunked', 'vary': 'Accept-Encoding', 'server': 'AmazonEC2', 'content-type': 'text/xml;charset=UTF-8', 'date': 'Tue, 26 Sep 2017 09:36:15 GMT'}}}" 
}  
+0

https://docs.python.org/2/library/json.html – BMW

Répondre

0

Ne pas utiliser str(r) comme il va le transformer en une représentation d'un dictionnaire de chaîne de caractères Python.

try: 
    client = boto3.client('ec2') 
    r = client.describe_instance_status(InstanceIds=['i-070ad081']) 
    # Use 'r' instead of 'str(r)' 
    body["message"] = r 
except Exception as e: 
    print(traceback.format_exc()) 
    status_code = 500 
    body["message"] = str(e) 

# need a json body to return the status 
response = { 
    "statusCode": status_code, 
    "body": json.dumps(body) 
} 

return response