AWS認定資格 WEB問題集&徹底解説
デベロッパー–アソシエイト
問題文と選択肢
実行時に pandas をインポートできるようにするには、デプロイパッケージをどのように作成すればよいですか。
- デプロイパッケージに pandas を記載した requirements.txt ファイルを含めておけば、初回実行時に Lambda がそれを読み取り、必要なライブラリを自動的にインストールする。
- pandas のライブラリ一式を Amazon S3 にオブジェクトとして保存し、そのオブジェクトの URI を関数の環境変数に設定すれば、実行時に Lambda が自動的にダウンロードしてライブラリパスに追加する。
- ローカル環境で pandas をインストールし、インストールされたライブラリ一式と関数コードを同じフォルダにまとめたうえで、1つの zip ファイルとして圧縮してアップロードする。
- 関数コードだけを zip 化したファイルと、pandas のライブラリ一式だけを zip 化したファイルを別々に作成し、コンソールから2つのパッケージとして同じ関数にアップロードする。
A. デプロイパッケージに pandas を記載した requirements.txt ファイルを含めておけば、初回実行時に Lambda がそれを読み取り、必要なライブラリを自動的にインストールする。
Lambda の .zip デプロイでは、実行環境が requirements.txt を読み取って依存関係を解決することはない。requirements.txt を同梱しても、単なるテキストファイルとして関数と一緒に配置されるだけで、pandas はインストールされない。
依存関係の解決はデプロイパッケージを作る側(ビルド時)の責任であり、AWS SAM や CDK、コンテナイメージのビルドなど「パッケージを組み立てる工程」で pip を走らせる必要がある。
実行時には ImportError(No module named 'pandas') で失敗するため、要件を満たさない。
B. pandas のライブラリ一式を Amazon S3 にオブジェクトとして保存し、そのオブジェクトの URI を関数の環境変数に設定すれば、実行時に Lambda が自動的にダウンロードしてライブラリパスに追加する。
Lambda に、環境変数で示された S3 オブジェクトを実行時に自動ダウンロードしてライブラリパスへ組み込む機能は存在しない。
Amazon S3 が Lambda のデプロイで登場するのは、デプロイパッケージ(zip)そのものの受け渡しとしてであり、パッケージが 50 MB を超えてコンソールから直接アップロードできない場合に S3 の URI をコードソースとして指定する、という使い方になる。実行時に環境変数を見てマウントするわけではない。
関数コード内で自前で S3 からダウンロードして /tmp へ展開し sys.path に追加することは理屈上は可能だが、コールドスタートのたびに取得が発生し、本問のように「自動的に」行われるものでもない。
C. ローカル環境で pandas をインストールし、インストールされたライブラリ一式と関数コードを同じフォルダにまとめたうえで、1つの zip ファイルとして圧縮してアップロードする。
これが Lambda の .zip デプロイパッケージの標準的な作り方。pip install --target ./package pandas のようにライブラリを専用フォルダへインストールし、その中身と関数コード(lambda_function.py)を同じ zip のルートに並べて圧縮する。
ハンドラーコードと依存関係は必ず .zip のルートに置く必要があり、サブディレクトリのままだと Lambda は関数を実行できない。
圧縮後 50 MB 未満であればコンソールから直接アップロードでき、本問の「コンソールから .zip をアップロードする」前提にも合致する。なお pandas や NumPy のように C 拡張を含むライブラリは、Lambda の実行環境(Amazon Linux)と互換性のある manylinux ホイールを取得する必要がある点に注意。
D. 関数コードだけを zip 化したファイルと、pandas のライブラリ一式だけを zip 化したファイルを別々に作成し、コンソールから2つのパッケージとして同じ関数にアップロードする。
1 つの Lambda 関数に紐づけられるデプロイパッケージは常に 1 つだけで、2 つ目をアップロードすれば単に上書きされる。関数コードとライブラリを別々の zip として「同じ関数に 2 つ」アップロードすることはできない。
ライブラリだけを分離したい場合の正しい手段は Lambda レイヤーで、レイヤーは関数のデプロイパッケージとは別のリソースとして発行し、関数にアタッチすると /opt/python へ展開されて import できるようになる。
本問はコンソールから .zip をアップロードする前提であり、レイヤーを使うとしても「2 つのデプロイパッケージ」という手順にはならないため不適。
Lambda は pip を実行しない。外部ライブラリは自分で同梱(zip かレイヤー)が原則。
正解への思考ルート
問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。| 要件 | 判断ポイント |
|---|---|
| pandas は Lambda ランタイムに標準では含まれていない | 依存ライブラリはデプロイパッケージを作る時点で解決する。Lambda が実行時に pip を走らせることはない →選択肢(A)を消す |
| 実行時に import できる状態にする | ライブラリ一式と関数コードを同じ zip のルートに置けば、そのまま import できる →選択肢(C)が正解 |
| Amazon S3 の使いどころを取り違えない | S3 はデプロイパッケージ(zip)自体の置き場所(50 MB 超のとき必須)。環境変数で示したライブラリを実行時に自動取得する仕組みはない →選択肢(B)を消す |
| コンソールから直接 .zip をアップロードする | 1 つの関数に紐づくデプロイパッケージは 1 つだけ。ライブラリを分離するならレイヤーという別リソースになる →選択肢(D)を消す |
| pandas はネイティブコード(C 拡張)を含む | manylinux ホイール(--platform manylinux2014_x86_64 など)で Lambda の実行環境・アーキテクチャに合わせて取得する →選択肢(C)が正解 |
ひっかけポイント
- 「requirements.txt を入れておけば勝手に入る」は Elastic Beanstalk や SAM/コンテナのビルド工程の話。Lambda の .zip デプロイでは、同梱しても単なるテキストファイルとして置かれるだけで何も起きない
- 「S3 に置く」は Lambda と相性が良さそうに見えるが、S3 が担うのは zip そのものの受け渡し(50 MB 超で必須)。ライブラリを個別に置いて実行時にマウントする機能は存在しない
- 選択肢 D は Lambda レイヤーの記憶を刺激するひっかけ。レイヤーは「2 つ目のデプロイパッケージ」ではなく、別リソースとして発行して関数にアタッチし /opt/python へ展開される
- zip の作り方も頻出のミス。package フォルダごと固めて package/pandas/... という階層になっていると import できない。中身を .zip のルートへ直接展開する
出題バリエーション
同じ知識が本番では条件を変えて出題されます。| 問題文がこう変わったら | 正解はこう変わる |
|---|---|
| 「同じライブラリを複数の関数で共有したい」 | Lambda レイヤーにまとめてアタッチするのが正解軸に(/opt/python へ展開・関数あたり最大 5 レイヤー)。 |
| 「デプロイパッケージが50 MB を超えてコンソールからアップロードできない」 | S3 にアップロードし、その URI をコードソースとして指定してデプロイするのが正解に(環境変数ではない)。 |
| 「依存関係が巨大で解凍後 250 MB を超える」 | .zip の上限を超えるため、コンテナイメージ(最大 10 GB)でのデプロイが正解に浮上。 |
| 「関数を arm64(Graviton) で動かす」 | manylinux2014_aarch64 のホイールでビルドし直す必要。x86_64 用のままだと実行時に import エラー。 |
| 「デプロイ後に Unable to import module 'lambda_function' が出る」 | zip のルート構成、またはハンドラー設定(ファイル名.関数名)の誤りが論点に変わる。 |
リファレンス
この問題を解くために必要な知識を扱う公式ドキュメントです。| 知識項目 | 公式ドキュメント |
|---|---|
| Python Lambda 関数の .zip デプロイパッケージ作成(依存ライブラリの同梱と manylinux ホイール) | .zip ファイルアーカイブで Python Lambda 関数をデプロイする - AWS Lambda |
実行時に pandas をインポートできるようにするには、デプロイパッケージをどのように作成すればよいですか。
- デプロイパッケージに pandas を記載した requirements.txt ファイルを含めておけば、初回実行時に Lambda がそれを読み取り、必要なライブラリを自動的にインストールする。
- pandas のライブラリ一式を Amazon S3 にオブジェクトとして保存し、そのオブジェクトの URI を関数の環境変数に設定すれば、実行時に Lambda が自動的にダウンロードしてライブラリパスに追加する。
- ローカル環境で pandas をインストールし、インストールされたライブラリ一式と関数コードを同じフォルダにまとめたうえで、1つの zip ファイルとして圧縮してアップロードする。
- 関数コードだけを zip 化したファイルと、pandas のライブラリ一式だけを zip 化したファイルを別々に作成し、コンソールから2つのパッケージとして同じ関数にアップロードする。
次の問題前の問題
会員機能
お役立ち情報
- プレミアム会員のご紹介
- 「徹底解説」のご紹介
- 「模擬試験」のご紹介
- 収録問題と試験ガイドの対応
- 会員機能のご紹介
- おすすめの勉強方法
- 試験概要
- AWSサービスの解説
- AWS認定資格の種類・対象者・受験料・合格ライン
- スマホのホーム画面に登録する方法
姉妹サイト
- CLF:AWS 認定クラウドプラクティショナー
- SAA:AWS 認定ソリューションアーキテクト-アソシエイト
- AIF:AWS 認定AIプラクティショナー
- SOA:AWS 認定CloudOpsエンジニア-アソシエイト
- DVA:AWS 認定デベロッパー-アソシエイト
- DEA:AWS 認定データエンジニア-アソシエイト
- MLA:AWS 認定機械学習エンジニア-アソシエイト
- SAP:AWS 認定ソリューションアーキテクト-プロフェッショナル
- DOP:AWS 認定DevOpsエンジニア-プロフェッショナル
- AIP:AWS 認定生成AIデベロッパー-プロフェッショナル
- SCS:AWS 認定セキュリティ-専門知識
- AZ-900:Microsoft Azure Fundamentals
- AI-900:Microsoft Azure AI Fundamentals