助け合いフォーラム

AWS

AWS ソリューションアーキテクト - アソシエイト(SAA-C02)
問題ID : 28748
問題を開く
企業では、インターネット上のハッシュタグデータを収集するアプリケーションを検討している。アプリケーションは数万~数十万のユーザー数を想定している。収集したデータは、管理用のメタデータを加えて保存し、リアルタイムな分析やデータ処理に活用したい。
これらの要件を満たすには、どのソリューションが適切か。

正解

Amazon Kinesis Data Streamsでデータを収集し、Lambda関数でメタデータを追加する。データはAmazon DynamoDBに保存する

解説

本設問のポイントは、「インターネット上の数万~数十万件のハッシュタグデータを扱う」「データは加工が必要である」「リアルタイムな分析やデータ処理に活用したい」という点です。

インターネット上のハッシュタグのような、継続的に生成されるデータをストリーミングデータといいます。ストリーミングデータを扱うサービスには「Amazon Kinesis」があります。
Kinesis Data Streamsは外部から送信されるストリーミングデータを収集します。センサーなどが生成したストリーミングデータをKinesis Data Streamsのストリームへ送信し、ストリーム上のデータは分析や機械学習などを行うアプリケーションがリアルタイムに読みだして処理します。

収集したデータを分析・加工するには「AWS Lambda(ラムダ)」を利用します。Lambdaはサーバーレスでプログラムのコードを実行できるサービスです。サーバーレスとはAmazon EC2などのサーバーを必要とせず、リクエスト発生時にだけプログラムが実行されるアーキテクチャのことです。
LambdaではKinesis Data Streamと連携し、ストリーミングデータを処理できます。Lambda関数の作成時には、Kinesisのストリーミングデータを利用するテンプレートも用意されています。


さらに、「リアルタイムな分析やデータ処理に活用したい」という要件により、応答性の高いデータベースが求められます。データベースサービスのうち、「Amazon DynamoDB」は容量が無制限かつ高パフォーマンスで、データ収集など大容量データの蓄積に利用されます。DynamoDBはミリ秒単位のパフォーマンスを実現するデータベースであり、リアルタイムなデータ処理が必要なケースに適しています。

以上より、正解は
・Amazon Kinesis Data Streamsでデータを収集し、Lambda関数でメタデータを追加する。データはAmazon DynamoDBに保存する
です。

その他の選択肢については以下の通りです。

・Amazon Kinesis Data Firehoseを利用してAmazon Redshiftへ連携する。Redshift上のデータをLambda関数で加工する
Kinesis Data FirehoseはストリーミングデータをAmazon S3やRedshiftなどへ配信するサービスです。本設問のケースでは、他サービスへ配信する前にデータの加工が必要ですので、Kinesis Data StreamsとLambda関数との連携が適しています。また、Redshiftは大容量データを分析するようなケースで扱うデータベースサービスです。リアルタイムの処理には向きません。したがって、誤りです。

・Amazon Kinesis Data Firehoseを利用してAmazon S3へ連携する。S3バケット上にデータが保存されたタイミングでLambda関数をトリガーし、データを加工する
Kinesis Data FirehoseはストリーミングデータをAmazon S3やRedshiftなどへ配信するサービスです。本設問のケースでは、他サービスへ配信する前にデータの加工が必要ですので、Kinesis Data StreamsとLambda関数との連携が適しています。
また、S3は汎用的なデータ保存に利用できますが、リアルタイムにデータを扱うケースには向きません。したがって、誤りです。

・Amazon Simple Queue Service(SQS)の標準キューでデータを収集し、Lambda関数でメタデータを追加する。データはAmazon Auroraへ保存する
Amazon SQSはフルマネージドのメッセージキューイングサービスであり、サービス同士の橋渡しを担います。ストリーミングデータの収集には向きません。
また、Amazon Auroraは高性能なデータベースサービスです。リアルタイムにデータを処理する用途には向きません。したがって、誤りです。

参考

