Q12 — AWS SAP-C02 第2章
第 12/75 問 | ← 第2章
Q162. ある企業が、Amazon API Gateway および AWS Lambda を使用して新しいサーバーレス API を開発しています。同社は、Lambda 関数を API Gateway と統合し、複数の共有ライブラリおよびカスタムクラスを利用できるようにしています。ソリューションアーキテクトは、このソリューションのデプロイを簡素化し、コードの再利用性を最適化する必要があります。 これらの要件を満たすソリューションはどれですか?
- A. 共有ライブラリおよびカスタムクラスを Docker イメージにデプロイします。そのイメージを S3 バケットに保存します。Docker イメージをソースとする Lambda レイヤーを作成します。API の Lambda 関数は ZIP パッケージとしてデプロイし、そのパッケージが Lambda レイヤーを利用するよう設定します。
- B. 共有ライブラリおよびカスタムクラスを Docker イメージにデプロイします。そのイメージを Amazon Elastic Container Registry(Amazon ECR)にアップロードします。Docker イメージをソースとする Lambda レイヤーを作成します。API の Lambda 関数は ZIP パッケージとしてデプロイし、そのパッケージが Lambda レイヤーを利用するよう設定します。
- C. 共有ライブラリおよびカスタムクラスを、AWS Fargate 起動タイプを使用する Amazon Elastic Container Service(Amazon ECS)上の Docker コンテナにデプロイします。API の Lambda 関数は ZIP パッケージとしてデプロイし、そのパッケージがデプロイ済みのコンテナを Lambda レイヤーとして利用するよう設定します。
- D. 共有ライブラリ、カスタムクラス、および API の Lambda 関数のコードを Docker イメージにデプロイします。そのイメージを Amazon Elastic Container Registry(Amazon ECR)にアップロードします。API の Lambda 関数が、その Docker イメージをデプロイパッケージとして使用するよう設定します。 ✓
正解: D. 共有ライブラリ、カスタムクラス、および API の Lambda 関数のコードを Docker イメージにデプロイします。そのイメージを Amazon Elastic Container Registry(Amazon ECR)にアップロードします。API の Lambda 関数が、その Docker イメージをデプロイパッケージとして使用するよう設定します。
解説
Lambda レイヤーは、共通のコード(ライブラリ、カスタムクラスなど)を複数の関数で再利用するための仕組みであり、ZIP パッケージ形式でのデプロイをサポートします。ただし、Lambda レイヤーは Docker イメージを直接ソースとして受け付けません。また、S3 に保存した Docker イメージや Amazon ECS コンテナを Lambda レイヤーとして使用することは技術的に不可能です(オプション A、C は不正)。オプション B は、Docker イメージを ECR にアップロードする点は正しいものの、Lambda レイヤーは ECR イメージをソースにできません(レイヤーは ZIP 形式または Amazon S3 からの ZIP アーカイブのみをサポート)。したがって、B も誤りです。一方、オプション D は、Lambda のコンテナイメージ対応機能(2020年12月以降提供)を正しく活用しており、共有ライブラリ・カスタムクラス・関数コードをすべて含む Docker イメージを ECR にアップロードし、Lambda 関数のデプロイパッケージとして直接使用する方法です。これは、コード再利用とデプロイ簡素化の両方を実現する公式にサポートされたベストプラクティスです。