web-dev-qa-db-ja.com

AWS KinesisFirehoseがRedshiftにデータを挿入しない

KinesisFirehoseがRedshiftテーブルにデータをプッシュするようにしています。

消防ホースストリームは機能しており、S3にデータを配置しています。

しかし、Redshiftの宛先テーブルには何も到着しません。

  • メトリックでは、DeliveryToRedshiftの成功は0です(DeliveryToRedshiftレコードは空です)
  • ロードログ(redshift Webコンソール)とSTL_LOAD_ERRORSテーブルは空です。
  • FirehoseがRedshiftに接続できることを確認しました(STL_CONNECTION_LOGに接続が表示されます)

どうすればこれをトラブルシューティングできますか?

15
mathieu

結局、Firehoseストリームを削除して再作成することで、それを機能させました:-/おそらく、Webコンソールを介して繰り返し編集すると、物事が不安定になりました。

しかし、ここにトラブルシューティングのガイドラインがあります:

  • 良い出発点はこの手順です: http://docs.aws.Amazon.com/firehose/latest/dev/troubleshooting.html
  • データがS3に到着していることを確認します
  • この時点で、Firehoseモニタリングの「DeliveryToS3Success」メトリックはゼロ以外である必要があります
  • Redshiftクラスターはパブリックにアクセス可能である必要があります(クラスターWebコンソールを参照)
  • クラスタのセキュリティグループは、Firehose IPアドレスからのインバウンドトラフィックを許可する必要があります:Firehoseは現在、利用可能なAWSリージョンごとに1つのCIDRブロックを使用しています:
    • 米国東部(バージニア州北部)の場合は52.70.63.192/27
    • 米国西部(オレゴン)の場合は52.89.255.224/27
    • EU(アイルランド)の場合は52.19.239.192/27
  • Firehoseに与えたredshiftユーザー/パスワードを再確認してください
  • この時点で、Redshiftログで接続の試行を確認できるはずです。

    select * from stl_connection_log where remotehost like '52%' order by recordtime desc;  
    
  • Firehoseが使用するRedshiftユーザーがターゲットテーブルに対して十分な権限を持っていることを確認してください。

    select tablename, 
       HAS_TABLE_PRIVILEGE(tablename, 'select') as select,
       HAS_TABLE_PRIVILEGE(tablename, 'insert') as insert,
       HAS_TABLE_PRIVILEGE(tablename, 'update') as update,
       HAS_TABLE_PRIVILEGE(tablename, 'delete') as delete, 
       HAS_TABLE_PRIVILEGE(tablename, 'references') as references 
    from pg_tables where schemaname='public' order by tablename;
    
  • 次に、COPYコマンドが実行されているかどうかを確認できます。

    select * from stl_query order by endtime desc limit 10;
    
  • 次に、ロードエラーまたはサーバーエラーを確認します。

    select * from stl_load_errors  order by starttime desc;
    select * from stl_error where userid!=0 order by recordtime desc;
    
  • データまたはCOPYオプションにフォーマットの問題がある場合、またはデータとターゲット列の不一致がある場合は、少なくともCOPYの試行といくつかのロードエラーが表示されるはずです。

  • それでもスタックし、ログテーブルに何も表示されない場合は、Firehoseストリーム全体を削除して再作成してみてください。これは、Webコンソールに関連するバグがある可能性があるためです。 (このステップは私のために働いた)

38
mathieu

IAMロールに移動します(firehose_delivery_role)Kinesis Firehoseのセットアップ中に自動作成され、次のロールがアタッチされていることを確認します。

AmazonS3FullAccess
AmazonRedshiftFullAccess
AmazonKinesisFullAccess
AmazonKinesisFirehoseFullAccess

IAMのS3認証情報が省略され、Kinesisセットアップが機能しなくなるバグがあります。

また、S3に蓄積されているデータファイルが実際に表示されていることを確認してください。

6
user5665464

ここで迷子になった人のために私のケースを投稿したかった。

ここに掲載されている指示を介して、S3バケットへのサーバー側暗号化呼び出しを実施していました: http://docs.aws.Amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html

Firehoseが使用するバケットでこのポリシーを使用する場合の問題は、Firehoseが暗号化されていないマニフェストファイルと暗号化されたデータファイルを作成することです。このポリシーが適用されている場合、マニフェストファイルはS3で作成されないため、Redshiftのロードはトリガーされません。したがって、私たちの行動は、データがバケットに到着することを示しましたが、マニフェストファイルはなく、データのロードはありません。

4
etspaceman

Kinesis Firehosのセットアップ中に、Redshift masteruser資格情報を使用します。他のユーザーは機能しません。

1
user5665464