Kinesis Data Firehose でデータ配信が失敗するのはなぜですか?

所要時間3分
0

Amazon Kinesis Data Firehose から Amazon OpenSearch Service ドメインにデータを送信しようとしています。データ配信が失敗したのはなぜですか?

簡単な説明

Kinesis Data Firehose と Amazon OpenSearch Service の間での配信が失敗した場合は、次の理由が考えられます。

  • 無効な配信先
  • 受信データなし
  • 無効にされた Kinesis Data Firehose ログ
  • 適切なアクセス許可の欠如
  • AWS Lambda 関数の呼び出しの問題
  • OpenSearch Service のドメインヘルスに関する問題

解決方法

無効な配信先

有効な Kinesis Data Firehose 配信先を指定したこと、および正しい ARN を使用していることを確認します。配信が成功したかどうかを確認するには、Amazon CloudWatch で DeliveryToElasticsearch.Success メトリクスを確認します。DeliveryToElasticsearch.Success メトリクス値が 0 の場合、配信が失敗したことを確認できます。DeliveryToElasticsearch.Success メトリクスの詳細については、「CloudWatch データ配信メトリクス」で「OpenSearch Service への配信」を参照してください。

受信データなし

IncomingRecords および IncomingBytes メトリクスをモニタリングして、Kinesis Data Firehose に受信データがあることを確認します。これらのメトリクスの値が 0 の場合、Kinesis Data Firehose に到達するレコードがないことを意味します。IncomingRecords および IncomingBytes メトリクスの詳細については、「データ取り込みメトリクス」の「Direct PUT によるデータ取り込み」を参照してください。

配信ストリームで Amazon Kinesis Data Streams をソースとして使用する場合は、Kinesis データストリームの IncomingRecords および IncomingBytes メトリクスを確認します。これら 2 つのメトリクスは、受信データがあるかどうかを示します。値 0 は、ストリーミングサービスに到達するレコードがないことを確認します。

DataReadFromKinesisStream.Bytes および DataReadFromKinesisStream.Records メトリクスをチェックして、データが Kinesis Data Streams から Kinesis Data Firehose に送信されるかどうかを確認します。データメトリクスの詳細については、Data ingestion through Kinesis Data Streams を参照してください。値が 0 の場合、Kinesis Data Streams と Kinesis Data Firehose の間で障害が発生しているのではなく、OpenSearch Service に配信できないことを示します。

また、Kinesis Data Firehose の PutRecord および PutRecordBatch API コールが、正しく呼び出されているかどうかを確認することもできます。受信データフローメトリクスが表示されない場合は、PUT オペレーションを実行しているプロデューサーを確認します。プロデューサーアプリケーションの問題をトラブルシューティングするための詳細については、Troubleshooting Amazon Kinesis Data Streams producers を参照してください。

無効にされた Kinesis Data Firehose ログ

Kinesis Data Firehose で ログ記録 が有効になっていることを確認します。それ以外の場合、エラーログは配信失敗となります。次に、CloudWatch Logs で /aws/kinesisfirehose/delivery-stream-name ロググループ名を確認します。

Kinesis Data Firehose ロールでは、以下のアクセス許可が必要です。

{
     "Action": [
          "logs:PutLogEvents"
     ]
},
{
     "Resource": [
          "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name"
     ]
}

Kinesis Data Firehose にパブリック OpenSearch Service の送信先へのアクセス権を付与していることを確認します。データ変換機能を使用している場合は、AWS Lambda へのアクセス権も付与する必要があります。

適切なアクセス許可の欠如

Kinesis Data Firehose の設定に応じて、いくつかのアクセス許可が必要です。

Amazon Simple Storage Service(Amazon S3) バケットにレコードを配信するには、以下のアクセス許可が必要です。

{      
     "Effect": "Allow",
     "Action": [
          "s3:AbortMultipartUpload",
          "s3:GetBucketLocation",
          "s3:GetObject",
          "s3:ListBucket",
          "s3:ListBucketMultipartUploads",
          "s3:PutObject"
     ],      
     "Resource": [        
          "arn:aws:s3:::bucket-name",
          "arn:aws:s3:::bucket-name/*"
     ]    
}

注: このポリシーを使用するには、Amazon S3 バケットリソースが存在している必要があります。

Kinesis Data Firehose が保管中に暗号化されている場合、次のアクセス許可が必要です。

