Мы столкнулись с похожими проблемами с лямбдой, мы поддержали 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