一般的な問題を解決する - AWS Data Pipeline

一般的な問題を解決する

このトピックでは、AWS Data Pipeline で発生する問題のさまざまな症状と、それを解決するお勧めの手順を示します。

ステータスが保留中のままパイプラインが先に進まない

PENDING ステータスのまま停止していると思われるパイプラインは、パイプラインがまだアクティブ化されていないか、パイプライン定義のエラーのためにアクティブ化に失敗したことを示しています。AWS Data Pipeline CLI を使用してパイプラインを送信したとき、または AWS Data Pipeline コンソールを使用してパイプラインを保存またはアクティブ化しようとしたときに、エラーが発生しなかったことを確認します。さらに、パイプライン定義が有効であることも確認します。

CLI を使用して画面にパイプライン定義を表示するには、次のように入力します。

aws datapipeline --get-pipeline-definition --pipeline-id df-EXAMPLE_PIPELINE_ID

パイプライン定義が完全であることを確認します。閉じる中括弧があること、必要なカンマがあること、不明な参照がないこと、その他の構文エラーがないことを確認してください。JSON ファイルの構文を視覚的に検証できるテキストエディタを使用するのが最善です。

Runner のステータスを待機してパイプラインコンポーネントが先に進まない

SCHEDULED 状態のパイプラインに、WAITING_FOR_RUNNER 状態で停止しているように思われるタスクがある場合は、そのタスクの runsOn または workerGroup フィールドに有効な値が設定されていることを確認します。両方の値が空か、指定されていない場合、タスクと、タスクを実行するワーカーとの間に関連付けがないため、タスクを開始できません。これは、作業を定義したが、その作業を実行するコンピュータを定義していないという状況です。該当する場合は、パイプラインコンポーネントに割り当てた workerGroup 値が、Task Runner 用に設定した workerGroup 値と、大文字小文字も含めて厳密に同じ名前であることを確認します。

注記

runsOn 値を指定して、workerGroup がある場合、workerGroup は無視されます。

この問題のもう一つ考えられる原因は、Task Runner に渡されたエンドポイントおよびアクセスキーが、AWS Data Pipeline コンソール、または AWS Data Pipeline CLI ツールがインストールされたコンピューターと同じでないことです。エラーなしで新しいパイプラインが作成されたように見えても、認証情報の違いにより、Task Runner が間違った場所をポーリングしているか、正しい場所をポーリングしていても、アクセス許可が不十分で、パイプライン定義によって指定された作業を特定して実行することができません。

WAITING_ON_DEPENDENCIES ステータスでパイプラインコンポーネントが先に進まない

パイプラインが SCHEDULED 状態で、1 つ以上のタスクが WAITING_ON_DEPENDENCIES 状態で停止しているような場合は、パイプラインの初期前提条件が満たされていることを確認します。ロジックチェーンの最初のオブジェクトの前提条件が満たされていない場合、その最初のオブジェクトに依存するオブジェクトはどれも WAITING_ON_DEPENDENCIES 状態を抜けることができません。

たとえば、以下のようなパイプライン定義があるとします。この場合、InputData オブジェクトには前提条件として 'Ready' があり、InputData オブジェクトが完了する前にデータが存在する必要があります。データが存在しない場合、InputData オブジェクトは、WAITING_ON_DEPENDENCIES 状態のまま、パスフィールドで指定したデータが使用可能になるまで待ちます。同様に、InputData に依存するすべてのオブジェクトが WAITING_ON_DEPENDENCIES 状態のまま、InputData オブジェクトが FINISHED 状態になるまで待ちます。

