模擬問題集DVA-C02練習問題 7

DVA-C02 練習問題 7

AWS Developer – Associate・AWS のサービスを使用した開発・無料公開(全 200 問中 15 問を無料公開中)

問題
ある開発者が、IoT デバイス上にデプロイされるアプリケーションを作成しています。このアプリケーションは、AWS Lambda 関数としてデプロイされた RESTful API にデータを送信します。アプリケーションは各 API リクエストに一意の識別子を割り当てます。アプリケーションからの API リクエストの量は、1 日のうちの任意の時間にランダムに増加することがあります。 リクエストのスロットリング期間中、アプリケーションはリクエストを再試行する必要が生じる場合があります。API は、不整合やデータ損失なしに重複リクエストを処理できる必要があります。 これらの要件を満たすソリューションはどれですか?

選択肢と解説

  • 1
    Amazon RDS for MySQL DB インスタンスを作成する。各リクエストの一意の識別子をデータベーステーブルに保存する。リクエストを処理する前にテーブルでその識別子を確認するよう Lambda 関数を変更する。
  • Amazon DynamoDB テーブルを作成する。各リクエストの一意の識別子をテーブルに保存する。リクエストを処理する前にテーブルでその識別子を確認するよう Lambda 関数を変更する。
  • 3
    Amazon DynamoDB テーブルを作成する。各リクエストの一意の識別子をテーブルに保存する。重複リクエストを受け取ったときにクライアントエラーレスポンスを返すよう Lambda 関数を変更する。
  • 4
    Amazon ElastiCache for Memcached インスタンスを作成する。各リクエストの一意の識別子をキャッシュに保存する。リクエストを処理する前にキャッシュでその識別子を確認するよう Lambda 関数を変更する。

解説

【正解】B

【0からの解説】
この問題が問うているのは「べき等性(idempotency)」です。クライアントがリクエストを再試行すると同じリクエストが重複して届くことがありますが、API は「同じ処理を二重に実行しない」「データ損失を起こさない」必要があります。各リクエストには一意の識別子(べき等性キー)が付いているので、処理の前にその識別子を保存済みストアで照合し、未処理なら処理して記録、処理済みなら処理をスキップ(または同じ結果を返す)ようにします。
このストアには、低レイテンシ・サーバーレスでスケールし、条件付き書き込みで原子的な重複チェックができる Amazon DynamoDB が最適です。ランダムなトラフィック急増にもサーバー管理なしで追従でき、Lambda との相性も良好です。

【誤りの選択肢】
A:RDS for MySQL でも識別子の保存・照合は可能ですが、突発的なスパイクへのスケーリングや接続管理の点でサーバーレスの DynamoDB に劣り、運用負荷が高くなります。
C:DynamoDB に保存する点は良いものの、重複時に常にクライアントエラーを返す設計は不適切です。再試行は正当な動作であり、元のリクエストが成功していれば本来は成功結果(または冪等な無害応答)を返すべきで、エラー扱いにすると「データ損失なし」の要件と整合しません。
D:ElastiCache for Memcached は揮発性のキャッシュで永続性がなく、ノード障害や項目の追い出し(エビクション)で識別子が失われる可能性があります。重複検知の確実な記録には永続的な DynamoDB が適切です。

【参考】
Lambda 関数でのべき等性の実装
DynamoDB の条件付き書き込み
← 練習問題 6練習問題 8
DVA-C02 の模擬問題集は全 200

本番形式の練習テスト 4 回を、試験モード/演習モードで受験できます。 全問に解説付き、ドメイン別の弱点分析にも対応。模試プラン(月額 ¥980)からご利用いただけます。

DVA-C02 の模試を受ける料金プランを見る

DVA-C02 の無料公開問題

問題 1問題 2問題 3問題 4問題 5問題 6問題 7問題 8問題 9問題 10問題 11問題 12問題 13問題 14問題 15