トキヌク

AWS DVA サンプル問題

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

30問無料公開 全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回あたりの初期化コストは変わらない。むしろ正常処理まで失敗させるリスクがある

DynamoDB2つ選択

Q9. 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つ選択

Q10. 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

Q11. モバイルアプリでユーザーのサインアップとサインインを実装し、認証されたユーザーだけが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

Q12. 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

Q13. 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

Q14. 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

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

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

正解:B

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

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

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

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

IAM/Cognito

Q16. 外部の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

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

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

正解:A

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

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

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

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

IAM/Cognito

Q18. 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では明示が必要

デプロイ

CodeシリーズCI/CD

Q19. 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

Q20. 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

Q21. 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

Q22. 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

Q23. 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

Q24. 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

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

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

正解:D

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

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

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

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

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

X-Ray/CloudWatch/デバッグ

Q26. 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/デバッグ

Q27. 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/デバッグ

Q28. 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/デバッグ

Q29. 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/デバッグ

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

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

正解:B

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

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

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

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

続きは演習アプリで

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

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

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

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