

# シナリオ 2: セキュリティチームのためのほぼリアルタイムのデータ
<a name="scenario-2"></a>

*ABC2Badge* 社は、[AWS re:Invent](https://reinvent.awsevents.com/) などの企業イベントや大規模なイベント用に、センサーとバッジを提供しています。ユーザーはイベントにサインアップし、キャンパス全体でセンサーが取得する一意のバッジを受け取ります。ユーザーがセンサーを通過すると、匿名化された情報がリレーショナルデータベースに記録されます。

来るイベントで、参加者数が多いため、*ABC2Badge* 社はイベントセキュリティチームから、15 分ごとにキャンパスの最も混雑したエリアのデータを収集するよう要請されました。これにより、セキュリティチームは、エリアの混雑に比例して対応しセキュリティ担当者を分散させるのに十分な時間を確保できます。*ABC2Badge* 社は、セキュリティチームからの新しい要件と、ほぼリアルタイムでデータを処理するためのストリーミングソリューションを構築する経験が浅いことから、シンプルでありながらスケーラブルで信頼性の高いソリューションを求めています。

同社の現在のデータウェアハウスソリューションは [ Amazon Redshift](https://aws.amazon.com/redshift/) です。Amazon Kinesis サービスの機能を確認したところ、Amazon Kinesis Data Firehose が、データレコードのストリーミングを受信し、バッファサイズや時間間隔に基づいてレコードをバッチ処理して、Amazon Redshift に挿入できることがわかりました。同社は Kinesis Data Firehose 配信ストリームを作成し、5 分ごとに Amazon Redshift テーブルにデータをコピーするように設定しました。この新しいソリューションの一環として、自社のサーバーで Amazon Kinesis Agent を使用しました。Kinesis Data Firehose は 5 分ごとに Amazon Redshift にデータをロードします。Amazon Redshift では、ビジネスインテリジェンス (BI) チームが分析を実行し、15 分ごとにデータをセキュリティチームに送信できます。

![Amazon Kinesis Data Firehose を使用した新しいソリューション](http://docs.aws.amazon.com/ja_jp/whitepapers/latest/streaming-data-solutions-amazon-kinesis/images/SDS-image-2.png)


*Amazon Kinesis Data Firehose を使用した新しいソリューション*

## Amazon Kinesis Data Firehose
<a name="amazon-kinesis-data-firehose"></a>

[Amazon Kinesis Data Firehose](https://aws.amazon.com/kinesis/data-firehose) は、ストリーミングデータを AWS にロードする最も簡単な方法です。ストリーミングデータをキャプチャ、変換し、[Amazon Kinesis Data Analytics](https://aws.amazon.com/kinesis/data-analytics/)、[Amazon Simple Storage Service](https://aws.amazon.com/s3/) (Amazon S3)、[Amazon Redshift](https://aws.amazon.com/redshift/)、[Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) (OpenSearch Service)、[Splunk](https://www.splunk.com/) にロードできます。さらに、Kinesis Data Firehose は、カスタム HTTP エンドポイント、またはサポートされている[サードパーティーサービスプロバイダー](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html)が所有する HTTP エンドポイントにストリーミングデータをロードできます。

Kinesis Data Firehose は、現在使用している既存のビジネスインテリジェンスツールとダッシュボードを使用して、ほぼリアルタイムの分析を可能にします。データのスループットに合わせて自動的にスケールするフルマネージドサーバーレスサービスであるため、継続的な管理は不要です。Kinesis Data Firehose は、ロード前にデータのバッチ処理、圧縮処理、暗号化が行われるため、送信先でのストレージ量を最小化し、セキュリティを強化できます。また、AWS Lambda を使用してソースデータを変換し、変換されたデータを送信先に配信することもできます。Kinesis Data Firehose にデータを送信するようデータプロデューサーを設定して、指定した送信先にデータが自動配信されるようにできます。

### Firehose 配信ストリームへのデータ送信
<a name="sending-data-to-a-firehose-delivery-stream"></a>

配信ストリームにデータを送信する方法は、いくつかあります。AWS は多くの一般的なプログラミング言語用の SDK を提供しており、それぞれが [Amazon Kinesis Data Firehose](https://aws.amazon.com/kinesis/data-firehose/) 用の API を提供しています。AWS には、配信ストリームにデータを送信するためのユーティリティがあります。Kinesis Data Firehose は AWS の他のサービスと統合され、これらのサービスから配信ストリームにデータを直接送信します。

### Amazon Kinesis Agent を使用する
<a name="using-amazon-kinesis-agent"></a>

[Amazon Kinesis エージェント](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-agents.html)は、配信ストリームに送信される新しいデータがないか一連のログファイルを継続的にモニターするスタンドアロンのソフトウェアアプリケーションです。エージェントは、ファイルローテーション、チェックポイント、障害発生時の再試行を自動的に処理し、配信ストリームのモニタリングとトラブルシューティングのために [ Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) メトリクスを出力します。データの前処理、複数のファイルディレクトリのモニタリング、複数の配信ストリームへの書き込みなど、追加の構成をエージェントに適用できます。

このエージェントは、ウェブサーバー、ログサーバー、データベースサーバーなどの Linux または Windows ベースのサーバーにインストールできます。エージェントをインストールしたら、モニターするログファイルと、送信する配信ストリームを指定するだけです。エージェントは、新しいデータを持続的かつ確実に配信ストリームに送信します。

### AWS SDK と AWS のサービスをソースとして API を使用する
<a name="using-api-with-aws-sdk-and-aws-services"></a>

Kinesis Data Firehose API には、配信ストリームにデータを送信するための 2 つのオペレーションが用意されています。`PutRecord` は、1 回のコールで 1 つのデータレコードを送信します。`PutRecordBatch` は、1 回のコールで複数のデータレコードを送信でき、プロデューサあたりのスループットを向上させることができます。どちらのメソッドでも、そのメソッドを使用する際に、配信ストリームの名前とデータレコード、またはデータレコードの配列を指定する必要があります。Kinesis Data Firehose API オペレーションの詳細とサンプルコードについては、「[AWS SDK を使用した Firehose 配信ストリームへの書き込み](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-sdk.html)」を参照してください。

Kinesis Data Firehose は、[Kinesis Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-kinesis-streams.html)、[CloudWatch Logs](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-cloudwatch-logs.html)、[CloudWatch Events](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-cloudwatch-events.html)、[Amazon Simple Notification Service](https://aws.amazon.com/sns/) (Amazon SNS)、[Amazon API Gateway](https://aws.amazon.com/api-gateway/)、[AWS IoT](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-iot.html) とともに実行することもできます。データ、ログ、イベント、IoT データのストリーミングを Kinesis Data Firehose の送信先に直接、スケーラブルかつ確実に送信できます。

### データを送信先に配信する前に処理する
<a name="processing-data-before-delivery-to-destination"></a>

場合によっては、ストリーミングデータを送信先に配信する前に、変換または強化が必要になることがあります。例えば、データプロデューサーが各データレコードの非構造化テキストを送信し、[OpenSearch Service](https://aws.amazon.com/opensearch-service/) に配信する前に JSON に変換する必要がある場合があります。または、[Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/) にデータを保存する前に、JSON データを [Apache Parquet](https://parquet.apache.org/) や [Apache ORC](https://orc.apache.org/) などの列指向ファイル形式に変換することもできます。

Kinesis Data Firehose には、データの[形式変換](https://docs.aws.amazon.com/firehose/latest/dev/record-format-conversion.html)機能が組み込まれています。これにより、JSON データのストリーミングを Apache Parquet または Apache ORC ファイル形式に簡単に変換できます。

#### データ変換フロー
<a name="data-transformation-flow"></a>

ストリーミング[データ変換](https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html)を有効にするには、Kinesis Data Firehose はユーザーが作成した Lambda 関数を使用してデータを変換します。Kinesis Data Firehose は、指定されたバッファサイズにで受信データを関数用にバッファリングし、指定された Lambda 関数を非同期に呼び出します。変換されたデータは Lambda から Kinesis Data Firehose に送信され、Kinesis Data Firehose はデータを送信先に配信します。

#### データ形式の変換
<a name="data-format-conversion"></a>

また、Kinesis Data Firehose の[データ形式変換](https://docs.aws.amazon.com/firehose/latest/dev/record-format-conversion.html)を有効にすることもできます。これにより、JSON データのストリーミングが Apache Parquet または Apache ORC に変換されます。この機能は JSON を Apache Parquet または Apache ORC にのみ変換できます。CSV 形式のデータがある場合は、そのデータを Lambda 関数を介して JSON に変換してから、データ形式の変換を適用できます。

#### データ配信
<a name="data-delivery"></a>

Kinesis Data Firehose は、ほぼリアルタイムの配信ストリームとして、受信データをバッファリングします。配信ストリームのバッファリングしきい値に達すると、設定した送信先にデータが配信されます。Kinesis Data Firehose が[各送信先にデータを配信する](https://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name)方法には、いくつかの違いがあります。このホワイトペーパーでは、以下のセクションで説明します。

### Simple Storage Service (Amazon S3)
<a name="amazon-s3"></a>

[Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/) は、ウェブのどこからでもお好みの量のデータを保存および取得できる、シンプルなウェブサービスインターフェイスを備えたオブジェクトストレージです。これは 99.999999999% の耐久性を提供し、世界中の数兆個を超えるオブジェクトを保管するまでスケールできるように設計されています。

#### Simple Storage Service (Amazon S3) へのデータ配信
<a name="data-delivery-to-amazon-s3"></a>

Simple Storage Service (Amazon S3) へのデータ配信では、Kinesis Data Firehose は配信ストリームのバッファリング設定に基づいて複数の受信レコードを連結し、S3 オブジェクトとして Amazon S3 に配信します。S3 へのデータ配信の頻度は、S3 のバッファサイズ (1 MB ～ 128 MB) またはバッファ間隔 (60 秒から 900 秒) のいずれか早い方によって決まります。

S3 バケットへのデータ配信は、さまざまな理由で失敗する場合があります。例えば、バケットがもう存在しない場合や、Kinesis Data Firehose が引き受ける [AWS Identity and Access Management](https://aws.amazon.com/iam/) (IAM) [ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)がバケットにアクセスできない場合などです。そのような状況では、Kinesis Data Firehose は配信が成功するまで最大 24 時間にわたり再試行し続けます。Kinesis Data Firehose の最大データ保存時間は 24 時間です。データ配信が 24 時間を超えて失敗した場合、データは失われます。

### Amazon Redshift
<a name="amazon-redshift"></a>

[Amazon Redshift](https://aws.amazon.com/redshift/) は高速でフルマネージド型のデータウェアハウスです。標準 SQL および既存の BI ツールを使用して、すべてのデータをシンプルかつコスト効率よく分析できます。洗練されたクエリ最適化、ハイパフォーマンスなローカルディスク上に配置された列指向ストレージ、超並列クエリ実行を使用し、ペタバイト単位の構造化データに対して複雑な分析クエリを実行できます。 

#### Amazon Redshift へのデータ配信
<a name="data-delivery-to-amazon-redshift"></a>

Amazon Redshift へのデータ配信では、Kinesis Data Firehose は最初に受信データを S3 バケットに前述の形式で配信します。その後、Kinesis Data Firehose は Amazon Redshift COPY コマンドを発行して、S3 バケットから Amazon Redshift クラスターにデータをロードします。

S3 から Amazon Redshift へのデータ `COPY` オペレーションの頻度は、Amazon Redshift クラスターの `COPY` コマンド処理速度によって異なります。Amazon Redshift の送信先では、データ配信の失敗を処理する配信ストリームの作成時に再試行期間 (0～7,200 秒) を指定できます。Kinesis Data Firehose は指定された期間にわたって再試行し、失敗した場合は S3 オブジェクトの特定のバッチをスキップします。スキップされたオブジェクトの情報は、errors/ フォルダーのマニフェストファイルとして S3 バケットに配信されます。この情報は手動のバックフィルに使用できます。

以下は、Kinesis Data Firehose から Amazon Redshift へのデータフローのアーキテクチャ図表です。このデータフローは Amazon Redshift に固有のものですが、Kinesis Data Firehose は他のターゲットに対しても同様のパターンに従います。

![Kinesis Data Firehose から Amazon Redshift へのデータフロー](http://docs.aws.amazon.com/ja_jp/whitepapers/latest/streaming-data-solutions-amazon-kinesis/images/SDS-image-3.png)


*Kinesis Data Firehose から Amazon Redshift へのデータフロー*

### Amazon OpenSearch Service (OpenSearch Service)
<a name="amazon-elasticsearch-service"></a>

[OpenSearch Service](https://aws.amazon.com/opensearch-service/) は、本番ワークロードに必要な可用性、スケーラビリティ、セキュリティに加えて、OpenSearch の使いやすい API とリアルタイム機能を提供するフルマネージドサービスです。OpenSearch Service を使用すると、ログ分析、全文検索、アプリケーションモニタリングのための OpenSearch のデプロイ、運用、スケーリングが容易になります。

#### OpenSearch Service へのデータ配信
<a name="data-delivery-to-amazon-es"></a>

Kinesis Data Firehose は、OpenSearch Service へのデータ配信のため、配信ストリームのバッファリング設定に基づいて受信レコードをバッファしてから、OpenSearch クラスターに複数のレコードのインデックスを作成する、OpenSearch 一括リクエストを生成します。OpenSearch Service へのデータ配信の頻度は、OpenSearch のバッファサイズ (1 MB～100 MB) とバッファ間隔 (60 秒～900 秒) の値のいずれか早い方によって決まります。

OpenSearch Service の送信先で、配信ストリームの作成時に、再試行の期間 (0～7200 秒) を指定できます。Kinesis Data Firehose は指定された期間にわたって再試行してから、その特定のインデックスリクエストをスキップします。スキップされたドキュメントは `elasticsearch_failed/` フォルダーの S3 バケットに配信され、手動のバックフィルに使用できます。

Amazon Kinesis Data Firehose では、期間に基づいて OpenSearch Service インデックスをローテーションできます。選択したローテーションオプション (`NoRotation`、`OneHour`、`OneDay`、`OneWeek`、`OneMonth`) に応じて、Kinesis Data Firehose は協定世界時 (UTC) の到着タイムスタンプの一部を指定されたインデックス名に追加します。

### カスタム HTTP エンドポイントまたはサポートされているサードパーティーサービスプロバイダー
<a name="custom-http-endpoint-or-supported-third-party-sp"></a>

Kinesis Data Firehose は、カスタム HTTP エンドポイント、または Datadog、Dynatrace、LogicMonitor、MongoDB、New Relic、Splunk、Sumo Logic など、サポートされているサードパーティープロバイダーにデータを送信できます。

#### カスタム HTTP エンドポイントまたはサポートされているサードパーティーサービスプロバイダー
<a name="data-delivery-to-custom-http-endpoints"></a>

Kinesis Data Firehose がカスタム HTTP エンドポイントにデータを正常に配信するには、これらのエンドポイントがリクエストを受け入れ、特定の Kinesis Data Firehose リクエスト形式およびレスポンス形式を使用してレスポンスを送信する必要があります。

サポートされているサードパーティーサービスプロバイダーが所有する HTTP エンドポイントにデータを配信する場合、統合されている AWS Lambda サービスを使用して、受信レコードを、サービスプロバイダーに組み込まれているものが対応している形式に変換する関数を作成できます。

データ配信の頻度については、各サービスプロバイダーに推奨バッファーサイズがあります。推奨バッファサイズの詳細については、サービスプロバイダーにお問い合わせください。データ配信の失敗処理では、Kinesis Data Firehose はまず、送信先からの応答を待って HTTP エンドポイントとの接続を確立します。Kinesis Data Firehose は、再試行期間が終了するまで接続を確立し続けます。その後、Kinesis Data Firehose はこれをデータ配信の失敗と見なし、データを S3 バケットにバックアップします。

## 概要
<a name="summary-3"></a>

Kinesis Data Firehose は、サポートされている送信先にストリーミングデータを持続的に配信できます。フルマネージドソリューションであり、開発の必要性はわずか、または皆無です。*ABC2Badge* 社にとって、Kinesis Data Firehose を使用するのは自然な選択でした。どうしゃは既に Amazon Redshift をデータウェアハウスソリューションとして使用していました。データソースはトランザクションログに継続的に書き込むため、Amazon Kinesis Agent を活用して、追加のコードを記述することなくそのデータをストリーミングできました。*ABC2Badge* 社はセンサーレコードのストリーミングを作成し、Kinesis Data Firehose 経由でこれらのレコードを受信するようになったため、これをセキュリティチームのユースケースのベースとして使用できます。