Amazon Kinesis Data Firehose データ配信 - Amazon Kinesis Data Firehose

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Amazon Kinesis Data Firehose データ配信

データが配信ストリームに送信された後は、選択した送信先に自動的に配信されます。

重要

Kinesis Producer Library (KPL) を使用して Kinesis データストリームにデータを書き込む場合、集約を使用してその Kinesis データストリームに書き込むレコードを結合できます。その後そのデータストリームを Kinesis Data Firehose 配信ストリームのソースとして使用する場合、Kinesis Data Firehose はレコードの集約を解除してから送信先に配信します。データを変換するように配信ストリームを設定する場合、Kinesis Data Firehose はレコードの集約を解除してから AWS Lambda に配信します。詳細については、以下を参照してください。 Kinesis Producer Libraryを使用したAmazon Kinesisデータ・ストリーム・プロデューサーの開発 および 集計Amazon Kinesis Data Streams 開発者ガイド.

データ配信形式

Amazon Simple Storage Service (Amazon S3) へのデータ配信の場合、Kinesis Data Firehose は、配信ストリームのバッファ設定に基づいて、複数の受信レコードを連結します。次に、Amazon S3 オブジェクトとしてレコードを Amazon S3 に配信します。必要に応じて Kinesis Data Firehose に送信する前に、各レコードへの末尾にレコード区切り文字を追加することを推奨します。これで、配信された Amazon S3 オブジェクトをレコードに個々に分割できるようになります。

Amazon Redshift へのデータ配信では、Kinesis Data Firehose は最初に受信データを前に説明した形式で S3 バケットに配信します。次に、Kinesis Data Firehose は Amazon Redshift COPY コマンドを発行して、S3 バケットから Amazon Redshift クラスターにデータをロードします。Kinesis Data Firehose が複数の受信レコードを Amazon S3 オブジェクトに連結した後、Amazon S3 オブジェクトを Amazon Redshift クラスターにコピーできることを確認します。詳細については、「Amazon Redshift COPY コマンドデータ形式パラメーター」を参照してください。

Amazon ES へのデータ配信の場合は、Kinesis Data Firehose は受信レコードを配信ストリームのバッファリング設定に基づいてバッファします。次に、複数のレコードをインデックス化する Elasticsearch クラスターへの Elasticsearch 一括リクエストが生成されます。Kinesis Data Firehose に送信する前に、レコードが UTF-8 でエンコードされ、1 行の JSON オブジェクトにフラット化されていることを確認します。また、1 秒ごとに設定される明示的なインデックスを使用して一括リクエストを行うには、Elasticsearch クラスターの rest.action.multi.allow_explicit_index オプションを true (デフォルト) に設定する必要があります。詳細については、以下を参照してください。 Amazon ES 詳細オプションの構成Amazon Elasticsearch Service 開発者ガイド.

Splunk へのデータ配信の場合は、Kinesis Data Firehose は送信するバイト数を連結します。データを改行文字などで区切る場合は、自分で挿入する必要があります。Splunk がそのような区切り記号を解析するように設定されていることを確認してください。

サポートされているサードパーティサービスプロバイダが所有するHTTPエンドポイントにデータを配信する場合、統合されたAmazon Lambdaサービスを使用して、着信レコードをサービスプロバイダの統合が期待する形式と一致する形式に変換する関数を作成できます。送信先に選択した HTTP エンドポイントのサードパーティ サービス プロバイダに連絡して、そのプロバイダの承認されたレコード形式の詳細を確認してください。

データ配信の頻度

Kinesis Data Firehose の送信先ごとに、独自のデータ配信の頻度があります。

Amazon S3

Amazon S3 へのデータ配信の頻度は、配信システムで設定した Amazon S3 の [Buffer size (バッファサイズ)] と [Buffer interval (バッファ間隔)] の値によって決まります。Kinesis Data Firehose は、Amazon S3 に配信する前に受信データをバッファします。Amazon S3 の [Buffer size (バッファサイズ)] (1–128 MB) または [Buffer interval (バッファ間隔)] (60–900 秒) の値を設定できます。最初に満たした条件によって、Amazon S3 へのデータ配信がトリガーされます。送信先へのデータ配信が配信ストリームへのデータ書き込みよりも遅れると、Kinesis Data Firehose はバッファサイズを動的に引き上げます。その後、遅れを取り戻すことができ、すべてのデータが送信先に適切に配信されます。

