Python:Boto3:get_metric_statistics()只接受关键字参数

时间:2017-04-26 12:54:18

标签: amazon-web-services boto3 amazon-cloudwatch

刚开始在Python上使用Boto3,所以这里肯定是新的。

我尝试使用简单的get_metric_statistics脚本来返回有关实例的CPUUtilization的信息。这是我希望使用的脚本:

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'},
        )

但我不断收到以下消息:

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.

我有:

  1. 看看Boto3上的文档,我相信我已经写好/包含了所有内容
  2. 在.aws文件夹中设置正确的区域/输出格式/安全凭据
  3. 使用put_metric_statistics等搜索类似的问题,试图弄清楚
  4. 我仍然不知道自己错过了什么?

    非常感谢任何指导。

    非常感谢 本

3 个答案:

答案 0 :(得分:3)

这有效:

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'}]
        )

要找到正确的值,我使用AWS Command-Line Interface (CLI)

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

返回以下信息:

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

然后,您可以使用这些值填充get_metric_statistics() requet(例如Dimensions参数)。

答案 1 :(得分:2)

请参阅documentation和您的错误消息:

get_metric_statistics() only accepts keyword agruments

必须将命名参数传递给docs中定义的函数:

get_metric_statistics(**kwargs)

答案 2 :(得分:-3)

您在尝试获取详细信息时是否使用了 region_name。你能分享你的 github 以更好地了解你在做什么。