DVAAWSのサービスを使用した開発
開発者が5つのLambda関数を管理しており、それぞれが同じ300MBのサードパーティ機械学習ライブラリをデプロイパッケージに含めています。ライブラリのバージョンアップ時に全関数を再デプロイする必要があり、パッケージサイズが大きいためデプロイに時間がかかっています。この課題を解決するためのベストプラクティスはどれですか?
A全関数を1つのLambda関数に統合し、ハンドラー引数でロジックを分岐する
全関数を1つに統合すると責務が混在してメンテナンス性が低下し、独立したテスト・個別デプロイの柔軟性も失われます。共有ライブラリ問題の根本的解決にもなりません。
BLambdaレイヤーにライブラリをパッケージ化し、全関数から参照する
✓ 正解
Lambdaレイヤーは関数間で共有できるコンポーネント(ライブラリ・依存関係・カスタムランタイム等)をまとめる仕組みです。レイヤーを更新するだけで参照する全関数にバージョン管理しながら反映でき、各関数のデプロイパッケージから依存関係を除外できるためサイズが大幅に削減されます。1関数あたり最大5レイヤーを参照でき、コールドスタート時に/opt以下に展開されます。
CAmazon EFSをLambdaにマウントしてライブラリをファイルシステムに保存する
Amazon EFSはVPCの設定・マウントターゲットの作成・追加コストが必要で、ライブラリ共有という用途にはLambdaレイヤーより複雑です。
DS3にライブラリをアップロードし、Lambda起動時に毎回 /tmp にダウンロードする
S3からの毎回ダウンロードはLambda起動のたびに300MBを/tmpへダウンロードするためコールドスタートレイテンシとデータ転送コストが大幅に増加し、要件の解決になりません。
解説
正解:
Lambdaレイヤーにライブラリをパッケージ化し、全関数から参照する
Lambdaレイヤーは関数間で共有できるコンポーネント(ライブラリ・依存関係・カスタムランタイム等)をまとめる仕組みです。レイヤーを更新するだけで参照する全関数にバージョン管理しながら反映でき、各関数のデプロイパッケージから依存関係を除外できるためサイズが大幅に削減されます。1関数あたり最大5レイヤーを参照でき、コールドスタート時に/opt以下に展開されます。
選択肢Aの全関数を1つに統合すると責務が混在してメンテナンス性が低下し、独立したテスト・個別デプロイの柔軟性も失われます。共有ライブラリ問題の根本的解決にもなりません。
選択肢CAmazon EFSはVPCの設定・マウントターゲットの作成・追加コストが必要で、ライブラリ共有という用途にはLambdaレイヤーより複雑です。
選択肢DのS3からの毎回ダウンロードはLambda起動のたびに300MBを/tmpへダウンロードするためコールドスタートレイテンシとデータ転送コストが大幅に増加し、要件の解決になりません。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →