トキヌク

AWS DVA サンプル問題

AWS Certified Developer - Associate(AWS DVA)対策のオリジナル問題50問を無料公開。アプリの無料枠と同じ問題で、全220問収録のAWS DVA問題集から抜粋しています。「答えと解説を見る」を開くと、正解だけでなく全選択肢の解説を読めます。

50問無料公開 全220問収録 全選択肢解説付き
アプリで解く(無料・登録不要)→

AWSサービスを使用した開発

Lambda

Q1. 決済処理を行うLambda関数と、社内レポート生成用のLambda関数が同一アカウント・同一リージョンに存在します。月末にレポート関数が大量に実行され、アカウントの同時実行数を消費し尽くした結果、決済関数が429エラーでスロットリングされました。決済関数の実行枠を確実に確保する、最も適切な設定はどれですか?

  1. A. 決済関数にプロビジョニングされた同時実行を設定する
  2. B. 決済関数に予約された同時実行を設定する
  3. C. レポート関数のタイムアウトを15分から1分に短縮し、実行時間を抑える
  4. D. 決済関数のメモリを3008MBに引き上げて処理を高速化する
答えと解説を見る

正解:B

A 初期化済みの実行環境を事前に用意してコールドスタートを短縮する機能であり、本来の目的はレイテンシ改善。確保した数を超えるバーストは結局アカウント枠を奪い合ううえ、待機中も課金され続ける

B(正解) 正解。予約された同時実行はその関数専用の枠を切り出し、他の関数から消費されないよう隔離する

C 同時実行数は「実行中の呼び出し数」で決まるため多少は緩和されるが、処理が途中で打ち切られてレポートが壊れる。決済関数を保証する仕組みにはならない

D 1実行あたりの時間は短くなるが、同時実行数の枠そのものは変わらない。バースト時のスロットリングは解消しない

Lambda

Q2. 12個のLambda関数が、共通の画像処理ライブラリ(約40MB)と社内ユーティリティモジュールを利用しています。現在はデプロイパッケージごとに同じライブラリを同梱しており、ライブラリ更新のたびに12個すべてを再ビルド・再デプロイしています。最も運用負荷が低い改善方法はどれですか?

  1. A. ライブラリをS3バケットに置き、関数の初期化時にダウンロードして/tmpに展開する
  2. B. ライブラリをEFSファイルシステムに置き、全関数からマウントする
  3. C. ライブラリを含むコンテナイメージを作成し、全関数をコンテナイメージデプロイに切り替える
  4. D. ライブラリをLambdaレイヤーとして発行し、各関数にアタッチする
答えと解説を見る

正解:D

A 初期化のたびにネットワーク取得と展開が走りコールドスタートが悪化する。S3の権限管理も追加で必要になり、運用はむしろ複雑になる

B 共有自体は可能だが、VPC設定・マウントターゲット・アクセスポイントの構成が必要でオーバーヘッドが大きい。単なる読み取り専用の依存ライブラリ配布には過剰

C 実現は可能だがイメージのビルドとECRへのプッシュが毎回必要で、ZIPパッケージのままレイヤーだけ差し替える方式より手順が多い

D(正解) 正解。レイヤーを新バージョンとして発行し関数の参照を更新するだけでよく、関数コードの再ビルドが不要になる。1関数あたり5レイヤーまで、解凍後合計250MBの制限内で使える

Lambda

Q3. 本番稼働中のLambda関数に新しいロジックを投入するにあたり、まず全リクエストの10%だけを新コードに流して問題がないことを確認し、その後100%へ切り替えたいと考えています。呼び出し側のアプリケーションは設定変更なしで済ませる必要があります。適切な方法はどれですか?

  1. A. 新しいコードを別の関数として作成し、呼び出し側のアプリケーションでランダムに10%のリクエストを新関数へ振り分ける
  2. B. $LATESTに新コードをデプロイし、問題があればロールバックする
  3. C. 新バージョンを発行し、既存のエイリアスに加重(ルーティング設定)を構成して10%を新バージョンへ向ける
  4. D. 関数の予約された同時実行を10%に設定し、残りを旧コードに流す
答えと解説を見る

正解:C

A 呼び出し側の改修が必要になるという要件に反する。振り分けロジックを各クライアントに実装する運用負荷も高い

B $LATESTは常に最新コードを指すため、デプロイした瞬間に100%のトラフィックが新コードに向かう。段階的な切り替えができない

C(正解) 正解。エイリアスの加重ルーティングは2つのバージョン間でトラフィックを割合分割でき、呼び出し側はエイリアスARNを参照したままでよい

D 予約された同時実行は同時実行数の上限を決める設定で、トラフィックの割合分割とは無関係。超過分はスロットリングされるだけで旧コードには流れない

Lambda

Q4. SQSキューをイベントソースとするLambda関数が、1メッセージにつき1回ずつ起動しており、下流のRDSへの接続確立コストが処理時間の大半を占めています。メッセージは多少まとめて処理してもビジネス上問題ありません。呼び出し回数を削減する最も効果的な設定はどれですか?

  1. A. イベントソースマッピングのバッチサイズとバッチウィンドウを大きくする
  2. B. SQSキューの可視性タイムアウトを関数のタイムアウトより長い値へ延長する
  3. C. SQSキューをFIFOキューに変更する
  4. D. Lambda関数の予約された同時実行を1に設定して直列処理にする
答えと解説を見る

正解:A

A(正解) 正解。バッチサイズを増やせば1回の呼び出しで複数メッセージを受け取れ、バッチウィンドウを設ければメッセージが溜まるまで待ってからまとめて起動できる

B 処理中のメッセージが他のコンシューマーに見えなくなる時間の設定で、1回の呼び出しで受け取るメッセージ数には影響しない。むしろ関数のタイムアウトに合わせて調整すべき値

C 順序保証と重複排除のための選択であり、呼び出し回数の削減が目的ではない。メッセージグループ単位の直列処理になり、かえってスループットが落ちる可能性がある

D 同時実行が1に絞られるだけで呼び出し回数は変わらない。キューが滞留して処理遅延が深刻化し、接続コストの問題も解決しない

Lambda

Q5. 動画のサムネイル生成を行うLambda関数が、処理途中で「No space left on device」エラーを出して失敗します。関数は入力動画を一時領域にダウンロードしてから複数解像度の画像を書き出しており、入力ファイルは最大3GB程度です。最も適切な対処はどれですか?

  1. A. 関数のメモリを10240MBまで引き上げる
  2. B. デプロイパッケージのサイズを削減して書き込み可能な空き容量を確保する
  3. C. 関数のエフェメラルストレージの容量を拡張する
  4. D. 関数のタイムアウトを15分に延長する
答えと解説を見る

正解:C

A メモリとCPUは増えるが、/tmpの容量はメモリ設定とは独立したエフェメラルストレージの設定で決まる。ディスク不足は解消しない

B デプロイパッケージが展開される領域と、書き込み可能な一時領域は別枠。パッケージを小さくしても書き込み可能容量は増えない

C(正解) 正解。/tmpの容量は関数設定で512MBから10240MBまで構成でき、確保した容量に応じた課金が発生する

D 実行時間の上限を延ばすだけで、ディスク容量とは無関係。同じ場所で容量不足エラーになる

Lambda

