【正解】B
【0からの解説】
この問題が問うているのは「べき等性(idempotency)」です。クライアントがリクエストを再試行すると同じリクエストが重複して届くことがありますが、API は「同じ処理を二重に実行しない」「データ損失を起こさない」必要があります。各リクエストには一意の識別子(べき等性キー)が付いているので、処理の前にその識別子を保存済みストアで照合し、未処理なら処理して記録、処理済みなら処理をスキップ(または同じ結果を返す)ようにします。
このストアには、低レイテンシ・サーバーレスでスケールし、条件付き書き込みで原子的な重複チェックができる Amazon DynamoDB が最適です。ランダムなトラフィック急増にもサーバー管理なしで追従でき、Lambda との相性も良好です。
【誤りの選択肢】
A:RDS for MySQL でも識別子の保存・照合は可能ですが、突発的なスパイクへのスケーリングや接続管理の点でサーバーレスの DynamoDB に劣り、運用負荷が高くなります。
C:DynamoDB に保存する点は良いものの、重複時に常にクライアントエラーを返す設計は不適切です。再試行は正当な動作であり、元のリクエストが成功していれば本来は成功結果(または冪等な無害応答)を返すべきで、エラー扱いにすると「データ損失なし」の要件と整合しません。
D:ElastiCache for Memcached は揮発性のキャッシュで永続性がなく、ノード障害や項目の追い出し(エビクション)で識別子が失われる可能性があります。重複検知の確実な記録には永続的な DynamoDB が適切です。
【参考】
Lambda 関数でのべき等性の実装DynamoDB の条件付き書き込み