AWS認定資格 WEB問題集&徹底解説
ソリューションアーキテクト-プロフェッショナル
問題文と選択肢
- 500台のデバイスが Amazon Kinesis Data Streams にデータを送信
- 各デバイスは個別のシャード(合計500シャード)を使用し、毎秒50KB〜150KBのデータを送信
- AWS Lambda 関数がデータを処理し、結果を Amazon S3 に保存
- 別の Lambda 関数が1時間ごとに Amazon Athena クエリを実行し、外れ値を Amazon SQS キューに送信(通常10〜50メッセージ/時間)
- 2台の EC2 インスタンス(各 t3.medium)が SQS キューを24時間常時ポーリングし、外れ値を処理
このアーキテクチャのコストを最も大幅に削減する方法は何ですか?
- 外れ値処理用の EC2 インスタンスのタイプを t3.medium から t3.small に変更する
- 5 台のデバイスで 1 つの Amazon Kinesis Data Streams のシャードを共有するようにデバイスを再構成する
- Amazon SQS キューを処理する EC2 インスタンスを AWS Lambda 関数に置き換え、Amazon SQS をイベントソースとして設定する
- Amazon EC2 Auto Scaling グループを導入し、Amazon SQS キューの深さに応じて EC2 インスタンスをスケールさせる
A. 外れ値処理用の EC2 インスタンスのタイプを t3.medium から t3.small に変更する
t3.medium から t3.small へのダウンサイジングは、2 台分で月額数十ドル程度の削減にしかならない。
しかもこの EC2 は SQS を 24 時間ポーリングし続ける構成のままで、アイドル時間に課金され続ける無駄は解消されない。
「最も大幅に削減する」という設問の要求に対して、削減規模が 2 桁以上小さく、最適解にならない。
B. 5 台のデバイスで 1 つの Amazon Kinesis Data Streams のシャードを共有するようにデバイスを再構成する
Amazon Kinesis Data Streams(プロビジョンドモード)はシャード時間に対して課金され、1 シャードあたり月額約 11 ドル。500 シャードでは月額約 5,500 ドルに達し、このアーキテクチャで圧倒的に支配的なコストである。
一方、1 シャードは書き込み 1MB/秒(1,000 レコード/秒)まで受け付けられるのに対し、各デバイスは最大 150KB/秒しか送っていない。5 台をまとめても最大 750KB/秒で 1MB/秒の上限内に収まり、シャードを 500 本から 100 本へ削減できる。
データを捨てることも処理を変えることもなく、月額約 4,400 ドル(約 80%)の削減となるため、これが最も効果の大きい対策となる。
C. Amazon SQS キューを処理する EC2 インスタンスを AWS Lambda 関数に置き換え、Amazon SQS をイベントソースとして設定する
常時ポーリングする EC2 をイベント駆動の AWS Lambda に置き換えるのは、アーキテクチャとしては正しい改善である。1 時間に 10〜50 メッセージという間欠処理なら、Lambda の実行時間課金はごくわずかで済む。
しかし削減できるのは t3.medium 2 台分(月額約 60 ドル)にすぎず、シャード削減の約 4,400 ドルとは規模が違う。
「最も大幅に」削減する対策を 1 つ選ぶ本問では、コストの支配要因に手を付けていないため不正解となる。
D. Amazon EC2 Auto Scaling グループを導入し、Amazon SQS キューの深さに応じて EC2 インスタンスをスケールさせる
Auto Scaling でキューの深さに応じてスケールさせても、ベースラインのインスタンスは動き続けるため削減幅は限定的で、対象は同じ月額約 60 ドルの EC2 コストにとどまる。
1 時間ごとに 10〜50 メッセージという負荷は現状 2 台で十分にさばけており、スケールアウトの必要性自体が薄い。
Kinesis のシャード課金には一切影響しないため、最大のコスト源が手つかずのまま残る。
Kinesis の請求はシャード時間。1 シャード=1MB/秒。デバイス数ではなくスループットで割り当てるのが正解。
正解への思考ルート
問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。| 要件 | 判断ポイント |
|---|---|
| 500 デバイスに対しシャードを 500 本プロビジョニングしている | Kinesis Data Streams はシャード時間課金。500 シャード=月額約 5,500 ドルで、このアーキテクチャの支配的コスト →選択肢(B)が正解 |
| 各デバイスの送信量は最大 150KB/秒 | 1 シャードの書き込み上限は 1MB/秒。5 台(最大 750KB/秒)なら 1 シャードに収まり、100 シャードまで削減できる →選択肢(B)が正解 |
| 外れ値処理は 1 時間あたり 10〜50 メッセージ(間欠的) | EC2 常時稼働は無駄だが、対象は t3.medium 2 台=月額約 60 ドル。削減余地の絶対額が小さい →選択肢(C・D)は候補だが劣後 |
| 「最もコストを大幅に削減する」方法を 1 つ選ぶ | 各案の削減額を概算して比較する。インスタンスのダウンサイジングは数十ドル規模で、シャード削減(約 4,400 ドル)に遠く及ばない →選択肢(A)を消す |
ひっかけポイント
- 選択肢 C は「常時ポーリングの EC2 を Lambda に置き換える」という教科書的に正しい改善で、つい選びたくなる。しかし本問が問うのは削減額の大きさであり、月額約 60 ドルの対象を最適化しても意味が薄い
- 「デバイス 1 台につきシャード 1 本」という構成を当然の前提として読み飛ばさない。シャードはスループット単位であって、送信元ごとに用意するものではない
- シャード削減の可否は最大値 150KB/秒 で計算する。平均値(50KB/秒)で「20 台まとめられる」と考えるとピーク時に ProvisionedThroughputExceededException を起こす
- 選択肢 A の t3.small へのダウンサイズは、コスト削減案として形だけ成立しているためもっともらしいが、桁が違う。SAP では「何が最大のコストドライバーか」を必ず先に特定する
出題バリエーション
同じ知識が本番では条件を変えて出題されます。| 問題文がこう変わったら | 正解はこう変わる |
|---|---|
| 「トラフィックが予測不能で、シャード数の見積もりを避けたい」 | Kinesis Data Streams のオンデマンドモード(スループット課金)が正解軸に。 |
| 「EC2 の常時ポーリングによる運用負荷をなくしたい(コストは主眼でない)」 | SQS をイベントソースにした Lambda(選択肢 C)が正解に浮上する。 |
| 「デバイスが各 800KB/秒を送信している」 | 1 シャード=1MB/秒のため集約の余地はほぼ無くなり、シャード削減は不正解になる。 |
| 「Athena のクエリコストを下げたい」 | S3 データの Parquet 化・パーティショニング・圧縮(スキャン量削減)が正解軸に。 |
| 「Kinesis のデータをコード無しで S3 に配信したい」 | Amazon Data Firehose による配信が正解軸になる。 |
- 500台のデバイスが Amazon Kinesis Data Streams にデータを送信
- 各デバイスは個別のシャード(合計500シャード)を使用し、毎秒50KB〜150KBのデータを送信
- AWS Lambda 関数がデータを処理し、結果を Amazon S3 に保存
- 別の Lambda 関数が1時間ごとに Amazon Athena クエリを実行し、外れ値を Amazon SQS キューに送信(通常10〜50メッセージ/時間)
- 2台の EC2 インスタンス(各 t3.medium)が SQS キューを24時間常時ポーリングし、外れ値を処理
このアーキテクチャのコストを最も大幅に削減する方法は何ですか?
- 外れ値処理用の EC2 インスタンスのタイプを t3.medium から t3.small に変更する
- 5 台のデバイスで 1 つの Amazon Kinesis Data Streams のシャードを共有するようにデバイスを再構成する
- Amazon SQS キューを処理する EC2 インスタンスを AWS Lambda 関数に置き換え、Amazon SQS をイベントソースとして設定する
- Amazon EC2 Auto Scaling グループを導入し、Amazon SQS キューの深さに応じて EC2 インスタンスをスケールさせる