Q6. Kinesis Data Streamsの4シャードをイベントソースとするLambda関数が、下流処理の遅さによりイテレーター経過時間(IteratorAge)を増大させています。パーティションキー単位の処理順序は必ず維持しなければなりません。シャードを増やさずにスループットを上げる方法はどれですか?

  1. A. イベントソースマッピングのバッチサイズを1に下げる
  2. B. イベントソースマッピングの並列化係数(ParallelizationFactor)を引き上げる
  3. C. Lambda関数の予約された同時実行をシャード数と同じ4に設定する
  4. D. コンシューマーを拡張ファンアウト(Enhanced Fan-Out)に変更して読み取り帯域を専有させる
答えと解説を見る

正解:B

A 1回あたりの処理量が減るだけで並列度は上がらない。呼び出し回数が増えてオーバーヘッドが増し、遅延はさらに悪化する

B(正解) 正解。1シャードに対して最大10個のバッチを同時処理でき、同一パーティションキーのレコードは同じバッチ処理系に送られるため順序は保たれる

C 同時実行の上限を4に固定するだけで、既定でもシャードあたり1バッチずつ処理されている。並列度は上がらない

D 各コンシューマーに専用のスループットと低レイテンシ配信を提供する機能で、読み取り帯域の競合には効くが、この関数の処理並列度そのものは変わらない

Lambda

Q7. 非同期(Event呼び出し)で起動されるLambda関数について、既定の再試行をすべて使い切って失敗したイベントのペイロードと、エラーの内容やリクエストIDを含む詳細情報を後から分析したいと考えています。最も適切な構成はどれですか?

  1. A. 関数のデッドレターキューにSQSキューを指定する
  2. B. 関数コード内でtry-catchし、例外の内容をCloudWatch Logsへ出力する
  3. C. イベントソースマッピングに失敗時の宛先を設定する
  4. D. Lambdaの障害時の宛先(OnFailure Destination)を指定する
答えと解説を見る

正解:D

A 失敗したイベント本文は退避できるが、DLQに入るのは元のペイロードのみで、エラー内容や応答の詳細は含まれない。要件の半分しか満たさない

B 関数が起動できずに失敗するケースや初期化エラーを捕捉できない。ログからペイロードを再投入する運用も手作業になる

C 非同期呼び出しにはイベントソースマッピングが存在しない。この設定はSQSやKinesisなどのポーリング型ソースに対するもので、Event呼び出しには適用されない

D(正解) 正解。宛先に送られるレコードにはリクエストID・エラー内容・元のペイロードを含む呼び出しレコードが格納され、DLQより多くの情報が得られる

Lambda

Q8. あるLambda関数がDynamoDBクライアントとデータベース接続をハンドラー関数の内部で毎回生成しています。関数の実行時間を短縮するため、コードを改善したいと考えています。最も効果的な変更はどれですか?

  1. A. クライアントと接続の生成をハンドラー外のグローバルスコープ(初期化コード)に移す
  2. B. 生成したクライアントを/tmpにシリアライズして保存し、次回の呼び出しで読み込んで再利用する
  3. C. クライアントを環境変数にJSONとして格納し、ハンドラーで読み出す
  4. D. 関数のタイムアウトを短くして、処理が長引く実行を早期に打ち切る
答えと解説を見る

正解:A

A(正解) 正解。初期化コードは実行環境が再利用される限り再実行されないため、以降の呼び出しでは接続確立のオーバーヘッドを回避できる

B 接続オブジェクトはシリアライズして復元できるものではなく、ファイルI/Oが増えるだけ。設計として成立しない

C 環境変数は文字列しか保持できず、接続やクライアントインスタンスを渡す手段ではない。設定値の受け渡し用途にとどまる

D 遅い実行を失敗させるだけで、1回あたりの初期化コストは変わらない。むしろ正常処理まで失敗させるリスクがある

Lambda

Q9. 毎朝9時ちょうどに社内ユーザーが集中してアクセスするAPIのバックエンドがLambda関数で、その時間帯だけ初回応答が5秒以上かかるという苦情が出ています。日中の残りの時間は問題ありません。追加コストは許容できます。最も適切な対策はどれですか?

  1. A. 関数のメモリを増やしてCPU割り当てを引き上げる
  2. B. EventBridgeルールで1分ごとに関数をダミー呼び出しし、実行環境を維持する
  3. C. エイリアスにプロビジョニングされた同時実行を設定し、スケジュールで増減させる
  4. D. 関数の予約された同時実行を大きな値に設定する
答えと解説を見る

正解:C

A 初期化処理そのものは速くなるが、実行環境の新規作成に伴うコールドスタートは残る。集中アクセス時の初回遅延を確実には解消できない

B いわゆるウォームアップだが、維持できる実行環境はごく少数で、同時に大量到達するバーストには対応できない。仕組みも自前運用になる

C(正解) 正解。事前に初期化済みの実行環境が確保される。Application Auto Scalingのスケジュールを併用すれば必要な時間帯だけ確保数を増やせるためコストも抑えられる

D 同時実行の枠を確保するだけで、実行環境の事前初期化は行われない。コールドスタートによる初回遅延は解消しない

Lambda

Q10. 社内ツール向けに、Lambda関数へHTTPSで直接POSTできる単純なエンドポイントを最短で用意したいと考えています。認証はIAM SigV4で行い、リクエスト検証・使用量プラン・カスタムドメインなどの機能は不要です。最も運用負荷が低い方法はどれですか?

  1. A. REST APIをAPI Gatewayに作成し、Lambdaプロキシ統合を構成する
  2. B. Lambda関数URLを作成し、認証タイプにAWS_IAMを指定する
  3. C. Application Load Balancerを作成し、Lambdaをターゲットグループに登録する
  4. D. CloudFrontディストリビューションを作成し、オリジンにLambdaを直接指定する
答えと解説を見る

正解:B

A 要件は満たすがリソース・メソッド・ステージ・デプロイの管理が必要になる。今回不要な機能のために構成要素が増える

B(正解) 正解。関数に組み込みのHTTPS(S)エンドポイントが1設定で払い出され、追加サービスなしでSigV4認証を強制できる

C 常時課金されるALBが必要になり、SigV4認証も標準では提供されない。単純なエンドポイント公開には重い

D CloudFrontのオリジンにLambda関数を直接指定することはできない。関数URLやAPI Gatewayなどのエンドポイントを経由する必要がある

Lambda

Q11. Javaで実装されたLambda関数が、Springフレームワークの初期化に6秒近くかかりコールドスタートが問題になっています。コードの大幅な書き換えは避けたく、常時課金も増やしたくありません。最も適切な対策はどれですか?

  1. A. ランタイムをNode.jsに変更して書き直す
  2. B. プロビジョニングされた同時実行を常時一定数確保する
  3. C. EC2 Auto Scalingのウォームプールに初期化済みインスタンスを待機させる
  4. D. 関数バージョンに対してLambda SnapStartを有効化する
答えと解説を見る

正解:D

A 初期化は速くなるがアプリケーション全体の書き換えが必要で、「大幅な書き換えを避けたい」という制約に反する

B コールドスタートは解消できるが、確保している間は実行の有無にかかわらず課金される。常時課金を増やしたくないという条件に合わない

C ウォームプールはAuto Scalingグループが初期化済みEC2インスタンスを停止やハイバネートの状態で待機させる仕組みで、実行環境をサービス側が管理するLambdaには適用できない

D(正解) 正解。初期化済みの実行環境スナップショットをキャッシュして復元するため、追加料金なしで起動時間を大幅に短縮できる。有効化はバージョンに対して行い、エイリアス経由で呼び出す

Lambda

