カスケードの失敗と再実行 - AWS Data Pipeline

カスケードの失敗と再実行

AWS Data Pipeline では、依存関係がエラーになるかユーザーによってキャンセルされたときのパイプラインオブジェクトの動作を設定できます。他のパイプラインオブジェクト(コンシューマー)に確実に失敗をカスケードすることで、無限に保留状態になるのを防ぐことができます。すべてのアクティビティ、データノード、および前提条件には、failureAndRerunMode という名前のフィールドがあり、デフォルト値は none です。失敗のカスケードを有効にするには、failureAndRerunMode フィールドを cascade に設定します。

このフィールドを有効にしているときに、パイプラインオブジェクトが WAITING_ON_DEPENDENCIES 状態でブロックされ、保留コマンドがない状態で依存関係がエラーになった場合、カスケードの失敗が発生します。カスケードが失敗すると、以下のイベントが発生します。

  • オブジェクトで障害が発生すると、そのコンシューマーは CASCADE_FAILED に設定され、元のオブジェクトとコンシューマーの前提条件が CANCELED に設定されます。

  • 既に FINISHEDFAILED、または CANCELED の状態にあるオブジェクトは無視されます。

カスケードの失敗は、エラーになった元のオブジェクトに関連付けられている前提条件を除き、エラーになったオブジェクトの依存関係(上流)に対しては作用しません。カスケードの失敗による影響を受けるパイプラインオブジェクトでは、再試行や、onFail などの後処理がトリガーされることがあります。

カスケードの失敗による詳細な影響は、オブジェクトのタイプによって異なります。

アクティビティ

依存関係のいずれかがエラーになり、それがアクティビティのコンシューマーにおけるカスケードの失敗の原因となった場合、アクティビティは CASCADE_FAILED に変更されます。アクティビティが依存するリソースでエラーが発生した場合、アクティビティは CANCELED になり、そのすべてのコンシューマーは CASCADE_FAILED になります。

データノードと前提条件

失敗したアクティビティの出力としてデータノードが設定されている場合、そのデータノードは CASCADE_FAILED 状態になります。データノードに関連する前提条件がある場合、データノードのエラーが前提条件に伝達され、それらの前提条件は CANCELED 状態になります。

リソース

リソースに依存するオブジェクトが FAILED 状態になり、リソースそのものが WAITING_ON_DEPENDENCIES 状態である場合、そのリソースは FINISHED 状態になります。

カスケードが失敗したオブジェクトの再実行

デフォルトでは、アクティビティまたはデータノードを再実行すると、関連するリソースのみが再実行されます。ただし、パイプラインオブジェクトで failureAndRerunMode フィールドを cascade に設定することで、以下の条件下でターゲットオブジェクトでの再実行コマンドをすべてのコンシューマーに伝達することができます。

  • ターゲットオブジェクトのコンシューマーが CASCADE_FAILED 状態です。

  • ターゲットオブジェクトの依存関係に、保留中の再実行コマンドがない。

  • ターゲットオブジェクトの依存関係が、FAILEDCASCADE_FAILEDCANCELED のいずれの状態でもありません。

CASCADE_FAILED 状態のオブジェクトを再実行したが、その依存関係のいずれかが FAILEDCASCADE_FAILEDCANCELED のいずれかの状態である場合、再実行は失敗し、オブジェクトは CASCADE_FAILED の状態に戻ります。エラーになったオブジェクトを正常に再実行するには、依存関係の連鎖をさかのぼってエラーをトレースし、エラーの根本原因を特定して、そのオブジェクトを再実行する必要があります。リソースに対して再実行コマンドを発行するときは、それに依存するオブジェクトの再実行も試行することになります。

カスケードの失敗とバックフィル

失敗のカスケードを有効にしており、多くのバックフィルを生じるパイプラインがある場合、パイプラインのランタイムエラーによって、有用な処理が行われることなく、リソースの作成と削除が短時間のうちに連続して発生することがあります。AWS Data Pipeline は、パイプラインを保存するときに以下の警告メッセージを発行して、この状況についてのアラートを試みます。 Pipeline_object_name has 'failureAndRerunMode' field set to 'cascade' and you are about to create a backfill with scheduleStartTime start_time. This can result in rapid creation of pipeline objects in case of failures. これは、カスケードの失敗によって下流のアクティビティが CASCADE_FAILED に設定されるために発生し、不要になった EMR クラスターと EC2 リソースがシャットダウンされます。この状況の影響を制限するために、短時間の範囲でパイプラインをテストすることをお勧めします。