Arhn - архитектура программирования

Python: Boto3: get_metric_statistics() принимает только аргументы ключевого слова

Только начал использовать Boto3 с Python, так что определенно новичок в этом.

Я пытаюсь использовать простой скрипт 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 и т. д., чтобы попытаться разобраться.

Я все еще застрял в том, что мне не хватает?

Любое руководство будет высоко оценено.

Большое спасибо Бен



Ответы:


1

Это работает:

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

Чтобы найти правильные значения, я использую интерфейс командной строки (CLI) AWS:

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() (например, параметра Dimensions).

26.04.2017
  • Ах блестяще спасибо! Я прошел через несколько итераций синтаксиса (включая добавление части имени пары KV), но ясно, что это было не совсем правильно. Большое спасибо за это - проблема исчезла. 27.04.2017
  • Большой! Если этот или любой другой ответ решил ваш вопрос, рассмотрите возможность принятия его, нажав на галочку. Это показывает более широкому сообществу, что вы нашли решение, и повышает репутацию как отвечающего, так и вас самих. Нет никаких обязательств делать это. 27.04.2017
  • Спасибо. Есть ли способ динамически передать регион? Когда мои экземпляры находятся в разных регионах, get_metric_statistics извлекает точки данных только для экземпляров, принадлежащих региону, который я ранее использовал в настройке aws. Так есть ли способ передать регион как параметр? 19.03.2021

  • 2

    См. документацию и сообщение об ошибке:

    get_metric_statistics() only accepts keyword agruments
    

    Именованные аргументы должны быть переданы в функцию, как определено в документации:

    get_metric_statistics(**kwargs)
    
    26.04.2017
  • правильно, основная причина в том, что аргументы должны быть в формате имя = значение! например, get_metric_statistics(Period=300,... вместо get_metric_statistics(300,... 01.06.2020

  • 3

    Вы использовали имя_региона при попытке получить подробности. Можете ли вы поделиться своим github, чтобы лучше знать, что вы делаете.

    23.07.2021
  • Это старый вопрос с принятым ответом. 23.07.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..