Amazon Redshift

Amazon S3 から Amazon Redshift へのデータの COPY オペレーションの頻度は、Amazon Redshift クラスターが COPY コマンドを終了できる速度によって決まります。まだコピーするデータがある場合、前の COPY コマンドが Amazon Redshift によって正常に終了するとすぐに、Kinesis Data Firehose は新しい COPY コマンドを発行します。

Amazon Elasticsearch Service

Amazon ES へのデータ配信の頻度は、配信ストリームに対して設定した Elasticsearch の [Buffer size (バッファサイズ)] と [Buffer interval (バッファ間隔)] の値によって決まります。Kinesis Data Firehose は受信データをバッファしてから、Amazon ES に配信します。Elasticsearch の [Buffer size (バッファサイズ)] (1~100 MB) または [Buffer interval (バッファ間隔)] (60~900 秒) の値を設定し、最初に満たされた条件によって、Amazon ES へのデータ配信がトリガーされます。

Splunk

Kinesis Data Firehose は受信データをバッファしてから、Splunk に配信します。バッファサイズは 5 MB、バッファ間隔は 60 秒です。最初に満たした条件によって、Splunk へのデータ配信がトリガーされます。バッファサイズと間隔は設定できません。これらの数値は最適化されています。

HTTPエンドポイントの送信先

Kinesis Data Firehose 指定したHTTPエンドポイントの宛先に配信する前に、受信データをバッファリングします。Datadog、MongoDB、New RelicなどのHTTPエンドポイントの送信先では、1~64 MiBのバッファサイズとバッファ間隔(60~900秒)を選択できます。宛先の推奨バッファ サイズは、サービス プロバイダによって異なります。たとえば、Datadogの推奨バッファサイズは4 MiB、New Relicの推奨バッファサイズは1 MiBです。推奨バッファサイズの詳細については、データ送信先として選択したエンドポイントを持つサードパーティサービスプロバイダにお問い合わせください。

データ配信の失敗の処理

Kinesis Data Firehose の送信先ごとに、独自のデータ配信の失敗処理があります。

Amazon S3

S3 バケットへのデータ配信は、さまざまな理由で失敗する場合があります。たとえば、バケットが存在しない、Kinesis Data Firehose が引き受ける IAM ロールにバケットへのアクセス権がない、ネットワークの障害、類似したイベントなどの理由があります。そのような状況では、Kinesis Data Firehose は配信が成功するまで最大 24 時間にわたり再試行し続けます。Kinesis Data Firehose の最大データ保存時間は 24 時間です。データ配信が 24 時間を超えて失敗した場合、データは失われます。

Amazon Redshift

Amazon Redshift が送信先の場合、配信ストリームの作成時に、再試行の期間 (0~7200 秒) を指定できます。

Amazon Redshift クラスターへのデータ配信は、いくつかの理由で失敗する場合があります。たとえば、配信ストリームのクラスター設定が正しくない、クラスターがメンテナンス中である、ネットワークの障害の理由があります。そのような状況では、Kinesis Data Firehose は指定された期間にわたって、その特定のバッチの Amazon S3 オブジェクトをスキップします。スキップされたオブジェクトの情報は、マニフェストファイルとして errors/ フォルダーの S3 バケットに配信されます。この情報は手動のバックフィルに使用できます。マニフェストファイルを使用して手動でデータをコピーする方法については、「マニフェストを使用し、データファイルを指定する」を参照してください。

Amazon Elasticsearch Service

Amazon ES が送信先の場合、配信ストリームの作成時に、再試行の期間 (0~7200 秒) を指定できます。

Amazon ES クラスターへのデータ配信は、いくつかの理由で失敗する場合があります。たとえば、配信ストリームの Amazon ES クラスター設定が正しくない、Amazon ES クラスターがメンテナンス中である、ネットワークの障害、類似したイベントなどの理由があります。そのような状況では、Kinesis Data Firehose は指定された期間にわたって再試行してから、その特定のインデックスリクエストをスキップします。スキップされたドキュメントは elasticsearch_failed/ フォルダーの S3 バケットに配信され、手動のバックフィルに使用できます。各ドキュメントの JSON 形式は以下のとおりです。

