AWS Лямбда-функция запускается при событии S3, но только один раз за 30 минут - PullRequest
0 голосов
/ 02 марта 2020

Я создал простую лямбда-функцию, которая запускается при создании объекта в корзине S3, но она не всегда срабатывает ...

  1. Функция запускается и генерирует вход в систему. CloudWatch, когда я загружаю файл в корзину. Однако, когда я загружаю тот же или другой файл примерно через минуту в то же самое хранилище, функция не запускается снова.

  2. Если я повторно сохраню функцию и снова загружу файл в корзину, функция снова активируется. Если я загружаю файл снова через минуту или около того, функция не сработает.

  3. Если я на самом деле жду около 30 минут (а не минут или двух) и загружаю файл снова, функция запускается без повторного сохранения.

Ниже приведен код функции, Python 3.7. Почему он не срабатывает при загрузке файла в корзину?

import json

print("This is a test")

def lambda_handler(event, context):
    # Setting variables to equal values from the event object passed in.
    bucket = event['Records'][0]['s3']['bucket']['name']
    region = event['Records'][0]['awsRegion']
    object = event['Records'][0]['s3']['object']['key']
    user = event['Records'][0]['userIdentity']['principalId']

    print("Bucket: " + bucket)
    print("Region: " + region)
    print("User is " + user)

    return(object)

Спасибо:)

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Для объектов без контроля версий S3 записи, которые происходят одновременно, могут не создавать отдельные записи. AWS предлагает включить управление версиями объекта, если вы хотите, чтобы событие создавалось для каждой записи. Это также означает, что новая версия будет создаваться при каждой записи.

Документацию по указанному поведению можно найти здесь: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

0 голосов
/ 02 марта 2020

На самом деле, это не проблема. Очевидно, AWS объединяет несколько лямбда-исполнений в одном потоке журналов в CloudWatch. Таким образом, моя лямбда-функция выполнялась каждый раз, когда я загружал файл в корзину, я просто не заметил, что выполнение было зарегистрировано в одном и том же потоке журналов, и вместо этого ожидал новый поток потоков, созданный для каждого лямбда-выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...