{ "id": "InputData", "type": "S3DataNode", "filePath": "s3://elasticmapreduce/samples/wordcount/wordSplitter.py", "schedule":{"ref":"MySchedule"}, "precondition": "Ready" }, { "id": "Ready", "type": "Exists" ...

また、オブジェクトにデータにアクセスする適切なアクセス許可があることを確認します。前の例で、パスフィールドに指定されたデータへのアクセス許可が認証情報フィールドに含まれていない場合、InputData オブジェクトはパスフィールドに指定されたデータにアクセスできないため、たとえデータが存在していても、WAITING_ON_DEPENDENCIES 状態のまま先に進みません。

また、Amazon S3 と通信するリソースに、パブリック IP アドレスが関連付けられていない可能性もあります。たとえば、パブリックサブネット内の Ec2Resource には、パブリック IP アドレスが関連付けられている必要があります。

最後に、状況によっては、関連アクティビティの開始予定よりもはるか前に、リソースインスタンスが WAITING_ON_DEPENDENCIES 状態になる場合があります。この場合、リソースやアクティビティが失敗しているように見えることがあります。

予定した時期に実行が開始されない

タスクがスケジュール間隔の開始時に開始されるか(Cron スタイルのスケジュールタイプ)、または、スケジュール間隔の終了時に開始されるか(時系列のスケジュールタイプ)を決定する正しいスケジュールタイプを選択していることを確認します。

さらに、スケジュールオブジェクトで適切な日付を指定していること、および startDateTime と endDateTime の値が以下の例のように UTC 形式であることを確認します。

{ "id": "MySchedule", "startDateTime": "2012-11-12T19:30:00", "endDateTime":"2012-11-12T20:30:00", "period": "1 Hour", "type": "Schedule" },

パイプラインコンポーネントが間違った順番で実行される

パイプラインコンポーネントの開始時間と終了時間を見ると、間違った順序で実行されているか、または、想定とは異なる順序になっている場合があります。起動時に前提条件が満たされていれば、パイプラインコンポーネントは同時に実行を開始できることを理解することが重要です。つまり、パイプラインコンポーネントはデフォルトでは順次実行されません。特定の順序で実行する場合は、前提条件と dependsOn フィールドを使用して実行順序を制御する必要があります。

dependsOn フィールドに正しい必須パイプラインコンポーネントへの参照が設定済みであること、および、目的の順序を実現するために必要なコンポーネント間のポインタがすべて存在することを確認します。

EMR クラスターが「リクエストに含まれているセキュリティトークンが無効です」というエラーで失敗する

IAM ロール、ポリシー、信頼関係が、AWS Data Pipeline の IAM ロールで説明されているとおりになっているか確認します。

リソースにアクセスするアクセス許可が不十分である

IAM ロールに設定したアクセス許可によって、AWS Data Pipeline が EMR クラスターおよび EC2 インスタンスにアクセスしてパイプラインを実行できるかどうかが決まります。さらに、IAM には信頼関係の概念があり、お客様に代わってリソースを作成することも許可されます。たとえば、EC2 インスタンスを使用するパイプラインを作成して、データを移動するコマンドを実行するときに、AWS Data Pipeline はこの EC2 インスタンスをお客様の代わりにプロビジョニングすることができます。問題が発生した場合、特に、手動ではアクセスできるのに、AWS Data Pipeline ではアクセスできないリソースが関連する場合は、IAM ロール、ポリシー、信頼関係がAWS Data Pipeline の IAM ロールで説明されているとおりになっているか確認します。

ステータスコード: 400 エラーコード: PipelineNotFoundException

このエラーは、IAM のデフォルトロールに必要なアクセス許可がなく、AWS Data Pipeline が適切に機能しないことを意味します。詳細については、「AWS Data Pipeline の IAM ロール」を参照してください。

パイプラインを作成するとセキュリティトークンエラーが発生する

パイプラインを作成しようとすると、次のエラーが発生します。

Failed to create pipeline with 'pipeline_name'。Error: UnrecognizedClientException - The security token included in the request is invalid。

コンソールでパイプラインの詳細を表示できない

AWS Data Pipeline コンソールのパイプラインフィルタは、パイプラインが送信された時期に関係なく、パイプラインの予定された開始日に対して適用されます。予定された開始日を過去の日付にして新しいパイプラインを送信することは可能です。この場合、デフォルトの日付フィルタでは表示されないことがあります。パイプラインの詳細を表示するには、日付フィルターを変更して、予定されたパイプライン開始日が日付フィルタの範囲におさまるようにします。

リモートランナーのエラー - ステータスコード: 404, AWS サービス: Amazon S3

このエラーは、Task Runner が Amazon S3 ファイルにアクセスできないことを意味します。以下を確認してください。

  • 認証情報を正しく設定していること

  • アクセスしようとしている Amazon S3 バケットが存在すること

  • Amazon S3 バケットにアクセスする権限がお客様にあること

アクセスが拒否される - datapipeline 関数を実行する権限がない

Task Runner ログに、次のようなエラーが記録されることがあります。

  • ERROR Status Code: 403

  • AWS Service: DataPipeline

  • AWS Error Code: AccessDenied

  • AWS Error Message: User: arn:aws:sts::XXXXXXXXXXXX:federated-user/i-XXXXXXXX is not authorized to perform: datapipeline:PollForTask。

注記

このエラーメッセージで、PollForTask は、他の AWS Data Pipeline アクセス権限と置き換わっている場合があります。

このエラーメッセージは、指定した IAM ロールが AWS Data Pipeline とやり取りするには、追加のアクセス許可が必要であることを示します。IAM ロールポリシーに、以下の行が含まれていることを確認してください。PollForTask は、追加するアクセス許可の名前に置き換えます (すべてのアクセス許可を付与する場合は、* を使用します)。新しい IAM ロールを作成し、それにポリシーを適用する方法については、IAM の使用IAM ポリシーを管理するを参照してください。

{ "Action": [ "datapipeline:PollForTask" ], "Effect": "Allow", "Resource": ["*"] }

古い Amazon EMR AMI では、大きい CSV ファイルに対して間違ったデータが作成される可能性がある

3.9 より前 (3.8 以前) の Amazon EMR AMI では、AWS Data Pipeline はカスタム InputFormat を使用して、MapReduce ジョブで使用する CSV ファイルを読み書きします。これは、サービスがテーブルを Amazon S3 との間でステージングするときに使用されます。この InputFormat の問題は、大きな CSV ファイルからレコードを読み取ると、正しくコピーされていないテーブルが作成される場合があることから発見されました。この問題は将来の Amazon EMR のリリースで修正されます。Amazon EMR AMI 3.9 または Amazon EMR リリース 4.0.0 以降を使用してください。

AWS Data Pipeline の上限を引き上げる

ときどき、AWS Data Pipeline システムの特定の上限を超えることがあります。たとえば、パイプラインのデフォルトの上限は、パイプライン数が 20 個、オブジェクト数がそれぞれ 50 個です。上限を超えるパイプラインが必要になった場合は、複数のパイプラインを統合してパイプラインの数を減らし、それぞれのオブジェクト数を増やすことを検討してください。AWS Data Pipeline の制限の詳細については、「AWS Data Pipeline の制限」を参照してください。ただし、パイプラインの統合という技を使っても制限を回避できない場合は、このフォームを使用して、容量の増加を依頼します: Data Pipeline の上限の引き上げ