AWS認定資格 WEB問題集&徹底解説
ソリューションアーキテクト – アソシエイト
AWSサービスの一つであるAWS Lambdaはどんな内容なのでしょうか?また、AWS認定資格のソリューションアーキテクト-アソシエイト(SAA)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います
1. サービス概要
AWS Lambda は、サーバーやOSを管理せずにコードを実行できるサーバーレスコンピューティングサービスです。 関数コードをアップロードするだけで、イベントをトリガーに自動実行され、インフラのプロビジョニング・パッチ・スケーリングはAWSが担います。 実行した分だけ課金(アイドル時はコスト発生なし)で、ミリ秒単位のリクエストから大量の並列実行まで対応します。
主なユースケースは、API Gateway/ALBと組み合わせたWebバックエンド、S3アップロード後のデータ変換、Kinesis/DynamoDB Streamsのリアルタイム処理、EventBridgeによるスケジュール実行、CloudFrontのエッジ処理(Lambda@Edge)などです。
2. 主な特徴と機能
2.1 呼び出しモデル(3種類)
- 同期(Synchronous): 呼び出し元がレスポンスを待つ。API Gateway、ALB、Cognito、SDK直接呼び出しなど。エラー時は呼び出し元がリトライを制御。
- 非同期(Asynchronous): S3イベント、SNS、EventBridgeなどがキューに積み、Lambdaが処理。2回まで自動リトライし、失敗時はDLQ(Dead Letter Queue)またはLambda Destinationsへ転送。
- ストリームベースポーリング(Event Source Mapping): SQS、Kinesis Data Streams、DynamoDB Streams、MSKなどをLambdaがポーリング。SQSはバッチ処理(最大10,000件)、Kinesisはシャード単位で並列処理。bisect-on-errorでエラーの切り分けが可能。
2.2 実行環境・コールドスタート
Lambda関数は軽量な実行環境(マイクロVM)で動作し、呼び出しのたびにInit(コールドスタート)が発生します(コード読み込み+初期化)。 同じ実行環境が再利用されるウォームスタートはInit不要で低遅延。コールドスタート軽減策としてJavaにはLambda SnapStart(スナップショットから高速起動)があります。
2.3 同時実行数
- デフォルト上限(アカウント/リージョン): 1,000(ソフトリミット。上限緩和申請可)。
- 予約済み同時実行数(Reserved Concurrency): 関数ごとに上限を設定。他の関数が使いすぎてスロットリングされるのを防ぎ、かつ自分の上限も守れる。0にすると関数を無効化できる。
- プロビジョニング済み同時実行数(Provisioned Concurrency): あらかじめ実行環境を起動しておきコールドスタートをゼロに。追加料金あり。Application Auto Scalingで自動調整可。
2.4 設定とリソース制限
- メモリ: 128MB〜10,240MB(1MB刻み)。CPUはメモリに比例して割り当て。
- タイムアウト: 最大15分(15分以上かかる処理はECS/Fargate/Batchへ)。
- /tmp ストレージ: 512MB〜10,240MB(一時ファイル用、実行環境存続中のみ保持)。永続化にはS3やEFSを使用。
- デプロイパッケージ: ZIPは圧縮50MB/展開250MB。コンテナイメージなら最大10GB(ECRに保存)。
2.5 Layers・バージョン・エイリアス
Lambda Layersで共通ライブラリや設定を複数関数で共有(最大5レイヤー)。 バージョンで関数の不変なスナップショットを管理し、エイリアス(prod/stagingなど)でトラフィックを重み付きルーティングしてカナリアデプロイが可能。
2.6 Lambda@Edge と CloudFront Functions
Lambda@EdgeはCloudFrontのエッジロケーションでLambdaを実行し、オリジン手前でリクエスト/レスポンスを加工できます(認証、URL書き換え、A/Bテスト等)。 より軽量な処理にはCloudFront Functions(超低レイテンシ、JavaScriptのみ)が適します。
3. アーキテクチャおよび技術要素
- イベントソース(API GW・S3・SQS等)がLambdaを呼び出す(同期/非同期/ポーリング)。
- Lambdaサービスが実行環境(マイクロVM)を割り当て、コードを初期化(Init=コールドスタート)。
- ハンドラー関数が実行され、必要なAWSリソース(DynamoDB・S3・RDS等)にIAM実行ロールの権限でアクセス。
- 実行完了後、実行環境は一定時間待機し次のリクエストで再利用(ウォームスタート)。
- 同時リクエスト増加時はLambdaが自動スケール(同時実行数上限まで)。超過分はスロットリング(429)。
- ログはCloudWatch Logsへ自動送信。X-Rayでトレーシング可能。
LambdaはAWSが管理するVPC(デフォルト)で動作しますが、プライベートリソース(RDS・ElastiCache等)にアクセスするには顧客VPCへのアタッチが必要です(Hyperplaneを使いENIを共有)。
4. セキュリティと認証・認可
- 実行ロール(Execution Role): Lambda関数に付与するIAMロール。AWSリソースへのアクセス権限はここで最小権限に絞る。
- リソースベースポリシー(関数ポリシー): 誰がLambdaを呼び出せるかを制御。S3やAPI Gatewayにクロスアカウント呼び出し許可を付与する際に使用。
- 環境変数の暗号化: KMSキーで暗号化。機密情報はSSM Parameter StoreやSecrets Managerを参照するのがベストプラクティス。
- VPC統合: プライベートサブネット配置でRDS・ElastiCache等のプライベートリソースへアクセス。インターネット接続が必要な場合はNAT Gatewayを経由。
- コードの署名: AWS Signerでデプロイパッケージの署名検証を強制可能。
5. 料金形態
- リクエスト数: 月100万リクエストまで無料。超過分は$0.20/100万リクエスト。
- 実行時間(GB-秒): 割り当てメモリ(GB) × 実行時間(秒) で算出。月400,000 GB-秒まで無料。超過分は$0.0000166667/GB-秒。ミリ秒単位での課金。
- プロビジョニング済み同時実行: 起動中の実行環境数と時間に応じた追加料金。コールドスタートレイテンシが許容できる場合はオフで十分。
- データ転送: アウトバウンド(インターネット向け)で課金。同一リージョン内のAWSサービス間は多くの場合無料。
6. よくあるアーキテクチャ・設計パターン
- サーバーレスAPI: API Gateway(REST/HTTP API)+Lambda+DynamoDBで、インフラ管理不要のRESTful APIを構築。
- イベント駆動ETL: S3アップロード→Lambda→データ変換→DynamoDB/RDS/Redshift。非同期で大量ファイルを並列処理。
- ストリーム処理: Kinesis Data Streams/DynamoDB StreamsをトリガーにLambdaがリアルタイム集計・通知。
- SQSによるデカップリング: SQS→Lambda(Event Source Mapping)でメッセージを非同期処理。エラー時はDLQへ。RDS Proxyでコネクション管理。
- Step Functions連携: 長時間・複雑なワークフローをStep Functionsでオーケストレーションし、各ステップをLambdaが処理。
- エッジ処理: Lambda@EdgeでCloudFrontのビューワーリクエスト時に認証・リダイレクト・A/Bテスト。
7. 設定・デプロイ手順(ハンズオン例)
- Lambdaコンソールで「関数の作成」。ランタイム(Python/Node.js等)・実行ロール(最小権限)を設定。
- 関数コードをインラインエディタ/ZIPアップロード/コンテナイメージで登録。
- メモリ(128MB〜10GB)・タイムアウト(最大15分)・環境変数を設定。
- トリガー(API Gateway・S3・SQS等)を追加し、イベントソースを関連付け。
- テストイベントで動作確認。CloudWatch Logsでログを確認、X-Rayでトレース分析。
- 必要に応じてプロビジョニング済み同時実行数を設定しコールドスタートを排除。
8. 試験で問われやすいポイント
8.1 呼び出しモデルの違い(最頻出)
- Q: API GatewayからLambdaを呼び出す場合のモデルは?
A: 同期。呼び出し元がレスポンスを待つ。エラー時は呼び出し元がハンドリング。 - Q: S3イベント通知でLambdaを呼び出す場合のモデルは?
A: 非同期。2回まで自動リトライ。失敗時はDLQ(SQS)またはDestinationsへ転送。 - Q: SQSからLambdaがメッセージを処理するモデルは?
A: Event Source Mapping(ポーリング)。LambdaがSQSをポーリングしバッチ処理。
8.2 コールドスタートと同時実行数
- Q: コールドスタートを完全になくすには?
A: プロビジョニング済み同時実行数を設定(追加料金あり)。Java向けにはLambda SnapStartも有効。 - Q: 特定の関数が使いすぎてアカウント全体がスロットリングされないようにするには?
A: 重要な関数に予約済み同時実行数を設定し、他の関数分を確保する。 - Q: デフォルトの同時実行上限は?
A: アカウント/リージョンで1,000(ソフトリミット、緩和申請可)。
8.3 タイムアウト・ストレージ・パッケージ制限
- Q: Lambdaの最大実行時間は?
A: 15分。それ以上かかる処理にはECS/Fargate/AWS Batchを使用。 - Q: Lambda内の一時ファイルはどこに置く?永続化するには?
A: 一時ファイルは/tmp(最大10GB)。ただし実行環境のライフタイムのみ保持。永続化にはS3やEFSを使用。 - Q: 大きなライブラリを含めたい場合は?
A: Layers(最大5つ)かコンテナイメージ(最大10GB)で対応。
8.4 セキュリティ・ネットワーク
- Q: LambdaからRDS(プライベートサブネット)にアクセスするには?
A: LambdaをVPCにアタッチし同じVPCのプライベートサブネット+SGを設定。大量接続にはRDS Proxyを併用。 - Q: VPC内LambdaからインターネットにアクセスするにはEIPで足りる?
A: LambdaにパブリックIPは割り当て不可。NAT Gateway経由でインターネットアクセス。 - Q: 機密情報を環境変数に安全に持たせるには?
A: KMSで暗号化するか、SSM Parameter Store / Secrets Managerから起動時に取得。
8.5 コスト最適化
- Q: Lambdaの料金を下げるには?
A: メモリを必要最小限に絞る(CPU比例)、実行時間を短縮(コードの効率化)、月100万リクエスト/400,000 GB-秒の無料枠を活用。 - Q: メモリを増やすとコストが下がることがある?
A: あり得る。メモリ増→CPUも増→処理が速く完了→GB-秒が減り結果的に安くなる場合がある。
8.6 類似・関連サービスとの比較
- Q: Lambda vs ECS/Fargate vs Batch の使い分けは?
A: イベント駆動・短命(〜15分)→Lambda、コンテナで長時間実行→ECS/Fargate、バッチ大量処理→AWS Batch。 - Q: Lambda@Edge vs CloudFront Functions の違いは?
A: Lambda@Edgeはより多機能(Node.js/Python、最大30秒)、CloudFront Functionsは超軽量(JavaScript、1ms以下)で単純なリクエスト操作向け。
8.7 バージョン・エイリアスとデプロイ
- Q: 本番環境へのカナリアデプロイをLambdaで実現するには?
A: エイリアスのトラフィック重み付け(例: v2に10%、v1に90%)でカナリアリリース。 - Q: ステージ間でコードを共有するには?
A: Layersで共通ライブラリを集約。
8.8 その他の頻出ポイント
- ステートレス: Lambdaは実行のたびに状態を持たない。状態保持にはDynamoDB/S3/ElastiCacheを使用。
- 非同期リトライ: S3/SNS等の非同期呼び出しは最大2回リトライ、失敗時DLQ/Destinations。
- 無料枠: 月100万リクエスト+400,000 GB-秒は常時無料。