Итак, я вижу две вещи, которые должны быть выполнены по-разному.
Во-первых, у вас есть это:
createTopic('aws-iot-button-sns-topic', (err, topicArn) => {
Прямо сейчас ваша функция создает ненужныетемы, не удаляя их, это проблема.Вместо этого вы должны создать тему SNS извне и ссылаться на нее здесь, используя либо переменные среды Lambda, либо жестко программируя тему SNS arn.Или сначала проверьте, существует ли уже тема с таким именем, и не создавайте ее, если она есть.
Во-вторых, Lambdas не работают дольше, чем 900 секунд (15 минут) , поэтому проверить, работает ли скрипт в течение> 24 часов, невозможно.
Вместо этого вам нужно создать триггер CloudWatch, который запускается каждые 24 часа с использованием cron ,Таким образом, ваша лямбда будет работать ровно один раз каждые 24 часа (или любое другое событие, которое вы настраиваете), и в коде вы просто должны отправить сообщение один раз.Тогда вам не нужно будет проверять, сколько времени и сколько вы уже отправили, поскольку вы знаете, что триггер события происходит только один раз, поэтому ваше сообщение отправляется один раз, а ваша лямбда прекращает выполнение сразу после этого.
Суть Lambdas в том, что они недолговечны и не имеют состояния, поэтому спроектируйте свой сервис соответствующим образом:)
Редактировать: После комментария я понимаю вариант использования подробнее ... в этом сценарии, где Lambda выполняетсяпо IoT я лично сохранял бы предыдущее время выполнения в хранилище параметров SSM или DynamoDB, а затем всякий раз, когда запускается Lambda, я получал значение, проверял, прошло ли 24 часа, и отправлял SNS, если он это делал.Вы должны будете сделать это, потому что Lambda не будет знать иначе, когда было время последнего выполнения (и убедитесь, что обновлялось только время последнего выполнения при успешном вызове публикации SNS, то есть вы уверены, что отправили сообщение в тот день)