{ "attemptsMade": "(number of index requests attempted)", "arrivalTimestamp": "(the time when the document was received by Firehose)", "errorCode": "(http error code returned by Elasticsearch)", "errorMessage": "(error message returned by Elasticsearch)", "attemptEndingTimestamp": "(the time when Firehose stopped attempting index request)", "esDocumentId": "(intended Elasticsearch document ID)", "esIndexName": "(intended Elasticsearch index name)", "esTypeName": "(intended Elasticsearch type name)", "rawData": "(base64-encoded document data)" }
Splunk

Kinesis Data Firehose がデータを Splunk に送信すると、Splunk からの送達確認を待機します。エラーが発生した場合、または確認タイムアウト期間内に確認が到着しない場合、Kinesis Data Firehose で再試行期間カウンターが開始されます。再試行期間が終わるまで再試行が続けられます。その後、Kinesis Data Firehose はデータ配信が失敗したとみなしてデータを Amazon S3 バケットにバックアップします。

Kinesis Data Firehose がデータを Splunk に送信するたびに、初回か再試行かにかかわらず、送達確認タイムアウトカウンターが再度開始されます。Splunk から送達確認が来るのを待機します。再試行期間が切れた場合でも、Kinesis Data Firehose は送達確認が到着するか送達確認タイムアウトに達するまで送達確認を待機し続けます。送達確認がタイムアウトすると、Kinesis Data Firehose は再試行カウンターの残り時間があるかどうかをチェックして判別します。残り時間がある場合は、確認が到着するか再試行時間が切れたと判断されるまで再試行されロジックが繰り返されます。

送達確認の受信失敗だけが、発生する可能性のあるデータ配信エラーのタイプではありません。他のタイプのデータ配信エラーの詳細については、「Splunk データ配信エラー」を参照してください。再試行期間が 0 より大きい場合、すべてのデータ配信エラーで再試行ロジックがトリガーされます。

以下に、エラーレコードの例を示します。

{ "attemptsMade": 0, "arrivalTimestamp": 1506035354675, "errorCode": "Splunk.AckTimeout", "errorMessage": "Did not receive an acknowledgement from HEC before the HEC acknowledgement timeout expired. Despite the acknowledgement timeout, it's possible the data was indexed successfully in Splunk. Kinesis Firehose backs up in Amazon S3 data for which the acknowledgement timeout expired.", "attemptEndingTimestamp": 13626284715507, "rawData": "MiAyNTE2MjAyNzIyMDkgZW5pLTA1ZjMyMmQ1IDIxOC45Mi4xODguMjE0IDE3Mi4xNi4xLjE2NyAyNTIzMyAxNDMzIDYgMSA0MCAxNTA2MDM0NzM0IDE1MDYwMzQ3OTQgUkVKRUNUIE9LCg==", "EventId": "49577193928114147339600778471082492393164139877200035842.0" }
HTTPエンドポイントの送信先

いつ Kinesis Data Firehose は、HTTPエンドポイントの宛先にデータを送信し、この宛先からの応答を待機します。エラーが発生した場合、または応答が応答タイムアウト期間内に届かない場合、 Kinesis Data Firehose は再試行時間カウンタを開始します。再試行期間が終わるまで再試行が続けられます。その後、Kinesis Data Firehose はデータ配信が失敗したとみなしてデータを Amazon S3 バケットにバックアップします。

毎回 Kinesis Data Firehose は、最初の試行か再試行かにかかわらず、HTTP エンドポイントの宛先にデータを送信します。応答タイムアウトカウンタが再起動されます。その後、HTTPエンドポイントの宛先から応答が届くのを待ちます。再試行期間が切れても、 Kinesis Data Firehose は、応答を受信するか、応答タイムアウトに達するまで応答を待機します。レスポンスがタイムアウトした場合は、 Kinesis Data Firehose は、再試行カウンタに時間が残っていないかどうかを確認します。時間が残っている場合は、再試行し、応答を受信するか、再試行時間が期限切れであると判断するまでロジックを繰り返します。