【Amazon Kinesis】
Amazon Kinesisはストリーミングデータをリアルタイムで収集・処理するサービスです。
ストリーミングデータとは継続的に生成されるデータのことをいいます。例えばスマートフォンアプリなどでユーザーが生成するログや、証券取引所の株取引情報、SNSやオンラインゲームのデータなどの継続的に生成されるデータが該当します。Kinesisではこのようなストリーミングデータを収集し、サンプリングや分析などの処理を通して、リアルタイムなトレンド情報をユーザーへフィードバックしたり、企業の経営戦略などに繋げることができます。なお、ストリーミングデータを処理することを「ストリーム処理」といいます。
また、その他のデータ処理方式に「バッチ処理」があります。バッチ処理はまとまったデータに対して一括で処理を行う方式です。バッチ処理は、日次、週次、月次、年次の集計処理のように特定範囲のデータに対して定期的に実行されます。
多くの企業ではストリーム処理とバッチ処理の両方を用いてシステムを構築し、柔軟なデータ解析を行っています。

Kinesisでは4つのサービスが提供されています。

●Kinesis Data Streams
Kinesis Data Streamsは外部から送信されるストリーミングデータを収集するサービスです。センサーなどが生成したストリーミングデータをKinesis Data Streamsのストリームへ送信し、ストリーム上のデータは分析や機械学習などを行うアプリケーションがリアルタイムに読みだして処理します。なお、収集したデータには保持期間(デフォルトで24時間、最長で1年)があります。

なお、Kinesisではストリーミングデータを生成し送信するデバイスやサービスなどを「プロデューサー」、ストリーミングデータを読みだして処理する側を「コンシューマー」と呼びます。

○Kinesis Data Streamsのアーキテクチャ

Kinesis Data Streamsでは、ストリーミングデータを「データレコード」という単位で処理します。データレコードには、データそのものに加えて「パーティションキー」「シーケンス番号」が含まれます。
・パーティションキー ... どのシャード(後述)で処理するかを決めるもの。プロデューサー側で設定する
・シーケンス番号 ... シャードごとに一意の番号。シャード内のデータレコードの順序性が保証される

データレコードは「シャード」に分散され処理されます。シャードは、ストリームで処理できるデータの容量を決めるもので、シャードが多いほど並列処理の数が増えてスループットが上がります。

●Kinesis Data Firehose
Kinesis Data FirehoseはストリーミングデータをAmazon S3(ストレージ)、Amazon Redshift(データベース)、Amazon Elasticsearch Service(データ分析)などのサービスへ配信します。Kinesis Data Firehoseへ送信されたストリーミングデータは事前に設定されたデータ配信先へ配信されます。中継するアプリケーションを独自に実装する必要はありません。


●Kinesis Data Analytics
Kinesis Data Analyticsは、Kinesis上のストリーミングデータを処理し、可視化・分析できるサービスです。処理用のテンプレートが用意されていたり、標準SQLのクエリが発行できたり、JavaやPythonなどのプログラミング言語がサポートされているなど、柔軟に処理を組み込むことができます。データをデータベースへ移行することなく処理することで、リアルタイムに結果を得ることができます。


●Kinesis Video Streams
カメラやビデオなどの動画(ビデオストリーム)を取り込むサービスです。取り込んだ動画データはアプリケーションなどによって解析や加工、再生などを行うことができます。

上に戻る

解説の補足のお願い

公開日 2022/07/11

解説の下記文言が、リアルタイムに保存して分析できる理由に読み解けませんでした。データ大容量格納可能であり、高パフォーマンスであるととは、わかったのですが。。。
補足いただけると助かります。

さらに、「リアルタイムに保存して分析したい」という要件により、応答性の高いデータベースが求められます。データベースサービスのうち、「Amazon DynamoDB」は容量が無制限かつ高パフォーマンスで、データ収集など大容量データの蓄積に利用されます。

スタッフからの返信

s staff_khira0410

2022/07/15 13:23

redfox1418 さん ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。

この投稿に対して返信しませんか?