Lambda Kinesis Firehose インテグレーションの問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

AWS Lambda を Amazon Kinesis Data Firehose と統合して、受信したソースデータを変換し、変換されたデータを宛先に配信しました。しかし、Lambda 関数は呼び出されなかったか、失敗しました。

簡単な説明

Amazon Kinesis Data Firehose で設定された Lambda 関数は、以下の原因で失敗する可能性があります:

  • AWS ID およびAccess Management (IAM) 権限が不十分
  • Lambda の持続時間が最大許容タイムアウトを超えています
  • Lambdaスロットリング
  • Lambda 変換エラー
  • Lambda 関数エラー

**メモ:**Lambda 関数の呼び出しがネットワークタイムアウトになった場合や、呼び出し制限に達したために失敗した場合、Kinesis Data Firehose は呼び出しを 3 回再試行します。詳細については、「データ変換失敗処理」を参照してください。

解像度

Kinesis Data Firehose の Amazon CloudWatch ロギングをまだオンにしていない場合は、有効にしてください。データ変換またはデータ配信のための Lambda 呼び出しが失敗したときに、特定のエラーログを表示できます。Kinesis Data Firehose のエラーロギングは、デリバリーストリームの作成時にオンにできます。ロググループ名の形式は**/aws/kinesisfirehose/delivery-stream-name** です。The delivery-stream-nameは,配信ストリームの名前です。

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

IAM 権限が不十分

「AssumeRoleAccessが拒否されました-アクセスが拒否されました。提供された IAM ロールの信頼ポリシーで Kinesis Data Firehose がそのロールを引き受けることを許可していることを確認してください。「

このエラーは、Amazon Kinesis Data Firehose IAM ロールが「firehose.amazonaws.com」を引き継ぐことが許可されていない場合に発生します。IAM トラストポリシーに、次のような「firehose.amazonaws.com」を引き受ける権限があることを確認してください:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "firehose.amazonaws.com"
      },
     "Action": "sts:AssumeRole"
    }
  ]
}

「呼び出しアクセス拒否-アクセスが拒否されました。アクセスポリシーで Lambda 関数へのアクセスが許可されていることを確保してください。「

このエラーは、Amazon Kinesis Data Firehose IAM ロールに、データ変換に使用される Lambda 関数を呼び出すアクセス権限が許可されていない場合に発生します。IAM ポリシーで Amazon Kinesis Data Firehose が以下のような Lambda 関数を呼び出すことを許可していることを確認してください:

**メモ:**この例のリソース ARN を自分の変数に置き換えてください。

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

Lambda の持続時間が最大許容タイムアウトを超えています

「Firehose で AWS Lambda を呼び出すときにタイムアウトエラーが発生しました。サポートされる関数の最大タイムアウトは 5 分です。「

このエラーは、Lambda 関数が完了するまでに5分以上かかる場合に発生します。Kinesis Data Firehose で Lambda 関数のタイムアウトエラーをトラブルシューティングするには、「データ変換エラー処理」を参照してください。

Lambdaスロットリング

「InvokeLimit超過-Lambdaの同時実行制限を超えています。同時実行制限を増やしてください。」

このエラーは、Lambda の同時実行制限を超えた場合に発生します。CloudWatch ログの Lambda同時実行メトリクスを確認して、使用状況を判断してください。同時実行数の増加をリクエストするには、「クォータ増加のリクエスト」を参照してください。

詳細については、「Lambda 関数のスケーリング」 と「レート超過」エラーと 429 件の「TooManyRequestsException」エラーによる Lambda 関数のスロットリングをトラブルシューティングする方法を教えてください。

Lambda 変換エラー

「JsonProcessingException-Lambda関数から返されたレコードを解析中にエラーが発生しました。返されるレコードが Kinesis Data Firehose で要求されるステータスモデルに従っていることを確認してください。」

このエラーは、Lambda によって返される変換済みレコードが必須の形式でない場合に発生します。Lambda から返されるすべての変換済みレコードには、recordid、** result**、** data パラメーターが含まれている必要があります**。Lambda 関数コードと CloudWatch ログをチェックして、これらのレコードにこれらのパラメータが含まれていることを確認します。

メモ:レコードを意図的に削除するには、値を Dropped に設定します

詳細については、「データ変換とステータスモデル」を参照してください。

「重複したレコードID-同じレコード ID を持つ複数のレコードが返されました。Lambda 関数が各レコードに対して一意のレコード ID を返すようにしてください。」

このエラーは、Lambda 関数から Kinesis Firehose に返された複数の変換済みレコードが同じレコード ID を持つ場合に発生します。レコード ID は、関数の呼び出し時に Kinesis Data Firehose から Lambda に渡されます。Lambda 関数コードと CloudWatch ログをチェックして、各レコード ID が一意であることを確認します。

Lambda 関数エラー

「Lambda 関数は正常に呼び出されましたが、エラー結果が返されました。」

このエラーは、Amazon Kinesis Data Firehose が Lambda 関数を正常に呼び出すことができたが、エラーが原因で Lambda 関数の実行が失敗した場合に発生します。データ変換 CloudWatch メトリックスをチェックして、Kinesis Data Firehose が関数を呼び出したことを確認します。

Kinesis Data Firehose が Lambda 関数を呼び出していない場合は、呼び出し時間をチェックして、タイムアウトパラメータを超えていないか確認してください。Lambda 関数には、より大きなタイムアウト値が必要な場合や、完了するためにより多くのメモリが必要な場合があります。呼び出しメトリクスの詳細については、「呼び出しメトリクス」を参照してください。

「最大許容ペイロードサイズを超えました」または「LAMBDA\ _RUNTIMEハンドラーの成功レスポンスを投稿できませんでした。HTTP レスポンスコード: 413.」

Amazon Kinesis Data Firehose は Lambda 関数を同期的に呼び出し、呼び出しペイロードの上限はリクエストとレスポンスごとに 6 MB です。Lambda のペイロード制限はハードリミットであり、増やすことはできません。各リクエストとレスポンスのバッファサイズが 6 MB を超えないようにしてください。

詳細については、「Lambda クォータ」を参照してください。

関連情報

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

AWS公式
AWS公式更新しました 1年前