Estoy tratando de imprimir solo la utilización promedio de CPU de una instancia de AWS. Este código imprimirá la 'respuesta' pero el ciclo for al final no está imprimiendo la utilización promediada. ¿Alguien podría ayudar? ¡Gracias de antemano!
import boto3 import sys from datetime import datetime, timedelta client = boto3.client('cloudwatch') response = client.get_metric_statistics( Namespace='AWS/EC2', MetricName='CPUUtilization', Dimensions=[ { 'Name': 'InstanceId', 'Value': 'i-1234abcd' }, ], StartTime=datetime(2018, 4, 23) - timedelta(seconds=600), EndTime=datetime(2018, 4, 24), Period=86400, Statistics=[ 'Average', ], Unit='Percent' ) for cpu in response: if cpu['Key'] == 'Average': k = cpu['Value'] print(k)Este es el mensaje de error que recibo:
Traceback (most recent call last): File "C:\bin\TestCW-CPU.py", line 25, in <module> if cpu['Key'] == 'Average': TypeError: string indices must be integersfor cpu in response['Datapoints']: if 'Average' in cpu: print(cpu['Average']) 2.25348611111 2.26613194444 Puede ver por qué esto funciona, si imprime el valor de cpu :
print(response) for cpu in response['Datapoints']: print(cpu) {u'Timestamp': datetime.datetime(2018, 4, 23, 23, 50, tzinfo=tzlocal()), u'Average': 2.2534861111111106, u'Unit': 'Percent'} {u'Timestamp': datetime.datetime(2018, 4, 22, 23, 50, tzinfo=tzlocal()), u'Average': 2.266131944444444, u'Unit': 'Percent'}Esto generará la CPU promedio:
for k, v in response.items(): if k == 'Datapoints': for y in v: print(y['Average'])