応答を受信できないのは、発生しうるデータ配信エラーのタイプだけではありません。その他のタイプのデータ配信エラーについては、以下を参照してください。 HTTPエンドポイントデータ配信エラー

以下に、エラーレコードの例を示します。

{ "attemptsMade":5, "arrivalTimestamp":1594265943615, "errorCode":"HttpEndpoint.DestinationException", "errorMessage":"Received the following response from the endpoint destination. {"requestId": "109777ac-8f9b-4082-8e8d-b4f12b5fc17b", "timestamp": 1594266081268, "errorMessage": "Unauthorized"}", "attemptEndingTimestamp":1594266081318, "rawData":"c2FtcGxlIHJhdyBkYXRh", "subsequenceNumber":0, "dataId":"49607357361271740811418664280693044274821622880012337186.0" }

Amazon S3 オブジェクト名の形式

Kinesis Data Firehose は、YYYY/MM/dd/HH 形式で UTC 時間のプレフィックスを追加してから、書き込みオブジェクトを Amazon S3 に追加します。このプレフィックスはバケットで論理的階層を作成します。それぞれのフォワードスラッシュ (/) は階層でレベルを作成します。カスタムプレフィックスを指定することで、この構造を変更できます。カスタムプレフィックスを指定する方法については、「Amazon S3 オブジェクトのカスタムプレフィックス」を参照してください。

Amazon S3 オブジェクト名はパターン DeliveryStreamName-DeliveryStreamVersion-YYYY-MM-dd-HH-MM-SS-RandomString に従います。ここで、DeliveryStreamVersion1 で始まり、Kinesis Data Firehose 配信ストリームの設定が変更されるたびに、1 ずつ増えます。配信ストリーム設定 (例: S3 バケットの名前、バッファリングのヒント、圧縮、暗号化) は変更できます。この操作は、Kinesis Data Firehose コンソールまたは UpdateDestination API オペレーションを使用して行うことができます。

Amazon ES 送信先のインデックスのローテーション

について Amazon ES 次の5つのオプションのいずれかから時間ベースのインデックス回転オプションを指定できます。NoRotationOneHourOneDayOneWeek、または OneMonth.

選択するローテーションオプションに基づき、Kinesis Data Firehose によって、UTC の到着タイプスタンプが指定されたインデックス名に追加されます。追加されたタイムスタンプは、それに応じてローテーションされます。以下の例は、各インデックスのローテーションオプションに対する Amazon ES で作成されるインデックス名を示しています。指定されたインデックス名は myindex で、到着タイムスタンプは 2016-02-25T13:00:00Z です。

RotationPeriod IndexName
NoRotation myindex
OneHour myindex-2016-02-25-13
OneDay myindex-2016-02-25
OneWeek myindex-2016-w08
OneMonth myindex-2016-02

HTTPエンドポイントの送信先に対するAWSアカウント全体およびAWSリージョン全体の配信

Kinesis Data Firehose は、AWS アカウント全体で HTTP エンドポイントへのデータ配信をサポートします。 Kinesis Data Firehose 配信先として選択した HTTP エンドポイントは、さまざまな AWS アカウントに存在する可能性があります。

Kinesis Data Firehose また、AWS地域全体のHTTPエンドポイントへのデータ配信もサポートします。あるAWS地域の配信ストリームから別のAWS地域のHTTPエンドポイントにデータを配信できます。また、配信ストリームからAWS地域外のHTTPエンドポイント送信先にデータを配信することもできます。たとえば、HTTPエンドポイントURLを目的の送信先に設定することで、オンプレミスのサーバーに配信できます。これらのシナリオでは、追加のデータ転送料金が配送費用に追加されます。詳細については、 データ転送 」を参照してください。

重複レコード

Kinesis Data Firehose は、データ配信に最低 1 回セマンティクスを使用します。データ配信がタイムアウトした場合など、状況によっては、元のデータ配信リクエストが最終的に通過すると、Kinesis Data Firehose による配信の再試行が重複する可能性があります。これは、Kinesis Data Firehose がサポートするすべての送信先タイプに当てはまります。