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 プロデューサーライブラリを使用した Amazon Kinesis Data Streams プロデューサーの開発および集約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 OpenSearch Service 開発者ガイド

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

サポートされているサードパーティサービスプロバイダーが所有する HTTP エンドポイントにデータを配信する場合、統合された Amazon Lambda サービスを使用して、受信レコードをサービスプロバイダーの統合が想定している形式に変換する関数を作成できます。受信されたレコード形式の詳細については、送信先として HTTP エンドポイントを選択したサードパーティのサービスプロバイダーにお問い合わせください。

データ配信の頻度

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

Amazon S3

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

Amazon Redshift

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

Amazon OpenSearch Service

Amazon ES へのデータ配信の頻度は、Elasticsearchバッファサイズおよびバッファ間隔値を指定します。Kinesis Data Firehose は受信データをバッファしてから Amazon ES に配信します。あなたは、Elasticsearchの値を設定することができますバッファサイズ(1 ~ 100 MB) またはバッファ間隔(60 ~ 900 秒)に設定され、条件が満たされると、Amazon ES へのデータ配信が開始されます。

Splunk

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

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

Kinesis Data Firehose は受信データをバッファしてから、指定した HTTP エンドポイントの送信先にデータを配信します。宛先の推奨バッファサイズは、サービスプロバイダーによって異なります。たとえば、Datadog の推奨バッファサイズは 4 MiBs で、New Relic と Sumo Logic の推奨バッファサイズは 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 OpenSearch 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 は、形式で UTC 時間プレフィックスを追加します。YYYY/MM/dd/HHオブジェクトを Amazon S3 に書き込む前に。このプレフィックスはバケットで論理的階層を作成します。それぞれのフォワードスラッシュ (/) は階層でレベルを作成します。カスタムプレフィックスを指定することで、この構造を変更できます。カスタムプレフィックスを指定する方法については、「Amazon S3 オブジェクトのカスタムプレフィックス」を参照してください。

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

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

Amazon ES が送信先の場合、[]、[] の 5 つのオプションの 1 つから、時間ベースのインデックスのローテーションオプションを指定できます。NoRotation,OneHour,OneDay,OneWeek, または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
注記

の使用OneWeekオプションを使用すると、Data Firehose は <YEAR>-w の形式でインデックスを自動作成します <WEEK NUMBER> (たとえば、2020-w33)。週番号は UTC 時間を使用し、次の米国の規則に従って計算されます。

  • 日曜日から一週間が始まる

  • 今年の最初の週は、今年の土曜日を含む最初の週です

にまたがる配信AWSアカウントとAWSHTTP エンドポイント宛先のリージョン

Kinesis Data Firehose e は、AWSアカウント。Kinesis Data Firehose 配信ストリームと、宛先として選択した HTTP エンドポイントは、AWSアカウント。

Kinesis Data Firehose は、AWSリージョン。配信ストリームからデータを 1 つのAWSリージョンを HTTP エンドポイントに別のAWS地域。また、配信ストリームから HTTP エンドポイント宛先にデータを配信することもできます。AWSリージョン (たとえば、HTTP エンドポイント URL を目的の宛先に設定して、独自のオンプレミスサーバーに接続します)。これらのシナリオでは、追加のデータ転送料金が配信コストに追加されます。詳細については、「」を参照してください。データ転送セクションの「オンデマンド価格」を参照してください。

重複レコード

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