AWS Время ожидания лямбды с помощью boto3.resource ('s3') - PullRequest
0 голосов
/ 23 марта 2020

Я создал лямбду, чтобы реагировать, когда файлы загружаются в корзину. Одним из моих первых действий является получение version_id файла с помощью boto3. Ниже приведена функция, которая получает version_id на основе корзины и ключа. Вызов s3_resource.Object, кажется, работает нормально. Но если я откомментирую строку, которая печатает фактический version_id, тогда у меня лямбда-тайм-аут (тайм-аут установлен на 120 с).

Кажется, что печать самого объекта работает нормально, только если я пытаюсь напечатать version_id, время ожидания истекло. Это как-то связано со шлюзом NAT?

def get_file_version_id(bucket, key):
    s3_resource = boto3.resource('s3')
    file_obj = s3_resource.Object(bucket,key)
    print(f'file_obj: {file_obj}')
    #print(f'version_id: {file_obj.version_id}')
    #return file_obj.version_id
    return "Some Return Value"

1 Ответ

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

Вы используете высокоуровневые Ресурсы API-вызовы, а не низкоуровневые Клиент API-вызовы.

Ресурсы, такие как s3.Bucket, имеют атрибуты и это лениво загруженные свойства. Итак, когда вы создаете s3.Object, это чисто локальная вещь. Но когда вы пытаетесь получить доступ к одному из его свойств, например, к содержимому существующего объекта или его идентификатору версии, SDK boto3 затем выполнит фактический вызов API для службы S3.

Причина, по которой ваш код время скорее всего, у вас нет сетевого пути к сервису S3. Это, вероятно, означает, что вы запускаете свою функцию Lambda в VP C, и вы либо развернули ее в общедоступном c su bnet, либо в частном su bnet, не задавая этому su bnet значение по умолчанию Маршрут к inte rnet через NAT и шлюз Inte rnet или конечную точку S3 VP C.

Итак, либо разверните свою функцию Lambda вне VP C. Или, если вам нужно, чтобы он был в VP C, затем разверните его в частном su bnet вашего VP C (не в общедоступном c su bnet), а затем убедитесь, что у вас есть IGW и NAT в вашей публикации c su bnet и маршрут по умолчанию от частного su bnet Lambda до NAT. Или же go приватный su bnet и S3 VP C Маршрут конечной точки.

PS проверьте параметр event, переданный в ваш обработчик функции Lambda, на тот случай, если он действительно предоставит вам версию Я БЫ. Я не уверен, так ли это или нет, но было бы хорошо проверить.

...