{
     "Effect": "Allow",
     "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
     ],
     "Resource": [
          "arn:aws:kms:region:account-id:key/key-id"
     ],
     "Condition": {
          "StringEquals": {
               "kms:ViaService": "s3.region.amazonaws.com"
          },
          "StringLike": {
               "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*"
          }
     }
}

OpenSearch Service アクセス権の許可を与えるには、次のようにポリシーを更新できます。

{
     "Effect": "Allow",
     "Action": [
          "es:DescribeElasticsearchDomain",
          "es:DescribeElasticsearchDomains",
          "es:DescribeElasticsearchDomainConfig",
          "es:ESHttpPost",
          "es:ESHttpPut"
     ],
     "Resource": [
          "arn:aws:es:region:account-id:domain/domain-name",
          "arn:aws:es:region:account-id:domain/domain-name/*"
     ]
},
{
     "Effect": "Allow",
     "Action": [
          "es:ESHttpGet"
     ],
     "Resource": [
          "arn:aws:es:region:account-id:domain/domain-name/_all/_settings",
          "arn:aws:es:region:account-id:domain/domain-name/_cluster/stats",
          "arn:aws:es:region:account-id:domain/domain-name/index-name*/_mapping/type-name",
          "arn:aws:es:region:account-id:domain/domain-name/_nodes",
          "arn:aws:es:region:account-id:domain/domain-name/_nodes/stats",
          "arn:aws:es:region:account-id:domain/domain-name/_nodes/*/stats",
          "arn:aws:es:region:account-id:domain/domain-name/_stats",
          "arn:aws:es:region:account-id:domain/domain-name/index-name*/_stats"
     ]
}

Kinesis Data Streams をソースとして使用している場合は、次のようにアクセス許可を更新します。

{
     "Effect": "Allow",
     "Action": [
          "kinesis:DescribeStream",
          "kinesis:GetShardIterator",
          "kinesis:GetRecords",
          "kinesis:ListShards"
     ],
     "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name"
}

データ変換用に Kinesis Data Firehose を設定するには、次のようにポリシーを更新できます。

{
     "Effect": "Allow", 
     "Action": [
          "lambda:InvokeFunction", 
          "lambda:GetFunctionConfiguration" 
     ],
     "Resource": [
          "arn:aws:lambda:region:account-id:function:function-name:function-version"
     ]
}

AWS Lambda 関数の呼び出しの問題

Kinesis Data Firehose ExecuteProcessing.Success および Errors メトリクスをチェックして、Kinesis Data Firehose が関数を呼び出したことを確認します。Kinesis Data Firehose が Lambda 関数を呼び出していない場合は、呼び出しにかかった時間を調べて、タイムアウトパラメータを超えているかどうかを確認します。Lambda 関数では、より大きなタイムアウト値を必要としたり、時間内に完了するために多くのメモリが必要になる場合があります。呼び出しメトリクスの詳細については、呼び出しメトリクスの使用を参照してください。

Kinesis Data Firehose が Lambda 関数を呼び出さない理由を特定するには、Amazon CloudWatch Logs グループで /aws/lambda/lambda-function-name を確認します。データ変換が失敗した場合、失敗したレコードは processing-failed フォルダのバックアップとして S3 バケットに配信されます。S3 バケットのレコードには、失敗した呼び出しのエラーメッセージも含まれます。Lambda 呼び出しの失敗の解決の詳細については、「データ変換失敗の処理」をご参照ください。

OpenSearch Service のドメインヘルスに関する問題

次のメトリクスをチェックして、OpenSearch Service が正常であることを確認します。

  • CPU 使用率: このメトリクスが常に高い場合、データノードはリクエストまたは受信データに応答できない可能性があります。クラスターのスケーリングが必要になる場合があります。
  • JVM メモリプレッシャー: JVM メモリプレッシャが一貫して 80% を超える場合、クラスターはメモリサーキットブレーカーの例外をトリガーしている可能性があります。これらの例外により、データのインデックス作成が防止されます。
  • ClusterWriteBlockException: このインデックスブロックは、ドメインの JVM メモリ負荷が高い場合、またはより多くのストレージ容量が必要な場合に発生します。データノードに十分な容量がない場合、新しいデータにインデックスを作成することはできません。OpenSearch Service の問題のトラブルシューティングの詳細については、「Amazon OpenSearch Service のトラブルシューティング」をご参照ください。

AWS公式
AWS公式更新しました 3年前
コメントはありません

関連するコンテンツ