AWS node SDK Cloud Watch возвращает нулевые точки данных

Я пытаюсь получить размеры сегментов (BucketSizeBytes) моих сегментов S3 через Cloud Watch getMetricStatistics.

Я чувствую, что все настроено, но SDK не возвращает точек данных:

{ ResponseMetadata: { RequestId: 'ad520gfd4-7764-11e7-8084-2718255a18ba' },
  Label: 'BucketSizeBytes',
  Datapoints: [] }

Я установил приложение узла, которое запускает следующий код:

const AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
const cloudwatch = new AWS.CloudWatch();

var startTime = new Date(2017, 07, 15);
var endTime = new Date(2017, 08, 01);

var params = {
  EndTime: endTime,
  MetricName: 'BucketSizeBytes',
  Namespace: 'AWS/S3',
  Period: 3600,
  StartTime: startTime,
  Dimensions: [
    {
      Name: 'StorageType',
      Value: 'StandardStorage'
    }
  ],
  Statistics: [
    'Average'
  ],
  Unit: 'Bytes'
};

cloudwatch.getMetricStatistics(params, function(err, data){

    if(err) {
        console.log(err, err.stack);
    } else {
        console.log(data);
    }

});

Я дважды проверил свой регион в файле конфигурации, который установлен на Франкфурт (eu-central-1), и, чтобы убедиться, я даже попытался подключиться к S3 в том же файле, в котором, как и ожидалось, перечислены мои сегменты:

var S3 = new AWS.S3();

S3.listBuckets(function(err, data) {
  if (err) { console.log("Error:", err); }
  else {
    for (var index in data.Buckets) {
       var bucket = data.Buckets[index];
       console.log("Bucket: ", bucket.Name, ' : ', bucket.CreationDate);
    }
  }
});

Я также попытался установить точно такие же startDate и endDate в интерфейсе облачных часов AWS, чтобы убедиться, что в нем есть данные. Это было так. Так что я просто не понимаю, почему я не получаю обратно данные? Есть идеи, что я могу сделать, чтобы это исправить?


person Malibur    schedule 02.08.2017    source источник
comment
В подобных случаях я обычно считаю полезным обратиться к aws-cli и начать с простого запроса, который возвращает гораздо больше результатов, чем я хочу, а затем выяснить, как добавлять параметры по одному, чтобы получить меньше результатов, пока я не получу то, что я хотеть. Как только вы найдете то, что вам нужно в интерфейсе командной строки, он довольно легко преобразуется в любой другой SDK, поскольку все они в конечном итоге обращаются к одним и тем же API серверных служб. Дать шанс?   -  person Michael - sqlbot    schedule 02.08.2017
comment
Это помогло мне найти проблему. Огромное спасибо.   -  person Malibur    schedule 02.08.2017


Ответы (1)


Оказывается, проблема в моих переменных Date. Я все еще привыкаю к ​​тому странному факту, что даты в Javascript отсчитываются от 0, поэтому на самом деле я пытался получить данные из диапазона дат в будущем (смущает). Замена переменных даты следующим образом решила:

var startTime = new Date(2017, 06, 19); // 2017-07-18T22:00:00.000Z
var endTime = new Date(2017, 07, 02); // 2017-08-01T22:00:00.000Z

Большое спасибо Майклу - sqlbot за совет. Необходимость ввести его в aws cli вынудила меня ввести значения даты, и я получил ожидаемые результаты.

person Malibur    schedule 02.08.2017
comment
Привет, мне просто интересно, подходит ли вам настройка Period: 3600? Я пробовал ту же конфигурацию с AWS JS SDK, а также с CLI, он возвращал данные только по дням. - person gustavH; 30.11.2017