OpenSearch Service ドメインを宛先とする Kinesis Data Firehose でデータ配信障害が生じるのはなぜですか?
Amazon Kinesis Data Firehose から Amazon OpenSearch Service ドメインにデータを送信したいのですが、データ配信障害が生じます。
簡単な説明
次の理由により、Kinesis Data Firehose と Amazon OpenSearch Service 間の配信障害を引き起こす可能性があります。
- 配信先が無効です
- 適切な権限の欠如
- AWS Lambda 関数の呼び出しに関する問題
- OpenSearch サービスドメインのヘルス問題
解決策
Kinesis Data Firehose のロギングを有効にします。エラーログを Amazon CloudWatch に送信すると、問題を絞り込むことができます。次に、Amazon CloudWatch Logs の /aws/kinesisfirehose/delivery-stream-name ロググループ名を確認します。
CloudWatch ロググループにログを配信するには、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 サービスの公開宛先へのアクセス権を付与していることを確認します。データ変換機能を使用する場合は、Lambda へのアクセス権も付与する必要があります。詳細については、「Amazon Kinesis Data Firehose を使用して VPC のプライバシーの範囲内で Amazon Elasticsearch サービスにストリーミングデータを取り込む」を参照してください。
配信先が無効です
有効な Kinesis Data Firehose の配信先を指定していること、および正しい ARN を使用していることを確認します。CloudWatch の DeliveryToElasticsearch.Success メトリクスを表示して、配信が成功したかどうかを確認します。メトリクス値が 0 の場合は、配信が失敗したことが確認されます。DeliveryToElasticsearch.Success の詳細については、「データ配信 CloudWatch メトリクス」の「OpenSearch サービスへの配信」を参照してください。
適切な権限の欠如
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 データストリームをソースとして使用する場合は、権限を更新してください。
{ "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" ] }
クラスターでファイングレインアクセス制御 (FGAC) を有効にする場合は、OpenSearch Dashboards にログインしてロールマッピングを追加してください。ロールマッピングにより、Kinesis Data Firehose ロールは OpenSearch サービスにリクエストを送信できます。
OpenSearch ダッシュボードにログインしてロールマッピングを追加するには、以下の手順を実行します。
- [ダッシュボード] を開きます。
- [セキュリティ] タブを選択します。
- [ロール] を選択します。
- [all_access] ロールを選択します。
- [マップされたユーザー] タブを選択します。
- [マッピングを管理] を選択します。
- バックエンドロールセクションで、Kinesis Data Firehose ロールを入力します。
- [マップ] を選択します。
AWS Lambda 関数の呼び出しに関する問題
Kinesis Data Firehose ExecuteProcessing.Success and Errors メトリックをチェックして、Kinesis Data Firehose が関数を呼び出していることを確認します。Kinesis Data Firehose が Lambda 関数を呼び出していない場合は、呼び出し時間をチェックして、タイムアウトパラメータを超えていないか確認してください。Lambda 関数には、より大きなタイムアウト値が必要な場合や、時間内に完了するためにより多くのメモリが必要な場合があります。呼び出しメトリクスの詳細については、「呼び出しメトリクス」を参照してください。
Kinesis Data Firehose が Lambda 関数を呼び出さない理由を特定するには、CloudWatch ロググループで /aws/lambda/lambda-function-name を確認します。データ変換が失敗した場合、失敗したレコードは processing-failed フォルダのバックアップとして S3 バケットに配信されます。S3 バケットのレコードには、呼び出しが失敗した場合のエラーメッセージも含まれています。Lambda 呼び出し失敗の解決の詳細については、「データ変換失敗処理」を参照してください。
OpenSearch サービスドメインのヘルス問題
以下の指標をチェックして、OpenSearch サービスが良好な状態であることを確認してください。
- **CPU 使用率:**このメトリクスが常に高い場合、データノードはどのリクエストや受信データにも応答できない可能性があります。クラスターをスケーリングする必要があるかもしれません。
- **JVM メモリ圧が高い:**JVM のメモリ負荷が常に 80% を超えている場合は、クラスターがメモリサーキットブレーカーの例外を開始している可能性があります。これらの例外により、データのインデックス作成が妨げられる可能性があります。
- **ClusterWriteBlockException:**このインデックスブロックは、ドメインに JVM のメモリ負荷が高い場合や、より多くのストレージスペースが必要な場合に発生します。データノードに十分なスペースがないと、新しいデータをインデックス化できません。OpenSearch サービスの問題のトラブルシューティングの詳細については、「Amazon OpenSearch サービスのトラブルシューティング」を参照してください。
受信データなし
Kinesis Data Firehose の受信データがあることを確認するには、IncomingRecords と IncomingBytesメトリクスを監視します。値がゼロの場合、Kinesis Data Firehose に到達するレコードがないことを意味します。IncomingRecords メトリクスと IncomingBytes メトリクスの詳細については、「データインジェストメトリクス」の**「ダイレクト PUT によるデータインジェスト」**を参照してください。
デリバリーストリームが Amazon Kinesis Data Streams をソースとして使用している場合は、Kinesis データストリームの IncomingRecords と IncomingBytes メトリクスを確認します。これら 2 つのメトリクスは受信データを示します。値が 0 の場合、ストリーミングサービスに届くレコードがないことが確認されます。
DataReadFromKinesisStream.Bytes と DataReadFromKinesisStream.Records メトリクスを確認して、データが Kinesis Data Streams かた Kinesis Data Firehose に送信されていることを確認します。データメトリクスの詳細については、「データインジェストメトリクス」の**「Kinesis Data Streams を介したデータインジェスト」**を参照してください。値が 0 の場合は、Kinesis Data Streams と Kinesis Data Firehose 間の障害ではなく、OpenSearch サービスへの配信が失敗したことを示している可能性があります。
また、Kinesis Data Firehose の PutRecord および PutRecordBatch API 呼び出しが正しく呼び出されているかどうかを確認することもできます。受信データフローメトリクスが表示されない場合は、PUT 操作を実行するプロデューサーを確認してください。プロデューサーアプリケーションの問題のトラブルシューティングの詳細については、「Amazon Kinesis Data Streams プロデューサーのトラブルシューティング」を参照してください。
関連するコンテンツ
- 質問済み 5ヶ月前lg...
- AWS公式更新しました 2年前