Используйте AWS Lambda для получения аварийных состояний CloudWatch

Я обновил свой исходный пост, так как продвинулся немного дальше, и у меня работает запрос моей CW Alarms. Теперь ниже выводится состояние моих сигналов CW в консоли и в нужном мне формате. Что я сейчас пытаюсь сделать, так это взять вывод и загрузить его в виде текстового файла в корзину S3. Это возможно?

CW код тревоги

import { CloudWatchClient, DescribeAlarmsCommand } from "@aws-sdk/client-cloudwatch";
const REGION = "eu-west-2";

const cwclient = new CloudWatchClient({ region: REGION });

export const handler = async() => {
  
const cwparams = {};
const cw = new DescribeAlarmsCommand(cwparams);

try {
  const cwdata = await cwclient.send(cw);
  cwdata.MetricAlarms.forEach(function (item) {
      console.info('\n%j', {alarmname:item.AlarmName,alarmstate:item.StateValue});
    });
  
} catch (error) {

  }
};

Вывод

Function Logs
START RequestId: xxxxxxxxxxxxxxxxxxx Version: $LATEST
2022-11-30T09:48:34.655Z    xxxxxxxxxxxxxxxxxxx INFO    
{"alarmname":"my-alarm-1","alarmstate":"OK"}
2022-11-30T09:48:34.655Z    xxxxxxxxxxxxxxxxxxx INFO    
{"alarmname":"my-alarm-2","alarmstate":"OK"}
END RequestId: xxxxxxxxxxxxxxxxxxx

Я просмотрел SDK для s3 PutObjectCommand и протестировал приведенное ниже, что позволяет мне загрузить файл с некоторым текстовым содержимым, но я не уверен, как я могу объединить данные CW Alarm с этим кодом, чтобы " Body» текстового файла — это мои данные CW Alarm.

Код S3

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

export const handler = async() => {

const bucketName = "mybucket";
const keyName = "test.json";

const s3 = new S3Client({});

const s3putCommand = new PutObjectCommand({
  Bucket: bucketName,
  Key: keyName,
  Body: "Hello"  // I would like this to be my CW Alarm data
});

try {
    await s3.send(s3putCommand);
    console.info('Successfully uploaded data to ' + bucketName + '/' + keyName);
  
} catch (error) {
  
  }
};

Вывод

Function Logs
START RequestId: xxxxxxxxxxxxxxxxxxx Version: $LATEST
2022-11-30T09:56:45.585Z    xxxxxxxxxxxxxxxxxxx INFO    Successfully uploaded data to mybucket/test.json
END RequestId: xxxxxxxxxxxxxxxxxxx

Моя цель состоит в том, чтобы файл test.json выглядел так:

{"alarmname":"my-alarm-1","alarmstate":"OK"} {"alarmname":"my-alarm-2","alarmstate":"OK"}

Спасибо.

Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
0
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы используете устаревший AWS SDK для JavaScript. Обратитесь к новой библиотеке кода AWS, чтобы узнать о последнем рекомендуемом пакете SDK для использования здесь:

URL:

Https://docs.aws.amazon.com/code-library/latest/ug/javascript_3_cloudwatch_code_examples.html

А, спасибо за это. У меня все еще есть проблемы с его работой, но я посмотрю больше на обновленную версию.

jtwp 18.11.2022 21:06

Я обновил исходный пост с моим прогрессом и моей последней задачей. Надеюсь, кто-то может помочь мне заставить это работать так, как я хотел бы.

jtwp 30.11.2022 11:15
Ответ принят как подходящий

С помощью коллеги я нашел ответ на этот вопрос. Пока в вашей лямбда-функции ваш индексный файл называется "index.mjs"

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { CloudWatchClient, DescribeAlarmsCommand } from "@aws-sdk/client-cloudwatch";
import { Upload } from "@aws-sdk/lib-storage";

const REGION = "eu-west-2";
const cwclient = new CloudWatchClient({ region: REGION });

export const handler = async () => {
  const cwparams = {};
  const cw = new DescribeAlarmsCommand(cwparams);
  const alarmData = [];
  const bucketName = "mybucket";
  const keyName = "test.json";

  const s3 = new S3Client({});

  try {
    const cwdata = await cwclient.send(cw);
    cwdata.MetricAlarms.forEach(function (item) {
      alarmData.push({
        alarmname: item.AlarmName,
        alarmstate: item.StateValue,
      });
    });
  } catch (error) {}

  const s3putCommand = new Upload({
    client: s3,
    params: {
      Bucket: bucketName,
      Key: keyName,
      Body: JSON.stringify(alarmData),
    },
  });

  try {
    const data = await s3putCommand.done();
    console.info(data);
  } catch (error) {
    console.info(error);
  }
};

Другие вопросы по теме