- Authors

- Name
- Youngju Kim
- @fjvbn20031
試験概要
| 項目 | 内容 |
|---|---|
| 試験コード | DVA-C02 |
| 試験時間 | 130分 |
| 問題数 | 65問 |
| 合格基準 | 720点 / 1000点 |
| 出題形式 | 単一選択、複数選択 |
ドメイン別出題割合
| ドメイン | 割合 |
|---|---|
| Domain 1: AWSサービスを使った開発 | 32% |
| Domain 2: セキュリティ | 26% |
| Domain 3: デプロイ | 24% |
| Domain 4: トラブルシューティングと最適化 | 18% |
主要サービスのポイント整理
Lambda のポイント
- 呼び出しタイプ: 同期(RequestResponse)、非同期(Event)、ポーリング型
- 同時実行数: Reserved Concurrency(上限設定)、Provisioned Concurrency(コールドスタート防止)
- コールドスタート: VPC Lambda で遅延大、Provisioned Concurrency で解消
- レイヤー: 共通ライブラリの共有、最大5レイヤー
DynamoDB のポイント
- パーティションキー: 高カーディナリティを選択、ホットパーティション回避
- GSI: 異なるパーティション/ソートキーでクエリ、結果整合性読み取りのみ
- LSI: 同じパーティションキー、異なるソートキー、テーブル作成時のみ追加可能
- DAX: マイクロ秒単位の応答、結果整合性読み取りのみキャッシュ
API Gateway のポイント
- REST API: 全機能、WAFサポート、キャッシュサポート
- HTTP API: 低コスト、OIDC/JWT認証、Lambdaプロキシのみ
- WebSocket API: 双方向リアルタイム通信
Kinesis のポイント
- シャード計算: 書き込み = max(入力MB/s, レコード数/1000) / シャードあたり1MB/sまたは1000レコード/s
- Enhanced Fan-out: シャードあたり2MB/s読み取り、プッシュ型
- Data Firehose: 自動スケーリング、S3/Redshift/Elasticsearchへ直接配信
模擬試験 65問
Domain 1: AWSサービスを使った開発
Q1. Lambda関数がVPC内にデプロイされています。関数の実行時にコールドスタートが非常に長く発生しています。これを解決する最も適切な方法は何ですか?
A) Lambda関数のメモリを増やす B) Provisioned Concurrencyを設定する C) Lambdaレイヤーを使用する D) 環境変数の数を減らす
答え: B
解説: VPC内のLambdaはENI(Elastic Network Interface)の作成によりコールドスタートが長くなります。Provisioned Concurrencyを設定すると、事前に初期化された実行環境が維持されコールドスタートを排除できます。メモリを増やすと実行速度は上がりますが、コールドスタート自体は解消されません。
Q2. DynamoDBテーブルで特定ユーザーの注文履歴を最新の日付順に取得する必要があります。テーブルのパーティションキーはuserIdで、ソートキーはorderIdです。日付ベースのソートを効率的にサポートするには?
A) userId(パーティションキー)とorderDate(ソートキー)で新しいGSIを作成する B) userId(パーティションキー)とorderDate(ソートキー)でLSIを追加する C) Scanですべてのアイテムを取得してアプリケーション側でソートする D) DynamoDB Streamsを有効化する
答え: A
解説: LSIはテーブル作成時にしか定義できないため、既存テーブルにはGSIを使用する必要があります。userIdをパーティションキー、orderDateをソートキーとするGSIを作成すると、特定ユーザーの注文を日付順に効率的に取得できます。Scanは非効率で大規模データではコストが高くなります。
Q3. 以下のコードでSQSメッセージを処理するLambda関数は、どの呼び出しタイプを使いますか?
def handler(event, context):
for record in event['Records']:
body = record['body']
process_message(body)
return {'statusCode': 200}
A) 同期(Synchronous)呼び出し B) 非同期(Asynchronous)呼び出し C) ポーリング型(Poll-based)呼び出し D) ストリーム型呼び出し
答え: C
解説: SQSトリガーを使用するLambdaはポーリング型(イベントソースマッピング)の呼び出し方式を使います。Lambdaサービスが自動的にSQSキューをポーリングし、メッセージをバッチとしてevent['Records']に渡します。Kinesis Data StreamsやDynamoDB Streamsも同様のポーリング型です。
Q4. API Gateway REST APIでキャッシュが有効なエンドポイントがあります。クライアントがキャッシュをバイパスして常に新鮮なデータを受け取るには?
A) リクエストにCache-Control: no-cacheヘッダーを含める B) X-Amz-Cache-Control: invalidateヘッダーを使用する C) API GatewayステージのキャッシュをOFFにする D) Lambda関数からキャッシュ無効化APIを呼び出す
答え: A
解説: API Gatewayのキャッシュが有効な場合、クライアントはHTTPリクエストにCache-Control: no-cacheヘッダーを含めることでキャッシュをバイパスできます。ただし、この機能を許可するにはAPI Gatewayの設定で「Require authorization to invalidate cache」を適切に構成する必要があります。ステージキャッシュを無効化するとすべてのリクエストに影響します。
Q5. Kinesis Data Streamsで毎秒5,000レコードを処理する必要があり、各レコードの平均サイズは2KBです。必要な最小シャード数は?
A) 5 B) 8 C) 10 D) 15
答え: C
解説: シャードあたりの容量: 毎秒1,000レコードまたは1MB/s(書き込み基準)。
レコード数基準: 5,000 / 1,000 = 5シャード データサイズ基準: (5,000 × 2KB) / 1,024KB ≈ 9.77MB/s → 10シャード
より大きい値の10シャードが必要です。2つの制約のうち大きい方を選択する必要があります。
Q6. SQS FIFOキューを使用するアプリケーションで、同じメッセージが重複処理されるのを防ぐには?
A) VisibilityTimeoutを増やす B) MessageDeduplicationIdを設定する C) MessageGroupIdを一意に設定する D) デッドレターキューを構成する
答え: B
解説: SQS FIFOキューはMessageDeduplicationIdを使用して、5分以内に同じIDで送信されたメッセージを重複排除します。ContentBasedDeduplicationを有効にすると、メッセージ本文のSHA-256ハッシュが自動的に使用されます。MessageGroupIdは順序保証のためのものです。
Q7. S3バケットへの大容量ファイル(5GB)を確実にアップロードする最善の方法は?
A) 単一のPUTリクエストでアップロードする B) Multipart Upload APIを使用する C) S3 Transfer Accelerationを使用する D) Pre-signed URLを生成する
答え: B
解説: S3の単一PUTリクエストは最大5GBまでサポートしますが、100MB以上のファイルにはMultipart Uploadが推奨されます。ファイルを複数部分に分割して並列アップロードし、失敗時はその部分のみ再試行できます。S3 Transfer AccelerationはEdge Locationを通じて速度を向上させますが、大容量アップロードの信頼性とは別の話です。
Q8. DynamoDB DAX(DynamoDB Accelerator)がキャッシュしない読み取り操作は?
A) GetItem B) Query C) Scan D) TransactGetItems
答え: D
解説: DAXは結果整合性読み取り(GetItem、Query、Scan)をキャッシュします。TransactGetItemsはトランザクション操作として強整合性読み取りを使用するため、DAXはキャッシュせずDynamoDBに直接リクエストを転送します。強整合性読み取り(ConsistentRead=True)もDAXキャッシュをバイパスします。
Q9. Lambda関数でデータベース接続をハンドラー関数の外で初期化する理由は?
A) セキュリティを強化するため B) 実行コンテキストの再利用でパフォーマンスを最適化するため C) メモリ使用量を減らすため D) タイムアウトを防ぐため
答え: B
解説: Lambdaの実行環境は再利用される場合があります(ウォームスタート)。ハンドラー外部で初期化されたコード(データベース接続、SDKクライアントなど)は、コンテナが再利用される際に再実行されないため、パフォーマンスが向上します。これを実行コンテキストの再利用(Execution Context Reuse)と呼びます。
Q10. API Gateway WebSocket APIとREST APIの違いについて正しいものは?
A) WebSocket APIはサーバーレスをサポートしない B) WebSocket APIはクライアントとサーバー間の双方向通信をサポートする C) REST APIはリアルタイム通知により適している D) WebSocket APIはキャッシュをサポートする
答え: B
解説: WebSocket APIはクライアントとサーバー間の持続的な接続を維持し、双方向リアルタイム通信をサポートします。チャットアプリ、リアルタイムダッシュボード、ゲームなどに適しています。REST APIはリクエスト/レスポンスパターンで単方向です。WebSocket APIもLambda関数をバックエンドとして使用できます。
Q11. DynamoDBのGSIとLSIの違いについて正しいものは?
A) GSIはテーブル作成後に追加不可、LSIは追加可能 B) LSIはテーブル作成時にのみ追加可能、GSIは後から追加可能 C) GSIは同じパーティションキーを使用する必要がある D) LSIはテーブル全体のサイズが10GBに制限される
答え: B
解説: LSI(ローカルセカンダリインデックス)はテーブル作成時にしか定義できず、後から追加や削除はできません。GSI(グローバルセカンダリインデックス)はテーブル作成後でもいつでも追加・削除できます。LSIは基本テーブルと同じパーティションキーを使用しますが、異なるソートキーを使用します。
Q12. S3 Pre-signed URLの主な用途として最も適切なものは?
A) S3バケットをパブリックに公開する B) 認証なしで特定のS3オブジェクトへの一時的なアクセスを許可する C) S3バケットポリシーをバイパスする D) S3オブジェクトを自動的に暗号化する
答え: B
解説: Pre-signed URLは署名されたURLで、特定のS3オブジェクトへの一定時間のアクセスをAWS認証情報なしで許可します。ファイルダウンロードリンクを一時的に共有したり、クライアントが直接S3にファイルをアップロード(PUT)したりする場合に使用します。バケットをパブリックにする必要はありません。
Q13. SQSメッセージのVisibilityTimeoutを短く設定しすぎると何の問題が発生しますか?
A) メッセージがデッドレターキューに移動する B) 同じメッセージが複数のコンシューマーに配信される可能性がある C) メッセージが永久に削除される D) キューの容量が超過する
答え: B
解説: VisibilityTimeoutは、メッセージがコンシューマーに配信された後、他のコンシューマーには見えなくなる時間です。短すぎると、最初のコンシューマーが処理を完了する前にタイムアウトが切れ、同じメッセージが他のコンシューマーにも配信される可能性があります。これは重複処理を引き起こします。
Q14. Lambda関数のReserved Concurrencyを0に設定すると何が起こりますか?
A) 無制限の同時実行が許可される B) 関数の呼び出しが完全にブロックされる C) コールドスタートが防止される D) 自動スケーリングが有効化される
答え: B
解説: Reserved Concurrencyを0に設定すると、その関数への呼び出しはすべてスロットリングエラーになります。これにより関数を一時的に無効化したり、他の関数のための同時実行数を確保したりできます。関数を再有効化するには、Reserved Concurrencyを削除するか、0より大きい値に設定します。
Q15. Kinesis Data FirehoseがKinesis Data Streamsと異なる主な特徴は?
A) Firehoseは手動のシャード管理が必要 B) Firehoseは自動スケーリングしてデータを宛先に直接配信する C) Firehoseはリアルタイム処理により適している D) Firehoseはコンシューマーアプリケーションが必要
答え: B
解説: Kinesis Data Firehoseは完全マネージド型サービスで自動スケーリングをサポートします。S3、Redshift、OpenSearch Service、Splunkにデータを自動配信します。Data Streamsは手動シャード管理とコンシューマーアプリが必要です。Firehoseはバッファリング(最低60秒または1MB)により、リアルタイムではなく準リアルタイムです。
Domain 2: セキュリティ
Q16. Cognito User PoolとIdentity Poolの違いについて正しいものは?
A) User PoolはAWSサービスへのアクセス権を提供し、Identity Poolはユーザー認証を担当する B) User Poolはユーザー認証とユーザーディレクトリを提供し、Identity PoolはAWS認証情報を提供する C) Identity Poolはソーシャルログインをサポートしない D) User PoolとIdentity Poolは同じ機能を持つ
答え: B
解説: Cognito User Poolはユーザー登録、ログイン、MFAなどのユーザー認証機能とユーザーディレクトリを提供し、JWTトークン(IDトークン、アクセストークン、リフレッシュトークン)を発行します。Identity Poolは認証済みユーザー(User Pool、Google、Facebookなど)に一時的なAWS認証情報(IAMロール)を提供してAWSサービスへの直接アクセスを可能にします。
Q17. KMSのエンベロープ暗号化でデータキー(Data Key)はどのように使用されますか?
A) データキーはKMSに保存され、CMKで暗号化される B) データキーで実際のデータを暗号化し、データキー自体はCMKで暗号化されて保存される C) CMKがデータを直接暗号化する D) データキーは常に平文で保存される
答え: B
解説: エンベロープ暗号化では、(1) KMSがデータキー(DEK)を生成し、(2) データキーで実際のデータを暗号化し、(3) データキー自体をCMK(Customer Master Key)で暗号化します。暗号化されたデータキーは暗号化されたデータとともに保存されます。CMKはKMS外部には出ません。
Q18. IAMのリソースベースポリシーとアイデンティティベースポリシーの違いは?
A) リソースベースポリシーはEC2にのみ付与できる B) アイデンティティベースポリシーはPrincipalを指定し、リソースベースポリシーはIAMエンティティに付与される C) リソースベースポリシーはPrincipalを指定し、アイデンティティベースポリシーはIAMエンティティに付与される D) 両ポリシータイプは同一である
答え: C
解説: リソースベースポリシー(S3バケットポリシー、Lambdaリソースポリシーなど)はリソースに直接付与され、Principal(誰がアクセスできるか)を明示します。アイデンティティベースポリシー(IAMユーザー/ロール/グループポリシー)はIAMエンティティに付与され、Principalを指定せずに何ができるかを定義します。
Q19. AWS Secrets ManagerとSSM Parameter Storeの違いについて正しいものは?
A) Parameter Storeは自動ローテーションをサポートするが、Secrets Managerはサポートしない B) Secrets Managerはシークレットの自動ローテーションとクロスアカウント共有をサポートし、追加コストが発生する C) 両者は同じ機能を提供する D) Parameter Storeは暗号化をサポートしない
答え: B
解説: Secrets Managerはデータベースパスワードなどの自動ローテーション、クロスアカウントアクセス、シークレットレプリケーションをサポートし、シークレットごとに月額料金が発生します。Parameter StoreはFree(Standard)または低コスト(Advanced)で動作し、自動ローテーション機能はありません(Lambdaによるカスタム実装は可能)。
Q20. STS AssumeRole使用時のExternalIdの役割は?
A) ロールの最大セッション時間を設定する B) 混乱した代理人(Confused Deputy)攻撃を防ぐ C) MFA認証を有効化する D) クロスリージョンアクセスを許可する
答え: B
解説: ExternalIdは混乱した代理人(Confused Deputy)問題を防ぎます。サードパーティサービスが顧客Aのロールを引き受ける際、悪意ある顧客Bが顧客AのARNを使って自分の環境から顧客Aのデータにアクセスしようとするのを防ぎます。ExternalIdは信頼ポリシーの条件として設定され、正しいExternalIdなしにはロールを引き受けられません。
Q21. Lambda関数で環境変数を暗号化する際に推奨される方法は?
A) 環境変数をBase64エンコードする B) KMS CMKを使って環境変数を暗号化し、実行時に復号化する C) 環境変数をコードに直接ハードコードする D) S3に保存して実行時に読み込む
答え: B
解説: Lambda環境変数はデフォルトでAWS管理キーで暗号化されます。より強固なセキュリティのために顧客管理CMKを使用できます。機密情報(APIキー、パスワード)はKMSで暗号化してSDKで実行時に復号化するか、Secrets Manager/Parameter Storeに保存して実行時に動的に取得する方法が推奨されます。
Q22. Cognito JWT IDトークンに含まれるクレームは?
A) AWS IAMポリシー B) ユーザー名、メール、ユーザーグループ情報 C) AWSの一時的な認証情報 D) S3バケットへのアクセス権限
答え: B
解説: Cognito User PoolのIDトークン(JWT)にはユーザー名(sub)、メール、電話番号、Cognitoユーザーグループ(cognito:groups)、カスタム属性などのクレームが含まれます。アクセストークンにはAPIアクセス用のOAuth 2.0スコープが含まれます。AWSの一時的な認証情報はIDトークンをIdentity Poolで交換して取得します。
Q23. S3サーバーサイド暗号化(SSE)オプションの中で、顧客が直接暗号化キーを提供する方式は?
A) SSE-S3 B) SSE-KMS C) SSE-C D) CSE(クライアントサイド暗号化)
答え: C
解説: SSE-C(顧客提供キーによるサーバーサイド暗号化)は、顧客がHTTPSリクエストに暗号化キーを直接提供します。AWSはキーを保存せず、暗号化/復号化にのみ使用します。SSE-S3はAWS管理キー、SSE-KMSはKMS管理キーを使用します。CSEはアップロード前にクライアント側で暗号化します。
Q24. API GatewayのLambdaオーソライザー(Lambda Authorizer)の2種類は?
A) ヘッダーオーソライザー、ボディオーソライザー B) TOKENオーソライザー、REQUESTオーソライザー C) JWTオーソライザー、APIキーオーソライザー D) IAMオーソライザー、Cognitoオーソライザー
答え: B
解説: Lambdaオーソライザーには2種類あります。TOKEN型はBearerトークン(JWT、OAuth)をAuthorizationヘッダーから抽出して検証します。REQUEST型はリクエストヘッダー、クエリパラメータ、ステージ変数など全体のリクエストコンテキストを使って認証を行います。両タイプともIAMポリシーを返します。
Q25. KMSデータキーキャッシング(Data Key Caching)を使用する理由は?
A) KMS APIの呼び出し回数とコストを削減するため B) 暗号化強度を高めるため C) キーの自動ローテーションを有効化するため D) CMKを作成するため
答え: A
解説: 暗号化操作のたびにKMSに新しいデータキーをリクエストするとAPI呼び出しが増加し、コストが上昇して遅延が増えます。データキーキャッシングを使うとローカルにキャッシュされたデータキーを再利用してKMS呼び出しを削減できます。AWS Encryption SDKが提供する機能です。ただし、キーを長く再使用するほどセキュリティリスクが高まります。
Domain 3: デプロイ
Q26. AWS CodeDeployのBlue/Greenデプロイメントの主なメリットは?
A) サーバーコストが半分になる B) デプロイ失敗時に即座にロールバックできる C) ビルド時間が短縮される D) テスト環境が不要になる
答え: B
解説: Blue/Greenデプロイメントは現在の環境(Blue)と同一の新環境(Green)を作成して新バージョンをデプロイします。トラフィックをGreenに切り替え、問題が発生した場合は即座にBlueに戻せます。これによりダウンタイムなしのデプロイと迅速なロールバックが可能になります。ただし、2つの環境を同時に実行するため一時的にコストが増加します。
Q27. AWS SAMテンプレートのAWS::Serverless::FunctionがCloudFormationリソースに変換される内容は?
A) AWS::Lambda::Functionのみ B) AWS::Lambda::Function、AWS::IAM::Role、AWS::Lambda::EventSourceMapping C) AWS::Lambda::Function、AWS::EC2::Instance D) AWS::Serverless::Functionは変換されない
答え: B
解説: SAMテンプレートはCloudFormationマクロで変換されます。AWS::Serverless::FunctionはLambda関数(AWS::Lambda::Function)、実行ロール(AWS::IAM::Role)、イベントソースマッピング(AWS::Lambda::EventSourceMapping)、イベント権限(AWS::Lambda::Permission)など複数のCloudFormationリソースに展開されます。
Q28. Elastic BeanstalkのRolling with Additional Batchデプロイポリシーの特徴は?
A) すべてのインスタンスを一度に更新するため高速 B) 既存の容量を維持しながら追加バッチを先に起動してローリング更新する C) 新しい環境を作成してDNSを変更する D) 1つずつ順番に更新する
答え: B
解説: Rolling with Additional Batchは追加のインスタンスバッチを先に起動してフル容量を維持しながらローリング更新を行います。デプロイ中もサービス全体の容量が維持されます。単純なRollingではデプロイ中に一部の容量が減少します。可用性が重要でコスト増加を許容できる場合に適しています。
Q29. ECS FargateとEC2起動タイプの主な違いは?
A) Fargateは固定コスト、EC2は使用量ベース B) Fargateはサーバー管理不要、EC2起動タイプはEC2インスタンスを直接管理する C) EC2起動タイプはサーバーレス D) FargateはWindowsコンテナをサポートしない
答え: B
解説: FargateはサーバーレスなコンテナDB実行環境でEC2インスタンスのプロビジョニングや管理が不要です。vCPUとメモリの使用量に基づいて課金されます。EC2起動タイプはECSが実行されるEC2インスタンスを直接管理する必要がありますが、GPUワークロード、特殊インスタンスタイプ、コスト最適化により柔軟です。
Q30. CodePipelineに手動承認(Manual Approval)ステップを追加する目的は?
A) デプロイ速度を上げるため B) 本番デプロイ前に人間のレビューと承認を要求するため C) 自動テストをスキップするため D) コストを削減するため
答え: B
解説: 手動承認ステップはパイプラインが次のステージに進む前に指定された担当者の承認を要求します。ステージングから本番へのデプロイ前にQAチームや管理者がレビューして承認するゲートの役割を果たします。SNS通知でレビュアーに通知を送り、コンソール、CLI、APIで承認または却下できます。
Q31. CodeBuildのbuildspec.ymlのphasesの正しい順序は?
A) install → pre_build → build → post_build B) build → test → deploy → clean C) pre_build → build → post_build → install D) setup → build → verify → deploy
答え: A
解説: buildspec.ymlのphasesの順序は: install(パッケージインストール、ランタイム設定)→ pre_build(ログイン、依存関係のダウンロード)→ build(実際のビルドコマンド)→ post_build(パッケージング、ECRプッシュ、通知)です。各フェーズはオプションで、フェーズが失敗すると後続フェーズは実行されません。
Q32. ECR(Elastic Container Registry)でイメージセキュリティスキャンを有効化すると何が提供されますか?
A) イメージの自動削除 B) コンテナイメージの既知のCVE脆弱性スキャンとレポート C) イメージの自動更新 D) イメージの暗号化
答え: B
解説: ECRイメージスキャン(InspectorによるEnhanced ScanningまたはBasic Scanning)はコンテナイメージのOSパッケージとプログラミング言語パッケージのCVE(共通脆弱性と露出)をスキャンします。プッシュ時の自動スキャンまたは手動スキャンを設定でき、発見された脆弱性を深刻度別にレポートします。
Q33. CodeDeployのappspec.ymlのhooksセクションのApplicationStopイベントの役割は?
A) 新しいアプリケーションバージョンを起動する B) 現在実行中のアプリケーションを停止する C) デプロイをロールバックする D) サーバーを再起動する
答え: B
解説: CodeDeployのデプロイライフサイクルイベントの順序: ApplicationStop → DownloadBundle → BeforeInstall → Install → AfterInstall → ApplicationStart → ValidateService。ApplicationStopは現在実行中のアプリケーションを正常に停止するスクリプトを実行します。前回のデプロイのappspec.ymlで定義されたスクリプトが実行されます。
Q34. Elastic Beanstalkの.ebextensionsディレクトリの役割は?
A) 環境変数のみを設定する B) AWSリソースのプロビジョニングとEC2インスタンス設定をカスタマイズする C) アプリケーションソースコードを保存する D) SSL証明書を管理する
答え: B
解説: .ebextensionsディレクトリの.configファイル(YAML/JSON)を通じて、EC2インスタンスの設定、ファイル作成、パッケージインストール、コマンド実行、AWSリソース(RDS、SQSなど)のプロビジョニング、環境変数の設定などをカスタマイズできます。
Q35. AWS CodeCommitでブランチプロテクションを実装する方法は?
A) CodeCommit設定で直接ブランチプロテクションを有効化する B) IAMポリシーで特定ブランチへの直接プッシュを制限する C) CodePipelineでプッシュを制御する D) S3バケットポリシーを使用する
答え: B
解説: CodeCommitにはGitHubのようなネイティブブランチプロテクション機能がありません。IAMポリシーの条件(StringNotEquals、codecommit:References)を使用してmain/masterブランチへの直接プッシュを制限できます。Pull Requestベースのワークフローを強制するにはIAMで直接プッシュ権限を削除します。
Domain 4: トラブルシューティングと最適化
Q36. Lambda関数でX-Rayトレーシングを有効化した場合、セグメント(Segment)とサブセグメント(Subsegment)の違いは?
A) セグメントはサブセグメントより詳細な情報を提供する B) セグメントはLambda関数全体の呼び出しを表し、サブセグメントはその中の特定操作を表す C) サブセグメントは外部サービス呼び出しのみをトラッキングする D) 2つの概念は同一である
答え: B
解説: X-Rayのセグメントは単一サービスまたはリクエストの最上位トレース単位で、Lambda関数の全体呼び出しを表します。サブセグメントはセグメント内の個別操作(DynamoDBクエリ、HTTPリクエストなど)を表します。AWS SDK呼び出しは自動的にサブセグメントとしてキャプチャされ、カスタムサブセグメントも追加できます。
Q37. DynamoDBでProvisionedThroughputExceededExceptionエラーが発生する原因と解決策は?
A) テーブルサイズが制限を超えた - データを削除する B) 読み書きスループットがプロビジョンされたRCU/WCUを超えた - Auto Scalingまたは容量増加 C) インターネット接続の問題 - リトライする D) IAM権限がない - ポリシーを修正する
答え: B
解説: ProvisionedThroughputExceededExceptionはリクエストのスループットがプロビジョンされたRCU(読み取りキャパシティユニット)またはWCU(書き込みキャパシティユニット)を超えた場合に発生します。解決策: (1) Auto Scalingを有効化して自動容量調整、(2) オンデマンドキャパシティモードへの切り替え、(3) DAX追加で読み取り負荷軽減、(4) 指数バックオフでリトライ。
Q38. CloudWatch Logsで特定のパターンのログをリアルタイム監視してアラートを受け取るには?
A) CloudWatchダッシュボードを作成する B) メトリクスフィルターを作成してCloudWatchアラームを設定する C) ログをS3にエクスポートする D) CloudTrailを有効化する
答え: B
解説: CloudWatch Logsメトリクスフィルターを使ってログイベントから特定パターンをフィルタリングし、カスタムメトリクスを作成します。例えば「ERROR」パターンをフィルタリングしてエラーカウントメトリクスを作成できます。このメトリクスにCloudWatchアラームを接続するとしきい値超過時にSNS経由でアラートを受け取れます。
Q39. Lambda関数の同時実行数がアカウントの制限に達したら何が起こりますか?
A) Lambdaが自動的にスケールダウンする B) 新しいリクエストはThrottle(スロットリング)エラーを受け取る C) LambdaがEC2インスタンスに切り替わる D) リクエストが自動的にSQSキューに保存される
答え: B
解説: アカウントの総同時実行数(デフォルト1,000)に達すると、追加のLambda呼び出しはThrottleエラー(HTTP 429)を受け取ります。同期呼び出しの場合はクライアントに直接エラーが返されます。非同期呼び出しの場合はLambdaが自動リトライします。Service Quotaの増加リクエストで制限を引き上げられます。
Q40. X-Rayのアノテーション(Annotations)とメタデータ(Metadata)の違いは?
A) アノテーションはインデックス化されて検索可能、メタデータはインデックス化されない B) メタデータはインデックス化されて検索可能、アノテーションはインデックス化されない C) 2つの概念は同一である D) アノテーションは数値のみサポート、メタデータはすべての型をサポート
答え: A
解説: X-Rayアノテーションはキーと値のペア(文字列、数値、真偽値)でインデックス化されており、トレースの検索とフィルタリングに使用できます。メタデータはオブジェクトや配列など任意のJSONシリアライズ可能な値を保存できますが、インデックス化されないため検索には使用できません。
Q41. Lambda関数の非同期呼び出しのデフォルトのリトライ動作は?
A) リトライしない B) 最大2回リトライ(合計3回試行)し、失敗時にDLQに移動 C) 無限にリトライする D) 1回リトライして成否に関わらず終了
答え: B
解説: Lambda非同期呼び出しが失敗すると、Lambdaは自動的に最大2回リトライします(合計3回試行)。リトライ間隔は徐々に増加します。3回すべて失敗すると設定されたデッドレターキュー(SQSまたはSNS)にイベントを送信します。イベント宛先(Destination)を設定すると成功/失敗イベントを他のAWSサービスにルーティングできます。
Q42. CloudWatchでカスタムメトリクスを公開する際に高解像度(High Resolution)メトリクスを使用する場面は?
A) メトリクスをより長く保持したい場合 B) 1分未満(1秒〜59秒)の細かな監視が必要な場合 C) コストを削減したい場合 D) 複数リージョンでメトリクスを集計したい場合
答え: B
解説: 標準解像度メトリクスは1分単位で公開されます。高解像度メトリクスは1秒単位までサポートし、より細かな監視が可能です。ただし、高解像度メトリクスは標準よりコストが高くなります。金融取引やゲームイベントなど秒単位の精度が必要な場合に使用します。
Q43. DynamoDB Streamsの一般的なユースケースとして正しいものは?
A) DynamoDBテーブルのバックアップ B) データ変更イベントをLambdaでトリガーして他のシステムに伝播する C) DynamoDBの読み取りパフォーマンス向上 D) グローバルテーブルの作成
答え: B
解説: DynamoDB Streamsはテーブルのアイテムレベルの変更(INSERT、MODIFY、REMOVE)を順番に記録します。Lambdaイベントソースマッピングでストリームレコードを処理することで、他のデータベースへの変更伝播、メール通知の送信、検索インデックスの更新、監査ログの生成などを実装できます。ストリームレコードは24時間保持されます。
Q44. API Gatewayで502 Bad Gatewayエラーが発生する一般的な原因は?
A) クライアントの不正なリクエスト形式 B) Lambda関数またはバックエンドが不正な形式のレスポンスを返した、またはタイムアウト C) IAM権限の不足 D) API Gatewayキャッシュがいっぱい
答え: B
解説: API Gateway 502 Bad Gatewayはバックエンドの統合で発生するエラーです。主な原因: (1) Lambda関数が期待の形式(statusCode、headers、body)と異なるレスポンスを返した、(2) Lambda関数でハンドルされていない例外が発生した、(3) Lambdaタイムアウト(API Gatewayのタイムアウト: 29秒)。
Q45. Lambdaコールドスタート時間に影響する要因として正しいものは?
A) 関数の呼び出し頻度のみ B) ランタイムの種類、デプロイパッケージサイズ、VPC設定、初期化コードの実行時間 C) AWSリージョンのみ D) Lambdaレイヤーの数のみ
答え: B
解説: Lambdaコールドスタート時間に影響する要因: (1) ランタイムの種類(Java/C#はPython/Node.jsより遅い)、(2) デプロイパッケージサイズ(大きいとダウンロード時間増加)、(3) VPC設定(ENI作成による追加遅延)、(4) 初期化コード(ハンドラー外のコード実行時間)、(5) Lambdaレイヤー。コールドスタート最小化: 小さいパッケージ、Provisioned Concurrency、軽量ランタイム使用。
Q46. SQSデッドレターキュー(DLQ)にメッセージが移動する条件は?
A) メッセージサイズが256KBを超えた場合 B) メッセージがmaxReceiveCount回だけ処理失敗した場合 C) キューの容量がいっぱいの場合 D) VisibilityTimeoutが切れるたびに
答え: B
解説: SQS DLQはソースキューからmaxReceiveCountで設定された回数以上受信(処理失敗)されたメッセージを自動的に受け取ります。例えばmaxReceiveCount=3の場合、メッセージが3回受信されて処理失敗するとDLQに移動します。DLQのメッセージを分析して処理失敗の原因を把握したり、再処理キューに移動したりできます。
Q47. このLambda関数コードの問題点は何ですか?
import boto3
def handler(event, context):
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('MyTable')
response = table.scan()
return response['Items']
A) boto3のインポートが間違っている B) DynamoDBクライアントをハンドラー内部で初期化しているため再利用されない C) scan()メソッドはLambdaで使用できない D) 返り値の形式が間違っている
答え: B
解説: DynamoDBリソースオブジェクトがハンドラー関数内部で初期化されており、呼び出しごとに新たに作成されます。実行コンテキストの再利用のメリットを活かせていません。ハンドラー外部(グローバルスコープ)で初期化するとウォーム再実行時に既存の接続を再利用してパフォーマンスが向上します。また、Scanはテーブル全体を読み取るためコストが大きく、Queryへの置き換えが推奨されます。
Q48. CloudWatch Logs InsightsでLambda関数のエラーログを検索するクエリは?
A) SELECT * WHERE level = 'ERROR' B) fields @timestamp, @message | filter @message like /ERROR/ | sort @timestamp desc C) GET errors FROM lambda_logs D) SEARCH 'ERROR' IN CloudWatch
答え: B
解説: CloudWatch Logs Insightsは独自のクエリ言語を使用します。fieldsコマンドで表示フィールドを選択し、filterで特定パターンをフィルタリングし、sortで並び替えます。like /ERROR/またはlike /Exception/パターンでエラーログを検索できます。stats count(*) by bin(5m)で時間別エラー数を集計することもできます。
Q49. API Gatewayの使用プラン(Usage Plan)とAPIキーの主な目的は?
A) APIのセキュリティ強化 B) APIリクエスト数とレートを制限して悪用を防ぎ、マネタイズを可能にする C) APIのバージョン管理 D) キャッシュの有効化
答え: B
解説: 使用プランはAPIキーごとにスロットリング(秒間リクエスト数: RPS、バーストサイズ)と割り当て量(日/週/月ごとの総リクエスト数)を設定します。APIキーを発行して使用プランに関連付けることで顧客ごとに異なる制限を適用できます。APIのマネタイズ、パートナーAPI提供、悪用防止に活用されます。
Q50. Lambda関数のタイムアウト設定の最大値は?
A) 5分 B) 10分 C) 15分 D) 30分
答え: C
解説: Lambda関数の最大実行時間(タイムアウト)は15分(900秒)です。デフォルトは3秒です。15分を超えるタスクにはStep Functions(ステートマシン)、ECSタスク、またはEC2インスタンスを使用する必要があります。タイムアウトが発生するとLambdaは関数を強制終了し、非同期呼び出しの場合はリトライします。
Q51. DynamoDBのシングルテーブル設計(Single-Table Design)パターンでパーティションキーとソートキーをオーバーロードする理由は?
A) DynamoDBのコストを削減するため B) 複数のエンティティタイプを単一テーブルに保存してジョインなしに効率的なクエリをサポートするため C) データ暗号化を改善するため D) バックアップを簡素化するため
答え: B
解説: DynamoDBはジョイン操作をサポートしないため、関連する複数のエンティティを単一テーブルに保存し、パーティションキーとソートキーをオーバーロードします。例: PK=USER#123、SK=USER#123(ユーザー情報)、SK=ORDER#456(注文情報)。単一のGetItemまたはQueryで関連データを一緒に取得できます。
Q52. SNSファンアウト(Fan-out)パターンの説明として正しいものは?
A) SNSが単一のSQSキューにメッセージを配信する B) SNSトピックに公開されたメッセージが複数のSQSキューとLambda、HTTPエンドポイントに同時配信される C) SQSが複数のLambda関数を同時にトリガーする D) 一つのLambdaが複数のSNSトピックに公開する
答え: B
解説: SNSファンアウトパターンはSNSトピックに一つのメッセージを公開すると、サブスクライブしているすべてのエンドポイント(SQSキュー、Lambda関数、HTTP/HTTPS、メール、SMS)に同時配信されるパターンです。例えば注文完了イベントを公開すると、メール通知、在庫更新、配送処理など複数のシステムが同時に処理できます。
Q53. Elastic BeanstalkのWorker環境の特徴は?
A) インターネットトラフィックを処理するWebサーバー B) SQSキューのメッセージをポーリングしてバックグラウンドタスクを処理する C) データベース処理に特化した環境 D) Fargateコンテナのみを実行する
答え: B
解説: Elastic Beanstalk Worker環境にはSQSデーモン(sqsd)が組み込まれており、SQSキューをポーリングしてHTTP POSTリクエストでアプリケーションにメッセージを配信します。Web環境(Web Server Tier)と分離して非同期バックグラウンドタスク(画像処理、メール送信、データ処理など)を処理します。
Q54. CloudFormationスタック更新時にリソースの置換(Replacement)が発生する例は?
A) EC2インスタンスのタグ変更 B) RDSインスタンスのDBエンジンバージョンのアップグレード C) S3バケット名の変更 D) Lambda関数のメモリ設定の変更
答え: C
解説: S3バケット名は不変プロパティで、名前を変更すると既存バケットが削除されて新しい名前のバケットが作成されます(置換)。EC2タグ変更やLambdaメモリ変更は現在のリソースを更新します。CloudFormationは各プロパティの変更タイプを「Update requires: Replacement」「Update requires: No interruption」「Update requires: Some interruptions」として文書化しています。
Q55. S3イベント通知でLambdaをトリガーする際の呼び出しタイプは?
A) 同期(Synchronous)呼び出し B) 非同期(Asynchronous)呼び出し C) ポーリング型呼び出し D) ストリーミング呼び出し
答え: B
解説: S3イベント通知がLambdaをトリガーする際は非同期(Asynchronous/Event)呼び出し方式を使用します。S3はイベントをLambdaに発行して応答を待ちません。Lambdaは失敗時に自動リトライし、DLQまたはLambda Destination設定が可能です。SNS、SES、CloudWatch Eventsも非同期呼び出しを使用します。
Q56. DynamoDB TransactWriteItemsの特徴として正しいものは?
A) 単一パーティションにのみ適用される B) 最大100個のアイテムに対するアトミック(Atomic)ACID トランザクションをサポートする C) 非同期でのみ実行される D) 読み取り専用操作にのみ使用される
答え: B
解説: TransactWriteItemsは複数のテーブルにわたって最大100個(または4MB)のアイテムに対するアトミックな書き込み操作を実行します。すべての操作が成功するかすべて失敗します(ACID)。Put、Update、Delete、ConditionCheck操作を組み合わせられます。TransactGetItemsは読み取りトランザクションをサポートします。標準操作より2倍の読み書き容量を消費します。
Q57. Lambda関数の環境変数の最大サイズは?
A) 4KB B) 8KB C) 16KB D) 32KB
答え: A
解説: Lambda関数のすべての環境変数の合計サイズは4KBに制限されています。この制限を超える設定値はSSM Parameter StoreまたはSecrets Managerに保存してランタイムにAPIで取得する必要があります。環境変数は関数のデプロイパッケージとは分離されているため、コード変更なしに設定を更新できます。
Q58. CodeBuildのビルド環境に環境変数を安全に渡す方法は?
A) buildspec.ymlに直接ハードコードする B) Parameter StoreまたはSecrets Managerの参照を使用する C) ソースコードリポジトリに保存する D) S3バケットの平文ファイルから読み込む
答え: B
解説: CodeBuildで機密性の高い環境変数(APIキー、パスワードなど)はbuildspec.ymlに直接書かずに、SSM Parameter StoreのSecureStringパラメータまたはSecrets Managerシークレットを参照します。buildspec.ymlのparameter-storeまたはsecrets-managerフィールドで参照でき、ビルド実行時に自動的に復号化されて環境変数として設定されます。
Q59. S3ライフサイクルポリシーでオブジェクトをGlacierに移行する最小経過日数は?
A) 1日 B) 30日 C) 60日 D) 90日
答え: B
解説: S3 StandardからS3 Glacier Flexible Retrievalへ直接移行する最小期間は30日です。S3 Standard-IAからGlacierも30日です。Glacier Instant Retrievalへの移行最小期間は90日です。ライフサイクルポリシーを誤って設定すると予期しないコストが発生することがあります。
Q60. API Gatewayのステージ変数(Stage Variables)のユースケースは?
A) ユーザー認証情報を保存する B) 環境ごと(開発/ステージング/本番)に異なるLambda関数ARNやエンドポイントを参照する C) APIバージョンを自動的にインクリメントする D) キャッシュ設定を保存する
答え: B
解説: ステージ変数はAPI Gatewayのステージごとに異なる値を設定できるキーと値のペアです。例えばlambdaAlias変数をdevステージでは「dev」、prodステージでは「prod」に設定し、Lambda統合URIでstageVariables.lambdaAliasとして参照します。同じAPI定義で複数の環境をサポートできます。
Q61. Lambda関数を更新する際にバージョン(Version)とエイリアス(Alias)を使用する主な理由は?
A) コストを削減するため B) トラフィック分散(Canaryデプロイ)と安定したARN参照を提供するため C) 実行速度を上げるため D) ロギングを有効化するため
答え: B
解説: Lambdaバージョンはデプロイされたコードと設定の不変スナップショットです。エイリアスは特定バージョン(または$LATEST)を指す名前です。エイリアスARNをAPI Gatewayやイベントソースにアタッチすると、新バージョンのデプロイ時にエイリアスを更新するだけで済みます。またエイリアスのルーティング設定で2つのバージョン間でトラフィックを分散(例: v1=90%、v2=10%)してCanaryデプロイを実装できます。
Q62. DynamoDBでConditional Writeを使用するシナリオは?
A) データ暗号化のため B) 楽観的ロック(Optimistic Locking)の実装や、アイテムが存在しない場合にのみ挿入するため C) 読み取りパフォーマンスを向上させるため D) 自動インデックス化を有効化するため
答え: B
解説: DynamoDB Conditional Writeは指定した条件がtrueの場合にのみ書き込み操作を実行します。例えばattribute_not_exists(pk)条件でアイテムがない場合にのみ挿入(重複防止)、versionパラメーターのバージョン番号を確認して楽観的ロックの実装などが可能です。条件が失敗するとConditionalCheckFailedExceptionが発生します。
Q63. AWS X-Rayサービスマップ(Service Map)で確認できる情報として正しいものは?
A) AWSコスト情報 B) サービス間の接続、レスポンス時間、エラー率、リクエスト数 C) IAM権限情報 D) ネットワーク帯域幅使用量
答え: B
解説: X-Rayサービスマップはアプリケーションのサービストポロジーを可視化します。各ノードはサービス(Lambda、DynamoDB、API Gatewayなど)を表し、平均レスポンス時間(レイテンシ)、リクエスト数(分あたり)、エラー率(4xx)、障害率(5xx)を表示します。サービス間の矢印は呼び出し関係を示します。
Q64. Lambda関数の/tmpディレクトリの特徴として正しいものは?
A) 関数呼び出し間で共有されず、永続ストレージとして使用できない B) 最大10GBの一時ストレージを提供し、同じコンテナが再利用される際にデータが保持される場合がある C) すべてのLambda関数が同じ/tmpディレクトリを共有する D) /tmpディレクトリは暗号化されない
答え: B
解説: Lambdaの/tmpディレクトリは最大10GB(デフォルト512MB、調整可能)の一時ストレージを提供します。同じ実行環境(コンテナ)が再利用(ウォーム再実行)される際、以前の呼び出しで保存したデータが残っている場合があります。これはキャッシングに活用できますが、機密データは削除する必要があります(セキュリティ上の注意)。他のLambdaインスタンスとは共有されません。
Q65. LambdaイベントソースマッピングIEvent Source Mapping)を使用するサービスとして正しいものは?
A) S3、SNS、API Gateway B) SQS、Kinesis Data Streams、DynamoDB Streams、MSK、MQ C) CloudWatch Events、EventBridge、SNS D) CodeCommit、CodePipeline、CodeDeploy
答え: B
解説: イベントソースマッピングはLambdaが能動的にポーリングするストリーム/キューベースのサービスで使用されます: SQS、Kinesis Data Streams、DynamoDB Streams、Apache Kafka(MSK)、Amazon MQ。Lambdaサービスが直接ポーリングしてバッチで処理します。一方、S3、SNS、API Gateway、EventBridgeはLambdaを直接呼び出します(プッシュ型)。
合格戦略
- 主要サービス集中: Lambda、DynamoDB、API Gateway、SQS、Cognitoで全体の50%以上
- 実習必須: AWS Free Tierで実際に実装する経験を積む
- 公式ドキュメント: 各サービスの開発者ガイドとAPIリファレンスを習得
- ホワイトペーパー: AWSセキュリティのベストプラクティス、サーバーレスアーキテクチャのホワイトペーパーは必読
- 試験のヒント: 「最も効率的」「コスト効果的」「最小限の運用オーバーヘッド」というキーワードに注目