データ配信の失敗を処理する - Amazon Data Firehose

Amazon S3 の Apache Iceberg テーブルへの Amazon Data Firehose ストリームの配信はプレビュー中であり、変更される可能性があります。

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

データ配信の失敗を処理する

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

Firehose ストリームを設定する場合、、Splunk OpenSearch、HTTPエンドポイントなどの多くの送信先に対して、配信に失敗したデータをバックアップできる S3 バケットも設定します。配信に失敗した場合に Firehose がデータをバックアップする方法の詳細については、このページの関連する送信先セクションを参照してください。配信に失敗したデータをバックアップできる S3 バケットへのアクセスを許可する方法の詳細については、Amazon S3に許可する」を参照してください。Firehose は、(a) ストリームの送信先にデータを配信できず、(b) 配信に失敗したデータをバックアップ S3 バケットに書き込めない場合、データが送信先に配信されるか、バックアップ S3 の場所に書き込まれるまで、ストリーム配信を効果的に一時停止します。

Amazon S3

S3 バケットへのデータ配信は、さまざまな理由で失敗する場合があります。例えば、バケットが存在しなくなった場合、Amazon Data Firehose が引き受けるIAMロールにバケットへのアクセス権限がない、ネットワークに障害が発生した、または同様のイベントが発生する可能性があります。このような条件下では、Amazon Data Firehose は配信が成功するまで最大 24 時間再試行し続けます。Amazon Data Firehose の最大データストレージ時間は 24 時間です。データ配信が 24 時間を超えて失敗した場合、データは失われます。

Amazon Redshift

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

Amazon Redshift プロビジョンドクラスターまたは Amazon Redshift Serverless ワークグループへのデータ配信は、いくつかの理由で失敗する場合があります。例えば、Firehose ストリームのクラスター設定が正しくない、メンテナンス中のクラスターまたはワークグループ、またはネットワーク障害がある可能性があります。これらの条件下では、Amazon Data Firehose は指定された期間再試行し、Amazon S3 オブジェクトの特定のバッチをスキップします。スキップされたオブジェクトの情報は、マニフェストファイルとして errors/ フォルダーの S3 バケットに配信されます。この情報は手動のバックフィルに使用できます。マニフェストファイルを使用して手動でCOPYデータを取得する方法については、「マニフェストを使用してデータファイルを指定する」を参照してください。

Amazon OpenSearch Service と OpenSearchサーバーレス

OpenSearch サービスと OpenSearch サーバーレスの送信先では、Firehose ストリームの作成中に再試行時間 (0~7200 秒) を指定できます。

OpenSearch サービスクラスターまたは OpenSearch サーバーレスコレクションへのデータ配信は、いくつかの理由で失敗することがあります。例えば、Firehose ストリームのサービス OpenSearch クラスターまたは OpenSearch サーバーレスコレクション設定が正しくない、メンテナンス中の OpenSearch サービスクラスターまたは OpenSearch サーバーレスコレクション、ネットワーク障害、または同様のイベントがある可能性があります。これらの条件下では、Amazon Data Firehose は指定された期間再試行し、その特定のインデックスリクエストをスキップします。スキップされたドキュメントは AmazonOpenSearchService_failed/ フォルダーの S3 バケットに配信され、手動のバックフィルに使用できます。

Service の場合 OpenSearch 、各ドキュメントのJSON形式は次のとおりです。

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

OpenSearch Serverless の場合、各ドキュメントのJSON形式は次のとおりです。

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

Splunk

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

Amazon Data Firehose がデータを Splunk に送信するたびに、最初の試行でも再試行でも、確認タイムアウトカウンターが再起動されます。Splunk から送達確認が来るのを待機します。再試行期間が終了しても、Amazon Data Firehose は確認応答を受信するか、確認タイムアウトに達するまで確認応答を待機します。確認がタイムアウトすると、Amazon 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. Amazon Data Firehose backs up in Amazon S3 data for which the acknowledgement timeout expired.", "attemptEndingTimestamp": 13626284715507, "rawData": "MiAyNTE2MjAyNzIyMDkgZW5pLTA1ZjMyMmQ1IDIxOC45Mi4xODguMjE0IDE3Mi4xNi4xLjE2NyAyNTIzMyAxNDMzIDYgMSA0MCAxNTA2MDM0NzM0IDE1MDYwMzQ3OTQgUkVKRUNUIE9LCg==", "EventId": "49577193928114147339600778471082492393164139877200035842.0" }

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

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

Amazon Data Firehose は、最初の試行でも再試行でも、HTTPエンドポイントの送信先にデータを送信するたびに、応答タイムアウトカウンターを再起動します。次に、HTTPエンドポイントの送信先から応答が到着するのを待ちます。再試行期間が終了しても、Amazon Data Firehose は応答を受信するか、応答タイムアウトに達するまで応答を待機します。レスポンスがタイムアウトすると、Amazon 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" }

Snowflake

Snowflake 送信先の場合、Firehose ストリームを作成するときに、オプションの再試行時間 (0~7200 秒) を指定できます。再試行時間のデフォルト値は 60 秒です。

Snowflake テーブルへのデータ配信は、Snowflake の送信先設定の誤り、Snowflake の停止、ネットワーク障害など、いくつかの理由で失敗することがあります。再試行ポリシーは、再試行不可能なエラーには適用されません。例えば、テーブルに余分な列がないために Snowflake がJSONペイロードを拒否した場合、Firehose はペイロードを再度配信しようとしません。代わりに、S3 エラーバケットへのJSONペイロードの問題によるすべての挿入失敗のバックアップが作成されます。

同様に、ロール、テーブル、またはデータベースが正しくないために配信が失敗した場合、Firehose はデータを再試行せず、S3 バケットに書き込みます。再試行期間は、Snowflake サービスの問題、一時的なネットワーク障害などの障害にのみ適用されます。これらの条件下では、Firehose は指定された期間再試行してから S3 に配信します。失敗したレコードは Snowflake-failed/ フォルダに配信され、手動バックフィルに使用できます。

以下は、S3 に配信する各レコードJSONの例です。

{ "attemptsMade": 3, "arrivalTimestamp": 1594265943615, "errorCode": "Snowflake.InvalidColumns", "errorMessage": "Snowpipe Streaming does not support columns of type AUTOINCREMENT, IDENTITY, GEO, or columns with a default value or collation", "attemptEndingTimestamp": 1712937865543, "rawData": "c2FtcGxlIHJhdyBkYXRh" }