Q12. DynamoDB StreamsをソースとするLambda関数がバッチ内の1件の不正データで例外を投げ、バッチ全体が繰り返し再試行されてシャードが停止しています。正常なレコードは処理を進めたいと考えています。最も適切な対処はどれですか?

  1. A. イベントソースマッピングでReportBatchItemFailuresを有効化する
  2. B. イベントソースマッピングの再試行回数を0に設定する
  3. C. 関数内で全例外を握りつぶし、常に正常終了させる
  4. D. DynamoDBテーブルのストリーム設定をNEW_IMAGEからKEYS_ONLYに変更する
答えと解説を見る

正解:A

A(正解) 正解。関数の応答で失敗したレコードのシーケンス番号を返す部分バッチレスポンスにより、失敗レコード以降のみが再試行の対象となり成功分のチェックポイントが進む

B 詰まりは解消するが、一時的なエラーで失敗したレコードもすべて捨てることになる。正常レコードを進めるという要件とは別の副作用が大きい

C バッチは進むが、失敗の記録が一切残らずデータ欠落に気付けない。障害の可視性を失う悪い設計

D ストリームに載る情報量が変わるだけで、バッチ失敗時の再試行挙動には影響しない。むしろ処理に必要な属性が取れなくなる

Lambda

Q13. CPUバウンドな画像変換Lambda関数のメモリを128MBから1024MBへ引き上げたところ、実行時間が8秒から1秒に短縮され、請求額はむしろ下がりました。この現象を説明する記述として正しいものはどれですか?

  1. A. メモリを増やすと1GB秒あたりの単価が段階的に安くなるため
  2. B. メモリを1024MB以上にすると呼び出し回数の課金が免除されるため
  3. C. Lambdaはメモリ設定に比例してCPUを割り当てるため、処理が速くなりGB秒の合計が減ったから
  4. D. メモリを増やすと自動的にプロビジョニングされた同時実行が有効になり、初期化時間が課金対象外になるから
答えと解説を見る

正解:C

A GB秒あたりの単価はメモリ設定によって変わらない。安くなったのは単価ではなく消費したGB秒の総量

B リクエスト課金はメモリ設定と無関係に発生する。そのような免除は存在しない

C(正解) 正解。8倍のメモリでも実行時間が8分の1未満になればGB秒は減る。CPUバウンドな処理ではメモリを上げるほうが安くなることがある

D メモリ設定によってプロビジョニングされた同時実行が自動で有効になることはない。両者は独立した設定

Lambda

Q14. 月次のデータ集計ジョブが平均40分かかり、現在はLambda関数で実装しようとして繰り返しタイムアウトしています。処理はコンテナ化済みで、実行はスケジュール起動、アイドル時に課金されたくありません。最も適切な実行基盤はどれですか?

  1. A. Lambda関数のタイムアウトを60分に設定して実行する
  2. B. EventBridge Schedulerで起動するFargateタスクとして実行する
  3. C. 常時起動のEC2インスタンスにcronを設定して実行する
  4. D. 処理を3分割したLambda関数をStep Functionsで直列に呼び出す
答えと解説を見る

正解:B

A Lambdaの最大実行時間は15分で、60分に設定することはできない。前提が成立しない

B(正解) 正解。実行時間の上限がなく、タスク実行中のみ課金されるためアイドルコストが発生しない

C 実行できるがインスタンスが月のほとんどをアイドルで過ごし課金され続ける。パッチ適用などの運用負荷も増える

D 各ステップを15分以内に収める設計が必要で、40分の一体処理を分割できる保証がない。コンテナ化済みという前提も活かせない

DynamoDB2つ選択

Q15. DynamoDBのローカルセカンダリインデックス(LSI)とグローバルセカンダリインデックス(GSI)を比較したとき、正しい記述はどれですか?(2つ選択)

  1. A. LSIはテーブル作成後でも追加でき、GSIはテーブル作成時にしか定義できない
  2. B. GSIからの読み取りは結果整合性のみで、強い整合性のある読み取りは指定できない
  3. C. LSIには専用のキャパシティを個別にプロビジョニングする必要がある
  4. D. LSIはベーステーブルと同じパーティションキーを共有し、異なるソートキーだけを定義できる
  5. E. GSIを使うと、1つのパーティションキー値あたりのデータ量に10GBの上限が課される
答えと解説を見る

正解:B・D

A 説明が逆。後から追加・削除できるのはGSIのほうで、LSIはテーブル作成時にのみ定義できる

B(正解) 正解。GSIはベーステーブルから非同期にレプリケートされるため、書き込み直後の読み取りが古い値を返すことがある。強い整合性が必要ならベーステーブルかLSIを使う

C 専用キャパシティを持つのはGSIのほう。LSIはベーステーブルのキャパシティを消費するため、別途プロビジョニングする対象ではない

D(正解) 正解。同じパーティション内での並べ替え軸を増やす仕組みであり、パーティションキーそのものを変えたい場合はGSIを使う

E 10GBの制約はLSIを持つテーブルのほうに存在する。GSIは独立したテーブルとして管理されるためこの上限はない

Lambda3つ選択

Q16. Lambda関数の実行環境(実行コンテキスト)の再利用について、正しい記述はどれですか?(3つ選択)

  1. A. ハンドラー外に書いた初期化コードは、実行環境が新規に作られたときにだけ実行される
  2. B. 呼び出しが終了するたびに実行環境は必ず破棄され、次の呼び出しでは新しい環境が作られる
  3. C. /tmpに書いたファイルは、同じ実行環境が再利用される次の呼び出しからも見える
  4. D. 同一アカウント内の別のLambda関数と実行環境が共有されるため、グローバル変数の値が混ざる可能性がある
  5. E. 実行環境が再利用される場合、前回の呼び出しで開始した非同期処理は次の呼び出しの開始前に必ず完了している
  6. F. 呼び出しごとの状態をグローバル変数に保持すべきではない
答えと解説を見る

正解:A・C・F

A(正解) 正解。初期化フェーズで一度だけ走り、その環境が再利用される間は再実行されない。SDKクライアントや設定の読み込みをここに置く根拠になる

B Lambdaは直後の呼び出しに備えて実行環境を一定時間保持し再利用する。毎回破棄されるなら初期化コードをハンドラー外に置く最適化自体が成立しない

C(正解) 正解。/tmpは実行環境に紐づくため内容が残る。キャッシュとして活用できる反面、残留ファイルを前提にしない実装と、機密データを残さない配慮が必要になる

D 実行環境は関数のバージョン単位で分離されており、別の関数と共有されることはない。関数をまたぐ情報漏えいを心配する必要はない

E ハンドラーが結果を返した時点で実行環境は凍結され、未完了の非同期処理はそのまま止まる。次の呼び出しで解凍された際に予期しないタイミングで再開するため、ハンドラー内で完了を待つ必要がある

F(正解) 正解。実行環境が再利用されると前回の値がそのまま残るため、ユーザー固有の情報をグローバルに置くと別のリクエストから読み取られる不具合になり得る。再利用されるかどうかはLambda側の判断で、コードからは制御できない

セキュリティ

IAM/Cognito

