開発者は10GBのビデオファイルをS3にアップロードするアプリケーションを実装している。アップロードの途中でネットワーク障害が発生した場合、最初からやり直さずに中断した箇所から再開できるようにしたい。また、アップロードが完了しなかった不完全なパートがS3に残ることによるコストも最適化したい。最も適切な実装はどれか?
正解: S3マルチパートアップロードAPIでファイルを分割してアップロードし、S3ライフサイクルポリシーで不完全なマルチパートアップロードを自動削除するよう設定する。 5GBを超えるファイルのアップロードにはS3マルチパートアップロードが必須(PutObjectの最大サイズは5GB)。マルチパートアップロードでは失敗したパートのみ再試行でき、UploadIdを使って中断した箇所から再開できる。不完全なアップロードのパートはストレージコストが発生するため、ライフサイクルポリシーで「AbortIncompleteMultipartUpload」ルールを設定して自動削除するのがベストプラクティス。【Aが誤りの理由】Transfer Accelerationはエッジロケーション経由でアップロードを高速化する機能であり、中断からの再開機能は提供しない。PutObjectは単一リクエストのため失敗時は全体をやり直す必要があり、Exponential Backoff(指数バックオフ:再試行間隔を指数的に延長する手法)での再試行も根本解決にはならない。【Cが誤りの理由】Lambda関数には最大実行時間15分の制限とペイロードサイズの制約があり、10GBファイルの分割処理には不適切である。また、S3 CopyObjectはS3上の既存オブジェクトを別の場所にコピーするAPIであり、分割アップロードしたパーツを結合する用途には使用できない(結合はCompleteMultipartUpload APIの役割)。【Dが誤りの理由】S3 Batch Operationsは既にS3に存在するオブジェクトに対してタグ付け・コピー・Lambda呼び出しなどの一括操作を行うサービスであり、クライアントからの新規ファイルアップロードには使用できない。