【正解】A
【0からの解説】
要件を分解します。
(1)「NFS 互換の永続的な共有ストレージ」「2〜30 台の複数 EC2 から同時アクセス」→ 複数の EC2 から同時マウントできる NFS 共有ファイルシステムが必要なので Amazon EFS が最適です。EFS は数千台規模まで同時マウントでき、自動でスケール・冗長化されます。
(2)「ウェブサイトへの変更を一切必要としない」「予測不能なトラフィックに 2〜30 台でスケール」「データ損失防止」→ アプリ無改修で迅速にデプロイ・自動スケールするなら AWS Elastic Beanstalk(ALB+Auto Scaling グループ)が適しています。.ebextensions を使えば各インスタンス起動時に EFS をマウントする設定をコード化できます。
(3) MySQL データベースは、データ損失防止(マルチ AZ・自動バックアップ)と性能の観点から、Beanstalk 環境とは分離したマネージド DB(Amazon Aurora MySQL)として作成します。Beanstalk 環境内に DB を作ると環境削除時に DB も消えるリスクがあるため、分離が定石です。
【誤りの選択肢】
B:EBS マルチアタッチは同一 AZ の限られたインスタンス(最大 16)にしかアタッチできず、クラスター対応ファイルシステムが別途必要で、NFS 共有でもありません。30 台規模・複数 AZ・無改修の要件に不向きです。さらに Beanstalk 環境内に DB を作る構成はデータ損失リスクがあります。
C:EFS のマウントは「スケールイン」ではなく「スケールアウト(起動)時」に行う必要があります。スケールイン用ライフサイクルフックでマウントするという記述が論理的に誤りです。
D:EBS マルチアタッチは前述の制約に加え、ElastiCache for Redis は MySQL データベースの「代替」にはならない(キャッシュであり永続 RDB ではない)ため、データ損失防止の要件を満たしません。
【参考】
Amazon EFS とはElastic Beanstalk と EFS の連携