Q17. モバイルアプリでユーザーのサインアップとサインインを実装し、認証されたユーザーだけがS3の自分専用フォルダへ直接アップロードできるようにします。サインインの結果としてAWSの一時的な認証情報を取得する必要があります。最も適切な構成はどれですか?

  1. A. Cognitoユーザープールのみを使い、発行されたIDトークンをそのままS3へのリクエストに付与する
  2. B. CognitoアイデンティティプールのみをOpenID Connectなしで使い、非認証ロールで書き込む
  3. C. IAMユーザーをアプリ利用者ごとに作成し、アクセスキーを配布する
  4. D. Cognitoユーザープールで認証し、そのトークンをアイデンティティプールに渡して一時的な認証情報を取得する
答えと解説を見る

正解:D

A ユーザープールが発行するのはJWTであり、S3はSigV4署名を要求する。JWTを直接付けてもS3にはアクセスできない

B サインインの概念がなく全員が同じゲストロールになるため、ユーザー専用フォルダを分離できない

C IAMユーザーはアプリケーションのエンドユーザー管理に使うものではなく、数万人規模ではクォータも運用も破綻する

D(正解) 正解。ユーザープールが認証、アイデンティティプールが認可(AWS認証情報の払い出し)を担う役割分担が基本形となる

IAM/Cognito

Q18. Cognitoアイデンティティプールから一時的な認証情報を得たユーザーが、S3バケットのprivate/<自分のID>/配下だけを読み書きできるようにします。ユーザーごとにロールを作りたくありません。最も適切な方法はどれですか?

  1. A. バケットポリシーでユーザーごとにプレフィックスを列挙して許可する
  2. B. 認証済みロールのポリシーでResourceにポリシー変数を使う
  3. C. アプリケーション側でプレフィックスを検証してからS3へ書き込む
  4. D. S3のオブジェクトACLでユーザーごとに権限を設定する
答えと解説を見る

正解:B

A ユーザーが増えるたびにポリシーの更新が必要で、バケットポリシーのサイズ上限にもすぐ達する

B(正解) 正解。Resourceに ${cognito-identity.amazonaws.com:sub} を書くとリクエストごとにそのユーザーのアイデンティティIDへ展開され、1つのロールで自分専用プレフィックスに限定できる

C クライアント側の検証は改ざんできるため、認可の強制力がない。認証情報を持つ以上バケット全体を操作できてしまう

D ACLの被付与者はAWSアカウントや定義済みグループで、Cognitoのアイデンティティを直接指定できない。オブジェクト作成後の設定になる点も要件に合わない

IAM/Cognito

Q19. API Gateway REST APIの各メソッドを、Cognitoユーザープールでサインインしたユーザーのみが呼び出せるようにします。バックエンドのLambdaにはユーザーの識別子を渡したいと考えています。カスタムコードは最小限にしたいと考えています。最も適切な方法はどれですか?

  1. A. メソッドの認可にCognitoユーザープールオーソライザーを設定する
  2. B. Lambdaオーソライザーを実装し、トークンの署名検証を自前で行う
  3. C. メソッドの認可をAWS_IAMにし、Cognitoの一時認証情報でSigV4署名させる
  4. D. APIキーを各ユーザーに発行し、使用量プランで管理する
答えと解説を見る

正解:A

A(正解) 正解。Authorizationヘッダーで送られたトークンをAPI Gatewayが検証し、クレームはリクエストコンテキストのauthorizer経由でLambdaへ渡される

B 実現できるがJWKSの取得と署名検証を自作することになり、標準のオーソライザーがある以上カスタムコードが無駄に増える

C 認可はできるが、渡されるのはIAMのプリンシパル情報であり、ユーザープールのクレームをそのまま利用する形にはならない

D APIキーは呼び出し元の識別と従量管理のための仕組みで、認証手段ではない。ユーザー認証の代替にしてはならない

IAM/Cognito

Q20. Cognitoユーザープールが発行する3種類のトークンについて、ユーザーの属性(メールアドレスやカスタム属性)を含み、アプリケーションが本人確認のために検証すべきものはどれですか?

  1. A. アクセストークン
  2. B. リフレッシュトークン
  3. C. IDトークン
  4. D. セッショントークン
答えと解説を見る

正解:C

A スコープに基づいてユーザープールのAPI操作やリソースサーバーへの認可に使うトークン。ユーザーの属性クレームは基本的に含まれない

B 有効期限が切れた他のトークンを再取得するためのもので、それ自体にユーザー属性の情報は持たない

C(正解) 正解。OpenID Connectで定義される認証結果を表すトークンで、subやemailなどのユーザー属性クレームを含む

D STSの一時認証情報に含まれる要素の名称であり、Cognitoユーザープールが発行する3種類のトークンには含まれない

IAM/Cognito

Q21. 観光情報アプリでは、サインインしていない訪問者にも一部のコンテンツをS3から直接読み取らせたいと考えています。サインイン済みユーザーには書き込みも許可します。最も適切な構成はどれですか?

  1. A. S3バケットをパブリック読み取りにし、サインイン済みユーザーだけIAMロールを使わせる
  2. B. アイデンティティプールで非認証アイデンティティを有効化し、非認証ロールに読み取りのみを許可する
  3. C. 共通のIAMユーザーを1つ作り、アクセスキーをアプリに埋め込む
  4. D. Cognitoユーザープールにゲスト用の共有アカウントを作成する
答えと解説を見る

正解:B

A バケット全体が誰にでも公開され、アクセス元の制御も監査もできなくなる。要件を満たす最小権限の構成ではない

B(正解) 正解。ゲストにもスコープを絞った一時認証情報を払い出せ、認証済みロールとは別のポリシーを適用できる

C 長期認証情報の配布であり抽出されるリスクが高い。ゲストと認証済みの権限分離もできない

D 全ゲストが同一の資格情報を共有することになり、パスワード管理と失効の運用が破綻する。標準の非認証アイデンティティを使うべき

IAM/Cognito

Q22. 外部のSaaSベンダーに、自社アカウントのS3バケットを読み取るためのIAMロールを引き受けさせます。他の顧客のロールARNを推測した第三者が誤って引き受けることを防ぐ必要があります。最も適切な設定はどれですか?

  1. A. ロールの信頼ポリシーでaws:SourceIpを条件に指定する
  2. B. ロールの最大セッション時間を1時間に短縮する
  3. C. 信頼ポリシーでsts:ExternalId条件を指定し、ベンダーに一意の値を使わせる
  4. D. ベンダー用にIAMユーザーを作成し、アクセスキーを共有する
答えと解説を見る

正解:C

A SaaS側の送信元IPが固定である保証がなく、変更のたびに更新が必要になる。混乱した代理問題への標準的な対策でもない

B 認証情報の露出期間は短くなるが、誰が引き受けられるかという問題は解決しない

C(正解) 正解。外部IDは混乱した代理問題を防ぐための仕組みで、値を知らない第三者はロールを引き受けられない

D 長期認証情報を社外に渡すことになりローテーションも困難。クロスアカウントアクセスはロールで行うのが原則

IAM/Cognito

Q23. あるIAMロールにはS3への全アクセスを許可するアイデンティティベースポリシーが付いていますが、対象バケットのバケットポリシーには当該ロールに対する明示的なDenyが含まれています。このロールでオブジェクトを取得しようとするとどうなりますか?

  1. A. 明示的なDenyが優先され、アクセスは拒否される
  2. B. アイデンティティベースポリシーが優先され、アクセスは許可される
  3. C. より新しく更新されたポリシーが優先される
  4. D. 同一アカウント内であればリソースベースポリシーは無視される
答えと解説を見る

正解:A

A(正解) 正解。IAMのポリシー評価ロジックでは、どのポリシーであっても明示的なDenyがあれば他のAllowを上書きして拒否となる

