前回の記事では、今日のデータ駆動型の世界におけるイベントの急激な増加について説明しました。私たちの周りには数多くのアプリ、スマート デバイス、マシンがあり、作成されるデータの量は膨大です。また、オーケストレーション プラットフォームがこれらのイベントを適切なアプリケーションに配信するのにどのように役立つかについても説明しました。ただし、イベントを配信するだけでは、企業が影響を与えるのに十分ではない可能性があります。
これらのイベントを分析してユーザーの行動を理解することで、企業はより賢明な意思決定を行い、顧客により良いサービスを提供できるようになります。リアルタイム分析プラットフォームは、イベントのデータを意味のある情報に変換するのに役立ちます。
この記事では、AWS を使用してリアルタイム分析プラットフォームを構築する方法、考えられるソリューションの評価、スケーラブルで信頼性の高いプラットフォームを実装するためのステップバイステップのガイドについて説明します。このプラットフォームの構築には、データの取り込み、処理、クエリという 3 つのステップが含まれます。リアルタイム分析では、ユーザーの行動やシステムのパフォーマンスなど、時間の経過に伴う傾向やパターンに重点が置かれることがよくあります。
時系列データは、イベントを自然に順番に整理するため、瞬間ごとにデータを簡単に分析できます。時系列ストレージはこのニーズに完全に適合し、アプリケーションでメトリックを計算できます。AWS は、このプラットフォームを構築するためにシームレスに連携する SQS、Lambda、Timestream、Quicksight などのツールを提供しています。
リアルタイム分析プラットフォームの構築には3つの主要な部分があります
視覚化とクエリ: カスタムダッシュボードまたはQuicksightをTimestreamと統合して視覚化と分析を実現
下の図は分析プラットフォームのアーキテクチャを示しています。
AWS の時系列データベースである Amazon Timestreamは、膨大な量のデータを効率的に処理および分析するという課題に対応するように設計されています。Timestream はサーバーレスでスケーラブルであり、リアルタイムのデータ分析を必要とするアプリケーションに最適です。主な機能は次のとおりです。
必要なすべてのリソースのクラウド フォーメーション (CFN) テンプレートは、 Github リポジトリにあります。
データの取り込み
サービスは、システムのメッセージ キューとして機能する SQS キューに関連イベントを発行できます。信頼性を高めるために、プライマリ SQS キューの横にデッドレター キュー (DLQ) が構成されています。処理に失敗したイベントは、再試行しきい値を超えると DLQ に送られます。これらのイベントは、デバッグ、障害処理、調査にも使用できます。
以下は、SQS キューとそれに関連する DLQ を作成するための CFN テンプレートのスニペットです。
EventQueueDLQ: Description: 'An DLQ queue that receives failed events' Type: AWS::SQS::Queue Properties: FifoQueue: true ContentBasedDeduplication: true QueueName: !Ref DLQQueueName SqsManagedSseEnabled: true VisibilityTimeout: 240 EventQueue: Description: 'An SQS queue that receives events' Type: 'AWS::SQS::Queue' Properties: QueueName: !Ref SQSQueueName FifoQueue: true ContentBasedDeduplication: true KmsMasterKeyId: alias/aws/sqs VisibilityTimeout: 240 RedrivePolicy: deadLetterTargetArn: !Sub ${EventQueueDLQ.Arn} maxReceiveCount: 5
データ処理
AWS Lambda 関数はデータプロセッサとして設定され、SQS キューに公開されたイベントの処理を担当します。処理後、イベントをメトリックとして Timestream データベースにプッシュします。
以下は、Lambda の CFN テンプレートと SQS へのマッピングのスニペットです。
EventProcessorLambda: Type: 'AWS::Lambda::Function' Description: 'Lambda function that processes events from the SQS queue and writes to Timestream.' Properties: FunctionName: !Ref LambdaFunctionName Handler: 'index.lambda_handler' Role: !GetAtt LambdaExecutionRole.Arn Runtime: 'python3.12' MemorySize: 1024 Timeout: 120 Environment: Variables: TIMESTREAM_DATABASE_NAME: !Ref EventsDatabaseName TIMESTREAM_TABLE_NAME: !Ref EventsTableName Code: ZipFile: | # Lambda function code goes here SQSToLambdaEventSourceMapping: Type: 'AWS::Lambda::EventSourceMapping' Description: 'Maps the SQS queue as the event source for the Lambda function.' Properties: BatchSize: 10 EventSourceArn: !GetAtt EventQueue.Arn FunctionName: !GetAtt EventProcessorLambda.Arn Enabled: 'True'
データストア
Amazon Timestream は、さまざまなサービスで生成されたすべてのイベントのプライマリ データ ストアとして機能します。セットアップには以下が含まれます。
以下は、Timestream データベースとテーブルを作成するための CFN テンプレートのスニペットです。
EventsDatabase: Description: 'Timestream database to store event data' Type: 'AWS::Timestream::Database' Properties: DatabaseName: !Ref EventsDatabaseName KmsKeyId: alias/aws/timestream EventsTable: Description: 'Timestream table that stores event metrics' Type: 'AWS::Timestream::Table' DependsOn: EventsDatabase Properties: DatabaseName: !Ref EventsDatabase TableName: !Ref EventsTableName RetentionProperties: MemoryStoreRetentionPeriodInHours: 72 MagneticStoreRetentionPeriodInDays: 365
視覚化とクエリ
クエリ
Timestream は、ユーザーがテーブルに対してクエリを実行できるクエリ コンソールを提供します。例:
-- Get the 10 most recent metrics in the past 15 minutes. SELECT * FROM "events-db"."events-metrics" WHERE time between ago(15m) and now() ORDER BY time DESC LIMIT 10
視覚化
AWS は、Timestream とのすぐに使用できる統合 ( QuickSight 、 Grafanaなど) を多数提供しており、分析、視覚化、洞察の導出が容易になります。
サービスは、処理フロー全体をトリガーするイベントを次の形式で SQS に公開できます。
{ "order_id": "test-order-1", "customer_id": "test-customer-1", "event_type": "order_success", "metric_value": 1 }
このアーキテクチャは、スケーラブルで信頼性の高い分析プラットフォームをシンプルかつ効率的に構築する方法を提供します。イベント処理用の AWS Kinesis Streams、データストア用の Prometheus、バッチ処理と分析用の S3+Athena など、特定のニーズに応じて他の選択肢もあります。