как добиться идемпотентного поведения в лямбде, которое пишет в S3? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть лямбда AWS, которая делает некоторые вычисления и записывает вывод в местоположение S3. AWS лямбда запускается выражением cron от cloudwatch. Поскольку лямбда может запускаться несколько раз, я хочу изменить лямда-код так, чтобы он обрабатывал несколько триггеров для лямбды.

Единственный серьезный побочный эффект для моей лямбды - это запись на S3 и отправка почты. В таком случае, как я могу гарантировать, что лямбда будет выполняться несколько раз, но при этом обеспечить идемпотентное поведение?

1 Ответ

0 голосов
/ 26 июня 2019

Вам нужен уникальный идентификатор и проверьте его перед обработкой. Посмотрите, есть ли у события. Например, событие Sample для «выражения cron» в правиле наблюдения за облаком предполагает, что вы получите что-то вроде этого:

{
  "version": "0",
  "id": "89d1a02d-5ec7-412e-82f5-13505f849b41",
  "detail-type": "Scheduled Event",
  "source": "aws.events",
  "account": "123456789012",
  "time": "2016-12-30T18:44:49Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:events:us-east-1:123456789012:rule/SampleRule"
  ],
  "detail": {}
}

В этом случае ваш код будет читать event.id и записывать это в S3 (например, yourbucket / running / 89d1a02d-5ec7-412e-82f5-13505f849b41). Когда лямбда запускается, она может перечислить ключи в «yourbucket / running» и посмотреть, совпадает ли event.id с любым из них.

Если ничего не найдено, создайте его.

Это не пуленепробиваемое решение, вы можете предположительно столкнуться с каким-либо состоянием гонки, скажем, если другая лямбда запускается, в то время как AWS медленно создает ключ, но быстро запускает другую лямбду, но это то, с чем вам придется жить если вы хотите использовать s3.

...