B アイデンティティベースポリシーがリソースベースポリシーより優先されるという規則はない。評価は両方を合わせて行われる

C ポリシーの更新日時が評価に影響することはない。もっともらしいが誤り

D 同一アカウントではどちらかのAllowで許可されうるという性質はあるが、明示的なDenyは常に評価される

IAM/Cognito

Q24. S3バケットへのオブジェクト作成イベントでLambda関数を起動する設定を追加しましたが、オブジェクトを置いても関数が実行されません。関数の実行ロールにはS3への読み取り権限が付与されています。最も可能性が高い原因はどれですか?

  1. A. 実行ロールにs3:PutObject権限がない
  2. B. Lambda関数がVPC内のプライベートサブネットに配置されていない
  3. C. S3バケットとLambda関数のリージョンが異なる
  4. D. 関数のリソースベースポリシーにS3からの呼び出し許可がない
答えと解説を見る

正解:D

A 実行ロールは関数自身が他サービスを呼ぶための権限であり、S3から呼ばれる側の可否には関与しない

B S3イベントによる起動にVPC配置は不要。むしろVPC配置はS3への到達経路の話であり、起動の可否とは別

C 確かに同一リージョンである必要があるが、その場合はイベント通知の設定自体が作成時に失敗する

D(正解) 正解。他サービスから関数を呼ばせるには、関数側のリソースベースポリシーでs3.amazonaws.comからのlambda:InvokeFunctionを許可する必要がある。コンソール経由の設定では自動付与されるが、手動やIaCでは明示が必要

IAM/Cognito

Q25. 開発者が自分の名前が付いたS3プレフィックスだけを操作できるようにしたいと考えています。開発者は50人おり、今後も増減します。ポリシーの本数を増やさずに実現する方法はどれですか?

  1. A. 開発者ごとに専用のIAMポリシーを作成し、それぞれのユーザーにアタッチする
  2. B. 全開発者に同じフルアクセスポリシーを付与し、命名規約で運用する
  3. C. ポリシー変数を使った1つのポリシーを開発者グループにアタッチする
  4. D. S3のオブジェクトタグに開発者名を設定し、タグベースで制御する
答えと解説を見る

正解:C

A 50本のポリシーを管理することになり、増減のたびに作成と削除が発生する。「本数を増やさずに」という要件に反する

B 規約は強制力がなく、他人のプレフィックスを操作できてしまう。最小権限の原則に反する

C(正解) 正解。Resourceに ${aws:username} を使うとリクエスト元のユーザー名に展開されるため、単一のポリシーで各自のプレフィックスに限定できる

D タグは書き込み時に本人が任意に設定できるため、他人の名前を付ければ回避できる。プレフィックス分離の手段としては弱い

IAM/Cognito

Q26. 社内の管理コンソール用IAMロールに対し、「社内オフィスのグローバルIPからのアクセスのみ許可する」「HTTPSでない通信は拒否する」という制約を加えたいと考えています。IAMポリシーで使う条件キーの組み合わせとして正しいものはどれですか?

  1. A. aws:SourceVpcとaws:SecureTransport
  2. B. aws:SourceIpとaws:SecureTransport
  3. C. aws:SourceIpとaws:RequestedRegion
  4. D. aws:PrincipalOrgIDとaws:TlsRequired
答えと解説を見る

正解:B

A aws:SourceVpcはVPCエンドポイント経由のアクセスに使う条件キーで、オフィスからのインターネット経由アクセスには適用されない

B(正解) 正解。aws:SourceIpで送信元IP範囲を、aws:SecureTransportがfalseの場合にDenyすることでHTTPS必須をそれぞれ表現できる

C aws:RequestedRegionはリクエスト先リージョンの制限であり、通信の暗号化の有無とは無関係

D架空 aws:PrincipalOrgIDは組織メンバーであることの判定に使う条件キー。aws:TlsRequiredという条件キーは存在しない

IAM/Cognito

Q27. EC2インスタンス上のWebアプリケーションにサーバーサイドリクエストフォージェリの脆弱性が見つかり、攻撃者がインスタンスメタデータサービスから一時認証情報を窃取できる可能性が指摘されました。アプリの改修と並行して行うべき緩和策はどれですか?

  1. A. インスタンスメタデータサービスをIMDSv2必須に設定する
  2. B. インスタンスプロファイルを外して認証情報をアプリの設定ファイルに書く
  3. C. セキュリティグループのアウトバウンドで169.254.169.254を拒否する
  4. D. インスタンスをプライベートサブネットへ移動する
答えと解説を見る

正解:A

A(正解) 正解。IMDSv2はPUTでセッショントークンを取得してから使うため、単純なGETを誘発するタイプのSSRFでは認証情報を取得できない

B 長期認証情報をディスクに置くことになり、ファイル読み取り型の攻撃で同様に窃取される。むしろ悪化する

C メタデータサービスへのアクセスはインスタンス内部のリンクローカル通信であり、セキュリティグループでは制御できない

D 外部からの直接到達は減るが、Webアプリが公開されている限りSSRFの経路は残る。メタデータの保護にはならない

IAM/Cognito

Q28. アカウントAのLambda関数から、アカウントBのDynamoDBテーブルへ書き込む必要があります。長期認証情報を使わない構成にします。最も適切な実装はどれですか?

  1. A. アカウントBでIAMユーザーを作成し、アクセスキーをアカウントAのSecrets Managerに保存する
  2. B. アカウントAのLambda実行ロールに、アカウントBのテーブルARNへのdynamodb:PutItemを許可する
  3. C. アカウントBにアカウントAを信頼するIAMロールを作り、Lambdaからsts:AssumeRoleで引き受ける
  4. D. 両アカウントをVPCピアリングで接続する
答えと解説を見る

正解:C

A 長期認証情報の利用を避けるという要件に反する。Secrets Managerに入れてもキー自体は長期のまま

B 呼び出し側の許可だけではクロスアカウントアクセスは成立しない。リソース側でも明示的に許可する必要があり、この設定だけではAccessDeniedExceptionになる

C(正解) 正解。返された一時認証情報でクライアントを初期化すれば、長期認証情報なしでクロスアカウントアクセスができる

D ネットワーク到達性の話であり、DynamoDBのようなリージョンサービスへの認可は解決しない

IAM/Cognito

Q29. sts:AssumeRoleで取得した一時認証情報を使う長時間バッチ処理が、開始から1時間ほど経過したところでExpiredTokenエラーで失敗します。最も適切な対処はどれですか?

  1. A. ロールの最大セッション時間を24時間に設定する
  2. B. AssumeRoleの代わりにIAMユーザーのアクセスキーを使う
  3. C. バッチ処理を1時間以内に終わるよう分割する
  4. D. SDKの認証情報プロバイダーに引き受け設定を渡し、期限前に自動で再取得させる
答えと解説を見る

正解:D

A ロールの最大セッション時間の上限は12時間であり、24時間は設定できない。ロールチェーンの場合はさらに1時間に制限される

B 有効期限の問題は消えるが、長期認証情報の管理という別のリスクを抱え込む。設計の後退となる

C 処理内容によっては分割できず、根本的にはトークンの更新で解決すべき問題を回避しているにすぎない

D(正解) 正解。SDKのロール引き受け用プロバイダーは有効期限を追跡して自動的に更新するため、長時間の処理でも中断しない

デプロイ

CodeシリーズCI/CD

