Как передать значения лямбда-функции в CloudWatch?

Как лучше всего обернуть функции так, чтобы они обрабатывали пинг от таймера CloudWatch? Например, возьмите лямбда-функцию ниже:

export const fn = (event, context, callback) => {
  const { year, make, model, } = event.queryStringParameters

  return otherFn({ year, make, model, })
    .then(res => response(callback, res))
    .catch(err => console.log(err))
}

Если я пропингую функцию, произойдет ошибка, потому что в запросе CloudWatch нет queryStringParameters. Технически, это по-прежнему будет поддерживать функцию Lambda в тепле (что и является моей целью), но я не хочу иметь излишне длинный список ошибок.

Я заметил, что CloudWatch позволяет включать входные данные, которые (предположительно) передаются в функцию Lambda:

настроить ввод

Какой самый разумный способ обернуть указанную выше функцию, чтобы она могла принимать пинг? В идеале это выглядело бы так:

export const fn = (event, context, callback) => {
  if (event.ping) return ping(callback) // the ping function is an import to stay DRY
  const { year, make, model, } = event.queryStringParameters

  return otherFn({ year, make, model, })
    .then(res => response(callback, res))
    .catch(err => console.log(err))
}

Где я бы передал некоторый JSON, который позволяет мне изменить событие, например:

{ "ping": true }

Я прочитал документацию по входам, но мне совсем не ясно, что означают различные типы входных данных или как их использовать ...


person samcorcos    schedule 22.03.2017    source источник


Ответы (1)


Если вы выберете параметр ввода «Константа» (текст JSON), поле ввода должно появиться чуть ниже. Вам нужно ввести json {"ping": true}. Ваша функция получит json как объект event, и вы сможете получить доступ к event.ping точно так же, как ваш код.

Если вы используете бессерверную структуру, вместо того, чтобы делать это в консоли AWS, вы можете добавить событие расписания для своей функции. Это будет в дополнение к вашему существующему http-событию. Вы можете добавить параметр ping: true в раздел ввода запланированного события следующим образом:

scheduledFunction:
  handler: index.handler
  events:
    - schedule:
        rate: rate(1 minute)
        enabled: true
        input:
          ping: true

Это создаст и активирует событие журнала cloudwatch с указанным расписанием и отправит входной параметр ping в объект event.

person user818510    schedule 29.04.2017
comment
Это собственно ответ на вопрос. Могут ли модераторы отметить это? - person Yevhenii Herasymchuk; 11.01.2018
comment
Действительно элегантный ответ на вопрос, но он связан только с бессерверной структурой, я предлагаю что-то, близкое к AWS SAM или AWS Cloudformation, было бы более полезным. - person noobie-php; 02.08.2019
comment
Действительно абсолютный ответ. Действительно полезно, подумал, что не нашел его в документах AWS - person Tharsan Sivakumar; 22.08.2019
comment
Просто чтобы добавить еще один пример, не связанный с какой-либо структурой, это образец CloudFormation: gist.github.com/RichardSilveira / - person Richard Lee; 14.11.2020