無限ノック › DVA 練習問題一覧 › 問題
DVAAWSのサービスを使用した開発

開発者が5つのLambda関数を管理しており、それぞれが同じ300MBのサードパーティ機械学習ライブラリをデプロイパッケージに含めています。ライブラリのバージョンアップ時に全関数を再デプロイする必要があり、パッケージサイズが大きいためデプロイに時間がかかっています。この課題を解決するためのベストプラクティスはどれですか?

A
全関数を1つのLambda関数に統合し、ハンドラー引数でロジックを分岐する
全関数を1つに統合すると責務が混在してメンテナンス性が低下し、独立したテスト・個別デプロイの柔軟性も失われます。共有ライブラリ問題の根本的解決にもなりません。
B
Lambdaレイヤーにライブラリをパッケージ化し、全関数から参照する
✓ 正解
Lambdaレイヤーは関数間で共有できるコンポーネント(ライブラリ・依存関係・カスタムランタイム等)をまとめる仕組みです。レイヤーを更新するだけで参照する全関数にバージョン管理しながら反映でき、各関数のデプロイパッケージから依存関係を除外できるためサイズが大幅に削減されます。1関数あたり最大5レイヤーを参照でき、コールドスタート時に/opt以下に展開されます。
C
Amazon EFSをLambdaにマウントしてライブラリをファイルシステムに保存する
Amazon EFSはVPCの設定・マウントターゲットの作成・追加コストが必要で、ライブラリ共有という用途にはLambdaレイヤーより複雑です。
D
S3にライブラリをアップロードし、Lambda起動時に毎回 /tmp にダウンロードする
S3からの毎回ダウンロードはLambda起動のたびに300MBを/tmpへダウンロードするためコールドスタートレイテンシとデータ転送コストが大幅に増加し、要件の解決になりません。

解説

正解: Lambdaレイヤーにライブラリをパッケージ化し、全関数から参照する Lambdaレイヤーは関数間で共有できるコンポーネント(ライブラリ・依存関係・カスタムランタイム等)をまとめる仕組みです。レイヤーを更新するだけで参照する全関数にバージョン管理しながら反映でき、各関数のデプロイパッケージから依存関係を除外できるためサイズが大幅に削減されます。1関数あたり最大5レイヤーを参照でき、コールドスタート時に/opt以下に展開されます。 選択肢Aの全関数を1つに統合すると責務が混在してメンテナンス性が低下し、独立したテスト・個別デプロイの柔軟性も失われます。共有ライブラリ問題の根本的解決にもなりません。 選択肢CAmazon EFSはVPCの設定・マウントターゲットの作成・追加コストが必要で、ライブラリ共有という用途にはLambdaレイヤーより複雑です。 選択肢DのS3からの毎回ダウンロードはLambda起動のたびに300MBを/tmpへダウンロードするためコールドスタートレイテンシとデータ転送コストが大幅に増加し、要件の解決になりません。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る