Q30. Lambda関数の新バージョンを、まず10%のトラフィックで5分間観察し、CloudWatchアラームが発報したら自動的に旧バージョンへ戻す仕組みを構築します。最も適切な構成はどれですか?

  1. A. CodePipelineの手動承認アクションを挟み、担当者が判断して次のステージへ進める
  2. B. エイリアスの加重ルーティングを10%に設定し、問題があれば手動で0%に戻す
  3. C. CodeDeployでCanary10Percent5Minutesを指定する
  4. D. Lambdaのプロビジョニングされた同時実行を新バージョンに10%だけ割り当てる
答えと解説を見る

正解:C

A 人の判断に依存するため夜間や休日の異常に即応できない。自動ロールバックという要件を満たさない

B 段階的な切り替えはできるが、監視と切り戻しがすべて手作業になる。自動化の要件に届かない

C(正解) 正解。指定した割合と待機時間でエイリアスの加重を自動制御し、関連付けたCloudWatchアラームが発報すれば即座に旧バージョンへ戻す

D 実行環境の事前確保数の設定であり、トラフィックの配分やロールバックとは無関係

CodeシリーズCI/CD

Q31. CodeDeployでLambda関数をデプロイする際、新バージョンへトラフィックを流す前に自動テストを実行し、失敗したらデプロイを中止したいと考えています。appspec.yamlで指定すべきフックはどれですか?

  1. A. AfterAllowTraffic
  2. B. BeforeAllowTraffic
  3. C. ValidateService
  4. D. BeforeInstall
答えと解説を見る

正解:B

A トラフィックを新バージョンへ移した後に実行されるフック。事前検証には使えず、失敗を検知したときには既に利用者に影響が出ている

B(正解) 正解。トラフィック移行前に実行される検証用フックで、指定したLambda関数がFailedを返すとデプロイは中止されロールバックされる

C EC2やオンプレミス向けのデプロイで使われるフックで、Lambdaのデプロイでは利用できない

D EC2やECSのデプロイで使われるフック。Lambdaのappspecで指定できるフックは2種類のみ

CodeシリーズCI/CD

Q32. EC2 Auto Scalingグループ上のアプリケーションを更新します。要件は「デプロイ中も本番の処理能力を落とさないこと」「問題があれば即座に旧環境へ戻せること」で、一時的にインスタンス数が倍になるコストは許容できます。最も適切なCodeDeployの構成はどれですか?

  1. A. インプレースデプロイでOneAtATimeを指定する
  2. B. インプレースデプロイでAllAtOnceを指定する
  3. C. インプレースデプロイでHalfAtATimeを指定する
  4. D. Blue/Greenデプロイを構成し、新環境の検証後にロードバランサーのトラフィックを切り替える
答えと解説を見る

正解:D

A 1台ずつ更新するため処理能力が徐々に落ち、切り戻しも再デプロイになるため即座には戻せない

B 全台を同時に更新するためデプロイ中に処理能力が失われる。失敗時の影響も最大となる

C 半数ずつ更新するため処理能力が半減し、切り戻しにも同じ時間がかかる

D(正解) 正解。新旧の環境が並行して存在するため能力を落とさず、切り戻しはロードバランサーの向き先を戻すだけで完了する

CodeシリーズCI/CD

Q33. CodeBuildのビルドが毎回10分かかり、そのうち7分がnpmの依存関係ダウンロードに費やされています。ビルド時間を短縮する最も適切な設定はどれですか?

  1. A. buildspecのcacheを設定してキャッシュを有効化する
  2. B. コンピューティングタイプをより大きなインスタンスに変更する
  3. C. ビルドプロジェクトのタイムアウトを延長する
  4. D. buildspecのphasesからinstallフェーズを削除する
答えと解説を見る

正解:A

A(正解) 正解。cacheのpathsにnode_modulesなどを指定すればビルド間で依存関係を再利用でき、変更がない限りダウンロードをスキップできる

B CPUとメモリは増えるがダウンロードはネットワーク待ちが支配的で、時間短縮の効果は限定的。単価も上がる

C 打ち切られる時間が延びるだけで所要時間は変わらない。むしろ問題を放置する対処

D 依存関係が導入されずビルドが失敗する。所要時間の削減にはなっても成果物が得られない

CodeシリーズCI/CD

Q34. CodeBuildのビルド中に、プライベートなパッケージレジストリへの認証トークンが必要です。トークンをbuildspec.ymlやビルド環境変数に平文で書きたくありません。最も適切な方法はどれですか?

  1. A. トークンをソースリポジトリの.envファイルに置き、buildspecから読み込む
  2. B. ビルドプロジェクトのプレーンテキスト環境変数に設定する
  3. C. buildspecのenvでシークレットを参照し、実行時に解決させる
  4. D. トークンをビルドイメージに焼き込んだカスタムイメージを使う
答えと解説を見る

正解:C

A リポジトリを閲覧できる全員にトークンが見えてしまう。最も避けるべき保存場所

B プロジェクト設定やビルドログで値が露出しうる。平文で書きたくないという要件に反する

C(正解) 正解。envのsecrets-managerやparameter-storeで参照すると、値はビルドサービスロールの権限で実行時に取得され、定義にはキー名だけが残る

D イメージを取得できる者に読まれるうえ、ローテーションのたびにイメージの再作成が必要になる

CodeシリーズCI/CD

Q35. CodeBuildのテストフェーズで、プライベートサブネットにあるAuroraデータベースへ接続して結合テストを実行する必要があります。データベースをインターネットに公開することはできません。最も適切な設定はどれですか?

  1. A. Auroraにパブリックアクセスを許可し、CodeBuildのIPを許可する
  2. B. ビルドプロジェクトのVPC設定でサブネットとセキュリティグループを指定する
  3. C. CodeBuildのサービスロールにrds:Connect権限を付与する
  4. D. AuroraのセキュリティグループでCodeBuildのマネージドプレフィックスリストを許可する
答えと解説を見る

正解:B

A CodeBuildの送信元IPは固定されず、データベースを公開する時点で要件に反する

B(正解) 正解。ビルドコンテナがVPC内にENIを持ち、プライベートなリソースへ到達できる。外部通信が必要ならNATゲートウェイを併用する

C IAMの許可があってもネットワーク経路がなければ接続できない。到達性の問題は解決しない

D VPCに接続していないビルド環境の通信はVPC外から来るため、セキュリティグループでの許可対象にならない

CodeシリーズCI/CD

Q36. CodePipelineで、ビルドステージの成果物をデプロイステージへ引き渡す仕組みについて、正しい記述はどれですか?

  1. A. 各ステージは独立しており、成果物の受け渡しには専用のEFSを共有する必要がある
  2. B. 成果物はパイプラインのメモリ上に保持され、パイプライン終了時に破棄される
  3. C. 成果物はCodeArtifactリポジトリに自動的に発行される
  4. D. アーティファクトストアのS3バケット経由で受け渡される
答えと解説を見る

正解:D

A EFSの共有は不要。CodePipelineは成果物の受け渡しを標準機能として提供する

B 成果物は永続化されるストアに保存される。メモリ上で受け渡す仕組みではない

C CodeArtifactはパッケージ管理のためのサービスで、パイプラインの入出力アーティファクトの保管先ではない

D(正解) 正解。アクションの出力アーティファクトがアーティファクトストアのS3バケットへ暗号化して保存され、後続アクションが入力アーティファクトとして取得する

CodeシリーズCI/CD

