2017-04-26 2 views
0

Commençons tout juste à utiliser Boto3 avec Python.Python: Boto3: get_metric_statistics() n'accepte que les mots-clés

J'essaie d'utiliser un script get_metric_statistics simple pour renvoyer des informations sur CPUUtilization pour une instance. Voici le script que je suis à la recherche d'utiliser:

import boto3 
import datetime 

cw = boto3.client('cloudwatch') 

cw.get_metric_statistics(  
     300, 
     datetime.datetime.utcnow() - datetime.timedelta(seconds=600), 
     datetime.datetime.utcnow(), 
     'CPUUtilization', 
     'AWS/EC2', 
     'Average', 
     {'InstanceId':'i-11111111111'}, 
     ) 

mais je continue à recevoir le message suivant:

Traceback (most recent call last): 
    File "C:..../CloudWatch_GetMetricStatistics.py", line 13, in <module> 
    {'InstanceId':'i-0c996c11414476c7c'}, 
    File "C:\Program Files\Python27\lib\site-packages\botocore\client.py", line 251, in _api_call 
    "%s() only accepts keyword arguments." % py_operation_name) 
TypeError: get_metric_statistics() only accepts keyword arguments. 

Je:

  1. jeté un œil sur la documentation sur Boto3 et je Je crois avoir tout écrit/inclus correctement
  2. Définir la région/le format de sortie/les informations d'identification de sécurité corrects dans le dossier .aws
  3. googlé problèmes avec put_metric_statistics similaires, etc pour essayer de le comprendre

Je suis toujours bloqué à ce que je suis absent?

Tout guidage serait grandement apprécié.

Un grand merci Ben

Répondre

2

Cela fonctionne:

import boto3 
import datetime 

cw = boto3.client('cloudwatch') 

cw.get_metric_statistics(
     Period=300, 
     StartTime=datetime.datetime.utcnow() - datetime.timedelta(seconds=600), 
     EndTime=datetime.datetime.utcnow(), 
     MetricName='CPUUtilization', 
     Namespace='AWS/EC2', 
     Statistics=['Average'], 
     Dimensions=[{'Name':'InstanceId', 'Value':'i-abcd1234'}] 
     ) 

Pour trouver les bonnes valeurs, j'utilise le AWS Command-Line Interface (CLI):

aws cloudwatch list-metrics --namespace AWS/EC2 --metric-name CPUUtilization --max-items 1 

Il renvoie des informations telles que:

{ 
    "Metrics": [ 
     { 
      "Namespace": "AWS/EC2", 
      "Dimensions": [ 
       { 
        "Name": "InstanceId", 
        "Value": "i-abcd1234" 
       } 
      ], 
      "MetricName": "CPUUtilization" 
     } 
    ], 
    "NextToken": "xxx" 
} 

Vous pouvez ensuite utiliser ces valeurs pour remplir votre get_metric_statistics() Requet (tels que le Dimensions paramètre).

+0

Ah génial merci! J'avais traversé quelques itérations de la syntaxe (y compris l'ajout de la partie Name de la paire KV) mais clairement ce n'était pas tout à fait correct. Un grand merci pour cela - la question a disparu maintenant. – user7925487

+1

Super! Si cette réponse ou une réponse a résolu votre question, veuillez l'accepter [http://meta.stackexchange.com/q/5234/179419] en cliquant sur la coche. Ceci indique à la communauté plus large que vous avez trouvé une solution et donne une certaine réputation à la fois le répondeur et vous-même. Il n'y a aucune obligation de le faire. –

0

Référez-vous au documentation, et votre message d'erreur:

get_metric_statistics() only accepts keyword agruments 

arguments nommés doivent être transmis à la fonction est définie dans la documentation:

get_metric_statistics(**kwargs)