AWS認定資格 WEB問題集&徹底解説

デベロッパー–アソシエイト

正解 D問題
要復習(もう一度解きたい問題) 1 2 3 4
合格に向けて、もっと深く学習する
豊富な問題と詳細なAWSサービス解説を、24時間無料でお試しいただけます
プレミアム会員機能を無料で試す ❯
問題文と選択肢
デベロッパーがアプリケーションをローカルでテストし、そのアプリケーションを AWS Lambda 関数にデプロイしました。デプロイパッケージサイズのクォータを超えないようにするため、デベロッパーはデプロイファイルに依存関係を含めませんでした。デベロッパーがアプリケーションをリモートでテストする場合、依存関係がないため Lambda 関数は実行されません。
この問題を解決するソリューションはどれですか。
  • Lambda コンソールエディタを使用してコードを更新し、不足している依存関係を含める。
  • 不足している依存関係を含む追加の .zip ファイルを作成する。その .zip ファイルを元の Lambda デプロイパッケージに含める。
  • Lambda 関数の環境変数に不足している依存関係へのリファレンスを追加する。
  • 不足している依存関係を含むレイヤーを作成する。Lambda 関数にレイヤーを添付する。
解説 頻出度★★★★★
この問題は、「デプロイパッケージのサイズクォータを超えずに × 依存関係(ライブラリ)を関数に届ける」という要件で、Lambda レイヤーを選べるかがポイント

A. Lambda コンソールエディタを使用してコードを更新し、不足している依存関係を含める。

Lambda のコンソールエディタ(内蔵エディタ)は小さなソースコードをその場で編集するためのもので、ライブラリ一式をアップロードする手段ではない。
そもそもデプロイパッケージが一定サイズを超えるとコンソール上での編集自体ができなくなる。
仮に依存関係を書き加えられたとしても、パッケージサイズのクォータを超えないという前提の制約は何も解決していない

B. 不足している依存関係を含む追加の .zip ファイルを作成する。その .zip ファイルを元の Lambda デプロイパッケージに含める。

依存関係を別の .zip にまとめても、それを元のデプロイパッケージの中に含めてしまえば合計サイズは変わらない(むしろ入れ子の .zip は実行時に展開されず、ランタイムからライブラリとして読み込めない)。
「クォータを超えないようにするため依存関係を外した」という前提に真っ向から反する対処であり、問題の根本を解決しない。

C. Lambda 関数の環境変数に不足している依存関係へのリファレンスを追加する。

環境変数はキーと値の文字列(設定値)を関数に渡す仕組みであり、ライブラリの実体を配布する機能はない。
「依存関係へのリファレンス(参照)」を文字列で書いたところで、実行環境にライブラリのファイルが存在しなければ import は失敗する。
設定値と実行に必要なコード資産を混同した選択肢。

正解

D. 不足している依存関係を含むレイヤーを作成する。Lambda 関数にレイヤーを添付する。

Lambda レイヤーは、ライブラリやカスタムランタイムなどの依存関係を関数のデプロイパッケージとは別の .zip として管理し、実行時に /opt 配下へ展開して読み込ませる仕組み。
コード本体とライブラリを分離できるためデプロイパッケージを小さく保て、同じレイヤーを複数の関数で共有してバージョン管理もできる。
「サイズクォータを超えずに依存関係を届ける」という本問の要件にそのまま合致する唯一の正解。

これだけ覚える(記憶フック)
Lambda の依存関係が重いならレイヤー。コード本体とライブラリを分離し、複数関数で共有できる。
正解への思考ルート 問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。
要件 判断ポイント
デプロイパッケージサイズのクォータを超えたくない コード本体と依存関係を別アーティファクトに分離できるのはレイヤーだけ。パッケージに同梱する案は合計サイズが変わらない
→選択肢(B)を消す
依存関係(ライブラリ)が実行環境に存在しないため関数が失敗する 必要なのはライブラリの実体を実行環境に配置すること。文字列の設定値では解決しない
→選択肢(C)を消す
すでにローカルではテスト済みで、コードそのものは正しい コンソールエディタでコードを直す話ではない。不足しているのは依存関係の配置方法
→選択肢(A)を消す
依存関係をコード本体と分けて管理・共有したい Lambda レイヤーなら実行時に /opt へ展開され、複数関数で再利用・バージョン管理もできる
→選択肢(D)が正解
ひっかけポイント
  • 選択肢 B の「追加の .zip を元のデプロイパッケージに含める」は一見それらしいが、結局 1 つのパッケージに全部入る=サイズは減らない。しかも入れ子の .zip はランタイムに展開されない
  • 環境変数は設定値(文字列)の受け渡し専用。「依存関係へのリファレンス」という言い回しに惑わされない
  • コンソールエディタはパッケージが大きいと編集すらできなくなる。サイズ制約が論点の問題で「コンソールで直す」は答えにならない
  • レイヤーにもサイズ上限(関数コードとレイヤーの解凍後合計 250 MB)がある点は要注意。桁違いに大きい依存関係ならコンテナイメージ(最大 10 GB)が正解になる
出題バリエーション 同じ知識が本番では条件を変えて出題されます。
問題文がこう変わったら 正解はこう変わる
「依存関係が数 GB あり、レイヤーの上限も超える コンテナイメージとして Lambda をデプロイ(最大 10 GB)が正解軸に。
複数の Lambda 関数で共通のライブラリを使い回したい」 同じくレイヤーが正解(共有・バージョン管理が本来の狙い)。
「デプロイパッケージが 50 MB(zip)を超えるため直接アップロードできない Amazon S3 にアップロードして S3 の場所を指定してデプロイする、が正解軸に。
DB のパスワードなどの設定値を関数に渡したい」 環境変数(機密なら Secrets Manager / SSM パラメータストア参照)が正解になる。
関連サービスの解説 AWS Lambda
+ 質問 / コメント
解答・解説に疑問がある場合や、よりよい解説がある場合など、お気軽にコメントください。ただし、短文コメントは表示されません。また、中傷などコメントの内容によっては、会員機能を停止させて頂きます。教え学び合える場になれば嬉しいです。(コメント投稿にはログインが必要です)
正答率 70%
No.7 解説
デベロッパーがアプリケーションをローカルでテストし、そのアプリケーションを AWS Lambda 関数にデプロイしました。デプロイパッケージサイズのクォータを超えないようにするため、デベロッパーはデプロイファイルに依存関係を含めませんでした。デベロッパーがアプリケーションをリモートでテストする場合、依存関係がないため Lambda 関数は実行されません。
この問題を解決するソリューションはどれですか。
  • Lambda コンソールエディタを使用してコードを更新し、不足している依存関係を含める。
  • 不足している依存関係を含む追加の .zip ファイルを作成する。その .zip ファイルを元の Lambda デプロイパッケージに含める。
  • Lambda 関数の環境変数に不足している依存関係へのリファレンスを追加する。
  • 不足している依存関係を含むレイヤーを作成する。Lambda 関数にレイヤーを添付する。

(会員限定)当問題の評価をお願いします。改善に活用します。