Q37. 本番環境へのデプロイの直前に、リリース責任者の承認を必須にしたいと考えています。承認待ちの通知も送りたいと考えています。最も適切な構成はどれですか?

  1. A. CodePipelineに手動承認アクションを追加し、SNSトピックを通知先に指定する
  2. B. 本番デプロイ用のパイプラインを分け、責任者に手動で実行してもらう
  3. C. デプロイステージの前にWaitステートを持つStep Functionsを挟む
  4. D. CodeDeployのデプロイ設定で承認待ちのフックを指定する
答えと解説を見る

正解:A

A(正解) 正解。承認されるまでパイプラインは待機し、承認・却下のアクションはIAMで制御できる

B 実現できるがパイプラインが分断され、どのビルド成果物がデプロイされるかの追跡が難しくなる

C 時間による待機であって承認ではない。誰が承認したかの記録も残らない

D CodeDeployのフックは検証用のスクリプトや関数を実行する仕組みで、人による承認の待機を担うものではない

CodeシリーズCI/CD

Q38. CodeCommitリポジトリへのコミットからパイプラインが起動するまでに最大5分の遅延があります。パイプラインのソースアクションはポーリングで構成されています。最も適切な改善はどれですか?

  1. A. ポーリング間隔を短くする設定に変更する
  2. B. CodePipelineをEventBridge Schedulerで1分ごとに実行する
  3. C. 検出方法をEventBridgeイベントに変更し、リポジトリの変更でパイプラインを起動する
  4. D. ソースをS3に変更し、開発者にZIPをアップロードしてもらう
答えと解説を見る

正解:C

A ポーリング間隔は利用者が任意に短縮できる設定として提供されていない。仕組み自体を変えるべき

B コミットがなくてもパイプラインが動き、無駄なビルドとコストが発生する。イベント駆動になっていない

C(正解) 正解。イベント駆動になることで遅延がほぼなくなり、無駄なポーリングも解消する。推奨される検出方法でもある

D リポジトリを起点とした開発フローが壊れ、手作業が増える。改善ではなく後退

CodeシリーズCI/CD

Q39. CodeDeployでECSサービスをBlue/Greenデプロイします。新しいタスクセットに本番トラフィックを流す前に、別ポートのテストリスナー経由で検証を行いたいと考えています。使用するフックはどれですか?

  1. A. BeforeInstall
  2. B. AfterAllowTestTraffic
  3. C. AfterAllowTraffic
  4. D. ApplicationStart
答えと解説を見る

正解:B

A 置き換え用タスクセットの作成前に実行されるフックで、テストトラフィックはまだ流れていない

B(正解) 正解。テストリスナー経由でトラフィックが流れた後に実行されるため、この段階で検証を行い失敗ならデプロイを中止できる

C 本番リスナーの切り替え後に実行される。この時点では既に利用者へ影響が出ている

D EC2やオンプレミス向けのインプレースデプロイで使われるフックで、ECSのappspecでは指定できない

CodeシリーズCI/CD

Q40. Elastic Beanstalk環境へアプリケーションをデプロイします。要件は「デプロイ中に容量を落とさないこと」「新旧バージョンが同一インスタンス上に混在しないこと」「切り戻しが高速なこと」で、追加インスタンスのコストは許容できます。最も適切なデプロイポリシーはどれですか?

  1. A. ローリング
  2. B. 追加バッチによるローリング
  3. C. Immutable
  4. D. All at once
答えと解説を見る

正解:C

A バッチ単位で既存インスタンスを更新するため、デプロイ中の容量が一時的に低下する

B 容量は維持できるが、既存インスタンスを順次更新するため新旧が混在し、切り戻しにも再デプロイが必要になる

C(正解) 正解。新しいインスタンス群を別のAuto Scalingグループに作成してから切り替えるため、混在せず容量も落ちない。失敗時は新規グループを破棄するだけで戻せる

D 全インスタンスを同時に更新するため、デプロイ中はサービスが停止する。最も高速だが可用性の要件を満たさない

CodeシリーズCI/CD

Q41. Elastic Beanstalk環境で、新バージョンへごく一部の利用者だけをまず誘導し、問題がなければ全体へ広げたいと考えています。ロードバランサーを使うウェブサーバー環境です。最も適切なデプロイポリシーはどれですか?

  1. A. トラフィック分割
  2. B. Immutable
  3. C. ローリング
  4. D. All at once
答えと解説を見る

正解:A

A(正解) 正解。新バージョンのインスタンスへ指定した割合のトラフィックを一定時間流し、健全性を確認してから全体へ移行するカナリアデプロイを行う

B 新旧の混在は防げるが、切り替えは一括で行われる。割合を指定した段階的な誘導はできない

C インスタンスを順に更新するだけで、トラフィックの割合を制御する仕組みはない

D 全インスタンスを一斉に更新するため、段階的な誘導とは正反対の挙動になる

トラブルシューティングと最適化

X-Ray/CloudWatch/デバッグ

Q42. API Gateway・Lambda・DynamoDB・外部APIから構成されるサービスで、特定のリクエストだけ応答が遅い原因を切り分けたいと考えています。どの区間で時間がかかっているかを可視化する最も適切な方法はどれですか?

  1. A. CloudWatchのDurationメトリクスをLambda関数ごとに確認する
  2. B. X-Rayのアクティブトレースを有効化し、サービスマップとトレースの詳細を確認する
  3. C. CloudWatch Logs Insightsで全ログを集計する
  4. D. CloudTrailでAPI呼び出しの履歴を確認する
答えと解説を見る

正解:B

A 関数全体の実行時間はわかるが、その内訳がDynamoDBなのか外部APIなのかを切り分けられない

B(正解) 正解。呼び出し先ごとのサブセグメントで所要時間が分解され、どのダウンストリームが遅延の原因かを特定できる

C アプリが出力した情報しか分析できず、外部呼び出しの内訳を得るには計測コードの実装が別途必要になる

D 誰がいつ管理操作を行ったかの監査記録であり、リクエストごとの処理時間の内訳は取得できない

X-Ray/CloudWatch/デバッグ

Q43. X-Rayのトレースを、特定の顧客IDに絞って検索できるようにしたいと考えています。SDKでセグメントに情報を付加する際、適切な方法はどれですか?

  1. A. メタデータとして顧客IDを追加する
  2. B. セグメント名に顧客IDを含める
  3. C. アノテーションとして顧客IDを追加する
  4. D. サンプリングルールの属性に顧客IDを設定する
答えと解説を見る

正解:C

A メタデータはトレースに保存されるがインデックス化されないため、フィルタ式による検索の対象にならない

B セグメント名が顧客ごとに増えてサービスマップが破綻する。カーディナリティの高い値を名前に入れるのは不適切

C(正解) 正解。アノテーションはインデックス化されるため、コンソールのフィルタ式でannotation.customerId = "..." のように検索できる

D サンプリングルールは記録する割合を決めるもので、個々のトレースに検索可能な属性を付ける仕組みではない

X-Ray/CloudWatch/デバッグ

Q44. ECS上のアプリケーションでX-Ray SDKを組み込みましたが、トレースがコンソールに表示されません。Lambdaでは同じSDKでトレースが記録されています。最も可能性が高い原因はどれですか?

  1. A. X-Rayデーモンがサイドカーコンテナとして稼働していない
  2. B. タスク定義のネットワークモードがawsvpcである
  3. C. X-Rayのサンプリングルールが既定のままである
  4. D. ECSサービスのヘルスチェックが失敗している
答えと解説を見る

