Amazon Managed Workflows for Apache Airflow (Amazon MWAA) のスケジューラーに関する一般的な問題を解決したいです。
簡単な説明
スケジューラーは無限ループで実行され、すべてのタスクと DAG を監視し、依存関係が完了するとタスクインスタンスを呼び出します。スケジューラーの状態を確認するために、Apache Airflow はスケジューラーのヘルスエンドポイントをチェックします。scheduler_health_check_threshold のハートビートがない場合、スケジューラーは異常状態です。scheduler_health_check_threshold のデフォルト値は 30 秒です。この値は、Amazon MWAA 環境を設定するときに変更できます。
スケジューラーに問題がある場合は、次のエラーメッセージまたは同様のエラーメッセージが表示されることがあります。
「スケジューラーが実行されていないようです。最後のハートビートが受信されたのは (時間間隔の例) 前です。DAG リストが更新されない可能性があり、新しいタスクはスケジュールされません。」
このエラーが発生する一般的な理由を次に示します。
- ネットワークに関する問題
- 互換性のないモジュール
- スケジューラーの過負荷
- DAG の破損
解決策
ネットワークに関する問題
ネットワークの問題が原因で発生する可能性のあるスケジューラの問題を解決するには、次の項目を確認してください。
- セキュリティグループを確認します。いずれかのセキュリティグループにおいて、ポート 443 とポート 5432 に自己参照ルールが設定されていることを確認します。セキュリティグループがトラフィックを許可するには、これらのポートのいずれかにこのルールが必要です。これらのポートのいずれにも自己参照ルールがない場合は、Amazon MWAA セキュリティグループに新しいインバウンドルールを作成します。次に、必要なポートの自己参照ルールを作成します。また、ネットワークアクセスコントロールリスト (ネットワーク ACL) がポート 443 とポート 5432 へのトラフィックをブロックしていないことを確認してください。
- Amazon MWAA エンドポイントを確認します。Amazon MWAA 環境を作成すると、Amazon Virtual Private Cloud (Amazon VPC) インターフェイスエンドポイントが作成されます。インターフェイスエンドポイントが、Apache Airflow ウェブサーバーと Amazon Aurora PostgreSQL 互換エディションのメタデータデータベース用に作成されます。これらのエンドポイントのいずれかが削除されると、Amazon MWAA 環境が破損し、スケジューラーにエラーが発生します。これらのエンドポイントは再作成できないため、この問題を解決するには、新しい Amazon MWAA 環境を作成します。詳細については、「Amazon MWAA で独自の Amazon VPC エンドポイントを管理する」を参照してください。
互換性のないモジュール
Amazon MWAA 環境にまだインストールされていない、追加の Python モジュールが必要な場合は、その Python モジュールを含む制約ファイルを requirements.txt に追加します。その後、Amazon MWAA コンポーネントがプロビジョニングされたら、モジュールをインストールできます。指定した Apache Airflow バージョンに互換性のないバージョンの Python モジュールをインストールすると、環境が破損し、スケジューラーエラーが発生する可能性があります。
Amazon MWAA 環境に互換性のないモジュールやバージョンがないかどうかを確認するには、ワーカーとスケジューラーの requirements_install ログを確認します。次のエラーまたは同様のエラーが表示されていないか確認してください。
"エラー: データベースをアップグレードする必要があります。"airflow db upgrade" を実行してください。"
"エラー: これらのパッケージバージョンには競合する依存関係があるため、(example-package-name と example-version) をインストールできません。
競合は、次の理由で発生します。
ユーザーが (example-package-name と example-version) をリクエストしました。
ユーザーが (constraint-example-package-name と constraint-example-version) をリクエストしました。"
上記のエラーを解決するには、次のアクションを実行します。
- エラーメッセージがデータベースをアップグレードするように指示している場合は、メタデータデータベースが破損しています。正しいモジュールバージョンを使用して新しい環境を作成する必要があります。
- エラーメッセージが、パッケージバージョンにおいて依存関係が競合していることを示している場合は、正しいモジュールバージョンで環境を更新します。
注: Apache Airflow バージョン 2.7.2 以降では、制約ファイルを requirements.txt に含める必要があります。要件をテストするには、aws-mwaa-local-runner と正しい Apache Airflow バージョンを使用するのがベストプラクティスです。詳細については、GitHub のウェブサイトで「aws-mwaa-local-runner」を参照してください。
スケジューラーの過負荷
スケジューラーに過負荷がかからないようにするには、スケジューラーの CPU とメモリの使用率が 90% を超えないようにしてください。ベストプラクティスは、**.airflowignore ** ファイルと、DAG オブジェクトを作成しないすべてのフォルダとファイルを DAG フォルダに配置することです。こうすることで、スケジューラーはこれらのファイルやフォルダを解析せずに済みます。詳細については、Apache Airflow のウェブサイトで「.airflowignore」を参照してください。また、スケジューラーの構成が最大値を超えないようにしてください。たとえば、AIRFLOW_SCHEDULER_PARSING_PROCESSES を vCPU コアの最大数よりも高い値に設定した場合、スケジューラのパフォーマンスが低下したり、スケジューラが中断したりします。
DAG の破損
DAG が壊れていると、スケジューラーは機能しなくなります。この問題を解決するには、新しい DAG または最近追加された DAG をすべて削除します。次に、問題のある DAG が特定されるまで、それらを 1 つずつ追加し直します。DAG をテストするには、aws-mwaa-local runner を使用します。詳細については、GitHub のウェブサイトで「aws-mwaa-local-runner」を参照してください。
関連情報
VPC セキュリティグループ