Так что я думаю, что наиболее важной частью этого решения, вероятно, является сохранение сведений о событии сбоя, чтобы вы могли либо повторить попытку позже, отладить проблему или, по крайней мере, связаться с пользователем, если это необходимо.
S3, вероятно, идеально подходит для этого - я бы в основном написал функцию обработки ошибок, которая при вызове связывает все детали вокруг запроса (вероятно, все переменные HTTP POST, заголовки HTTP-запроса и т. Д.), А также изображение и сохраняет их на S3 для последующего поиска. Так как ваша служба работает на EC2, вероятность того, что запись на S3 не удастся, довольно мала, поэтому это, вероятно, эффективная ловушка.
При сбое записи в S3 я бы сделал небольшое количество попыток, но не исчерпывающим, поскольку это маловероятно. Вы можете даже зациклить механизм протоколирования SimpleDB, если хотите зарегистрировать тот факт, что вы сохранили на S3, но это не является строго необходимым, поскольку вы можете просто перечислить файлы в «корзине ошибок», чтобы увидеть, есть ли у вас какие-либо ошибки. Запрашивая каждый объект, вы также можете увидеть, в чем проблема.
После того, как это будет сделано, вы, вероятно, просто захотите обернуть try / catch вокруг других точек сбоя и событий сбоя, вызвать функцию store-on-S3 и перейти к следующей загрузке.
Если ваша служба выходит из строя, вы можете улучшить ее, сделав бит обработки ошибок частью неизбежного подхода с сохранением и очередью к загрузке и обработке этих загрузок. Этот подход, скорее всего, будет всегда включать сохранение загруженного файла на S3, а затем ставить в очередь запросы на обработку на SQS, поэтому ваша функция обработки ошибок может просто ссылаться на файл S3, который уже был сохранен, вместо того, чтобы связывать и хранить.
Надеюсь, это поможет!