正解:A

A(正解) 正解。EC2やECSではSDKがUDPでデーモンへセグメントを送るため、デーモンの稼働が前提となる。Lambdaでは実行環境に組み込まれているため不要

B awsvpcはFargateでも標準的に使われるモードで、トレースの送信を妨げるものではない

C 既定のルールでも毎秒1件は必ず記録される。まったく表示されない状況の説明にならない

D アプリが動作していない状況であればトレース以前にサービスが提供されない。前提と矛盾する

X-Ray/CloudWatch/デバッグ

Q45. Lambda関数でX-Rayのアクティブトレースを有効化しましたが、トレースが記録されません。関数自体は正常に動作しています。最も可能性が高い原因はどれですか?

  1. A. 関数のタイムアウトが短すぎる
  2. B. 関数がVPC内に配置されている
  3. C. X-Rayのサンプリングルールで対象外になっている
  4. D. 実行ロールにX-Rayへの書き込み権限がない
答えと解説を見る

正解:D

A 関数が正常終了している時点でタイムアウトには達していない。トレース欠落の説明にならない

B VPC配置の有無はトレースの送信可否に影響しない。Lambdaのトレース送信は実行環境が担う

C 既定のサンプリングでも一定量は記録されるため、まったく出ない状況の主因としては考えにくい

D(正解) 正解。トレースの送信は関数の実行ロールの権限で行われるため、xray:PutTraceSegmentsとxray:PutTelemetryRecordsを含むAWSXRayDaemonWriteAccess相当の許可が必要になる

X-Ray/CloudWatch/デバッグ

Q46. 本番環境でX-Rayを有効にしたところ、トレース件数が膨大になりコストが問題になりました。障害調査に必要な代表的なトレースは残しつつ記録量を減らしたいと考えています。最も適切な方法はどれですか?

  1. A. X-Rayを一部の関数だけ無効化する
  2. B. カスタムサンプリングルールを作成し、リザーバーサイズと固定レートを調整する
  3. C. トレースの保持期間を1日に短縮する
  4. D. アノテーションの数を減らす
答えと解説を見る

正解:B

A 無効化した区間のトレースが欠落し、サービスマップが分断されて調査の役に立たなくなる

B(正解) 正解。毎秒の最低記録件数とそれを超える分の割合を指定でき、パスやサービス名ごとに異なるルールを適用できる

C X-Rayのトレース保持期間は利用者が任意に設定するものではなく、記録件数に応じた課金も変わらない

D 1トレースあたりの情報量が減るだけで、トレース件数に基づく課金は変わらない

X-Ray/CloudWatch/デバッグ

Q47. Lambda関数がCloudWatch Logsにまったくログを出力しません。関数のコードにはログ出力の処理が含まれており、関数は正常に完了しています。最も可能性が高い原因はどれですか?

  1. A. ロググループの保持期間が0日に設定されている
  2. B. 関数のメモリが不足してログバッファが破棄されている
  3. C. 実行ロールにログ書き込みの権限がない
  4. D. 関数がVPC内に配置されており、NATゲートウェイがない
答えと解説を見る

正解:C

A 保持期間に0日という設定はなく、既定は無期限。設定できる最短でも1日で、即座に消えるわけではない

B メモリ不足であれば関数自体がエラーで終了する。正常完了しているという前提と矛盾する

C(正解) 正解。logs:CreateLogStreamやlogs:PutLogEventsも実行ロールの権限で行われるため、基本的な実行ロールポリシーが欠けているとログだけが出なくなる

D Lambdaのログ出力は実行環境が担い、利用者のVPCの経路を通らない。VPC設定はログ欠落の原因にならない

X-Ray/CloudWatch/デバッグ

Q48. アプリケーションログに "ERROR" が5分間に10回以上出現したら運用チームへ通知したいと考えています。ログはCloudWatch Logsに集約済みです。最も適切な構成はどれですか?

  1. A. ロググループにメトリクスフィルターを作成し、アラームを設定する
  2. B. Logs Insightsのクエリを保存し、5分ごとに手動で実行する
  3. C. サブスクリプションフィルターでLambdaを起動し、関数内でカウントして通知する
  4. D. CloudTrailでエラーイベントを検知してEventBridgeで通知する
答えと解説を見る

正解:A

A(正解) 正解。パターンに一致したログ行をカウントするカスタムメトリクスが生成され、しきい値超過でSNSへ通知できる

B 手作業になり通知も自動化されない。夜間や休日の検知ができない

C 実現できるがカウントの集計と時間窓の管理を自作することになる。標準機能で済む要件には過剰

D CloudTrailはAPI呼び出しの監査記録であり、アプリケーションが出力したログの内容は対象外

X-Ray/CloudWatch/デバッグ

Q49. Lambda関数から、注文金額や処理件数といったビジネス指標をCloudWatchのカスタムメトリクスとして記録したいと考えています。PutMetricDataの同期呼び出しによる実行時間の増加は避けたいと考えています。最も適切な方法はどれですか?

  1. A. PutMetricDataを非同期で呼び出し、応答を待たない
  2. B. メトリクスをDynamoDBに書き込み、別のLambdaが集計してPutMetricDataを呼ぶ
  3. C. X-Rayのアノテーションとして記録する
  4. D. 埋め込みメトリクスフォーマット(EMF)の構造化ログを標準出力に書き出す
答えと解説を見る

正解:D

A 関数の実行が終わると処理が打ち切られるため、送信が完了しない可能性がある。信頼性に欠ける

B 実現できるが中間テーブルと集計処理の運用が増える。標準の仕組みで代替できる

C トレースの検索には使えるが、CloudWatchのメトリクスとしてアラームやダッシュボードに利用することはできない

D(正解) 正解。CloudWatch Logsが取り込む際にメトリクスを自動抽出するため、API呼び出しの待ち時間なしにカスタムメトリクスを記録できる

X-Ray/CloudWatch/デバッグ

Q50. EC2インスタンスのCloudWatchメトリクスを確認したところ、CPU使用率やネットワークの指標はあるのに、メモリ使用率とディスク空き容量が見当たりません。最も適切な対処はどれですか?

  1. A. 詳細モニタリングを有効化する
  2. B. インスタンスタイプを変更してメトリクスを有効化する
  3. C. CloudWatchエージェントをインストールし、メモリとディスクの収集を設定する
  4. D. インスタンスにCloudWatch Logsのロググループを作成する
答えと解説を見る

正解:C

A 収集間隔が5分から1分に短くなるだけで、取得できるメトリクスの種類は増えない

B インスタンスタイプによって取得できる標準メトリクスの種類が変わるわけではない

C(正解) 正解。メモリやディスクの空き容量はゲストOS内部の情報のため、ハイパーバイザーからは観測できずエージェントによる収集が必要になる

D ログの保存先を作るだけで、メトリクスの収集とは別の機能

続きは演習アプリで

このページの50問は、演習アプリなら弱点に合わせた出題・成績記録つきで解けます。全220問と本番形式の模擬試験は期間パス(1,500円/30日、自動更新なし)で利用できます。

AWS DVAの演習を無料で始める →

AWS DVA問題集の詳細(出題範囲・よくある質問)→

掲載している問題はすべてトキヌクのオリジナル問題です。実試験問題の流出コピー(ブレインダンプ)は一切使用していません。本サービスは非公式の学習教材であり、各認定団体とは提携・承認・後援関係にありません。試験名は各団体の商標または登録商標です。
トキヌク トップページへ