AWS лямбда: произошла ошибка (404) при вызове операции HeadObject: не найдено - PullRequest
0 голосов
/ 28 апреля 2020

Когда я загружаю файл на s3 с помощью s3brower, мой python лямбда-скрипт обрабатывает этот файл. если я загружаю тысячи файлов одновременно, возможны некоторые сбои. Например, я загружаю 1651 изображение, лямбда-сбои шестнадцать раз, изображение с именем test.jpg

В моем лямбда-скрипте сначала проверьте, существует ли файл ,
client.head_object(Bucket=bucket_tmp,Key='test.jpg')
В журнале Cloudwatch отображается ошибка An error occurred (404) when calling the HeadObject operation: Not Found Затем я выполняю client.head_object(Bucket=bucket_tmp,Key='test.jpg') на моем компьютере, все в порядке, затем я вижу его в моем контейнере s3.

I ' Я нахожусь в Китае, это будет проблема с сетью? Когда лямбда обрабатывает изображение, но изображение не загружается?

1 Ответ

1 голос
/ 28 апреля 2020

Мы столкнулись с похожими проблемами с лямбдой, мы поддержали AWS и обнаружили, что это вызвано возможной согласованностью файлов в S3. Событие S3 инициируется до того, как фактический файл полностью становится доступным в S3, обычно происходит, когда мы загружаем большое количество файлов одновременно.

Мы решили эту проблему, введя повторные попытки с экспоненциальным откатом (2,4,8, 16 .. секунд).

Пример кода загрузки S3 (вы также можете использовать вызов client.head_object):

#Method with retries
def download_file_s3(client,bucket,s3_path,local_path,retries = 3):
    i = 0
    sleep = 2
    while(i <= retries):
        try:
            client.download_file(bucket,s3_path,local_path)
            break
        except Exception as e:            
            print("404 file not found !!!")
            i = i+1
            if i>retries:
                raise Exception(traceback.format_exc())
            time.sleep(sleep)
            sleep = sleep*2
            print("retry: "+str(i))

#Sample call
client = boto3.client('s3')
download_file_s3(client,bucket,s3_path,local_path,retries)

Подробнее: https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html

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