как добиться идемпотентного поведения в лямбде, которая пишет в S3?

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

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


person user2715182    schedule 26.06.2019    source источник


Ответы (1)


Вам нужен уникальный идентификатор и проверьте его перед обработкой. Посмотрите, есть ли оно у события. Например, пример события для «выражения 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.

person Adil Hindistan    schedule 26.06.2019