ある企業が、AWS Lambda と Amazon API Gateway でサーバーレス API を運用している。API は主に画像ファイルをユーザーから受け取り、S3 に保存してから処理するワークフローで使われる。現在は Lambda 関数がファイルを受け取って S3 にアップロードしているが、大きなファイル(最大 50MB)のアップロードに Lambda がかかわると実行時間が長くなりコストが増加している。Lambda の実行時間コストを最小にしながら要件を満たす最も適切なソリューションはどれか。
- A. API Gateway の Lambda 統合の代わりに S3 Transfer Acceleration を使って直接クライアントから S3 にアップロードさせる。
- B. API Gateway のペイロードサイズ制限を引き上げて大きなファイルを受け付けるようにする。
- C. Lambda のメモリを最大に設定して実行時間を短縮する。
- D. Lambda 関数から S3 の Presigned URL を発行し、クライアントが Presigned URL を使って直接 S3 にアップロードする。Lambda は URL 発行のみを担当するため実行時間は数十ミリ秒で完了する。
解答と解説を見る
正解: D
S3 の Presigned URL を使う設計では、Lambda 関数は Presigned URL を生成して返すだけ(数十ミリ秒)で完了し、実際のファイル転送はクライアントと S3 の間で直接行われる。Lambda がファイルデータを転送しないため、50MB のファイルアップロードによる Lambda 実行時間・コスト増加の問題が解消される。選択肢CのLambda メモリ最大化は実行速度を上げるが、ファイル転送そのものにかかる時間は大きく変わらず、メモリコストが増加する。選択肢AのS3 Transfer Acceleration はアップロード速度を向上させるが、Lambda を経由する構成では Lambda の実行時間コスト問題は解決しない。Presigned URL と組み合わせる場合は有効。選択肢BのAPI Gateway のペイロードサイズ制限引き上げ(最大 10MB)は、50MB のファイルには対応できない(API Gateway の最大ペイロードは 10MB)。
📚 関連サービスの解説: AWS Lambda ・ Amazon S3