トラブルシューティング:CloudWatch ログ記録と CloudTrail のエラー - Amazon Managed Workflows for Apache Airflow

トラブルシューティング:CloudWatch ログ記録と CloudTrail のエラー

このページのトピックには、Amazon Managed Workflows for Apache Airflow 環境で発生する可能性のある Amazon CloudWatch Logs と AWS CloudTrail エラーの解決策が含まれています。

ログ

次のトピックでは、Apache Airflow ログにアクセスする際に発生する可能性があるエラーについて説明します。

タスクログが見つからないか、Reading remote log from Cloudwatch log_group エラーが表示されました

Amazon MWAA は、Amazon CloudWatch Logs との間で直接ログを読み書きするように Apache Airflow を設定しています。ワーカーがタスクの開始に失敗したり、ログの書き込みに失敗したりすると、エラーが表示される:

*** Reading remote log from Cloudwatch log_group: airflow-environmentName-Task log_stream: DAG_ID/TASK_ID/timestamp/n.log.Could not read remote logs from log_group: airflow-environmentName-Task log_stream: DAG_ID/TASK_ID/time/n.log.
  • 次のステップを推奨します。

    1. 環境の INFO レベルでタスクログを有効にしていることを確認します。詳細については、Amazon CloudWatch の Airflow ログへのアクセス を参照してください。

    2. 環境 実行ロール に正しい権限ポリシーがあることを確認します。

    3. オペレータまたはタスクが正しく動作していること、DAG を解析するのに十分なリソースがあること、ロードする適切な Python ライブラリがあることを確認します。正しい依存関係があることを確認するには、問題の原因となっているインポートが見つかるまで、インポートを削除してみます。aws-mwaa-docker-images を使用して Python の依存関係をテストすることをお勧めします。

ログなしでタスクが失敗しました

ワークフロー内のタスクが失敗し、失敗したタスクのログが見つからない場合は、次にリストされるように、デフォルトパラメータに queue パラメータが設定されていることを確認してください。

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago # Setting queue argument to default. default_args = { "start_date": days_ago(1), "queue": "default" } with DAG(dag_id="any_command_dag", schedule_interval=None, catchup=False, default_args=default_args) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="{{ dag_run.conf['command'] }}" )

問題を解決するには、コードから queue を削除し、DAG を再実行してください。

CloudTrail で ResourceAlreadyExistsException エラーが表示される

"errorCode": "ResourceAlreadyExistsException", "errorMessage": "The specified log stream already exists", "requestParameters": { "logGroupName": "airflow-MyAirflowEnvironment-DAGProcessing", "logStreamName": "scheduler_cross-account-eks.py.log" }

特定の Python 要件、例えば Amazon MWAA が CloudWatch と通信するために使用する watchtower ライブラリを以前のバージョンに戻す apache-airflow-backport-providers-amazon があるかもしれません。次のステップを推奨します。

  • 以下のライブラリを requirements.txt に追加する

    watchtower==1.0.6

CloudTrail で Invalid request エラーが表示される

Invalid request provided: Provided role does not have sufficient permissions for s3 location airflow-xxx-xxx/dags

同じ DX テンプレートを使用して Amazon CloudFormation 環境とAmazon S3バケットを作成している場合は、CloudFormation テンプレートに DependsOn セクションを追加する必要があります。この2つのリソース(MWAA 環境MWAA 実行ポリシー)は、CloudFormation 内で依存関係にあります。次のステップを推奨します。

  • CloudFormation のテンプレートに以下の DependsOn 文を追加してください。

    ... MaxWorkers: 5 NetworkConfiguration: SecurityGroupIds: - !GetAtt SecurityGroup.GroupId SubnetIds: !Ref subnetIds WebserverAccessMode: PUBLIC_ONLY DependsOn: MwaaExecutionPolicy MwaaExecutionPolicy: Type: AWS::IAM::ManagedPolicy Properties: Roles: - !Ref MwaaExecutionRole PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: airflow:PublishMetrics Resource: ...

    例については、Amazon Managed Workflows for Apache Airflow のクイックスタートチュートリアル を参照してください。

Apache Airflow ログの Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory を取得する

ディスパッチャのログに psycopg2 「サーバが接続を誤って閉じました」とあります。

次のようなエラーが表示される場合は、Apache Airflow スケジューラリソースが不足している可能性があります。

2021-06-14T10:20:24.581-05:00 sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly 2021-06-14T10:20:24.633-05:00 This probably means the server terminated abnormally 2021-06-14T10:20:24.686-05:00 before or while processing the request.

次のステップを推奨します。

  • 最大 5 つのスケジューラを指定できる Apache Airflow v2.0.2 へのアップグレードを検討してください。

DAG 処理ログの Executor reports task instance %s finished (%s) although the task says its %s を取得する

次のようなエラーが表示される場合は、長時間タスクの実行が Amazon MWAA のタスク時間制限に達している可能性があります。Amazon MWAA では、どの Airflow タスクにも 12 時間の制限があり、タスクがキューに詰まったり、自動スケーリングなどのアクティビティをブロックしたりすることができないようになっています

Executor reports task instance %s finished (%s) although the task says its %s. (Info: %s) Was the task killed externally

次のステップを推奨します。

  • タスクを実行時間の短い複数のタスクに分解することを考慮してください。Airflow には通常、オペレーターが非同期になるというモデルがあります。外部システム上のアクティビティを呼び出し、Apache Airflow センサーがポーリングを行って処理が完了したことをチェックします。センサーに障害が発生しても、オペレーターの機能に影響を与えることなく、安全に再試行できます。

タスクログの Could not read remote logs from log_group: airflow-*{*environmentName}-Task log_stream:* {*DAG_ID}/*{*TASK_ID}/*{*time}/*{*n}.log. を取得する

次のようなエラーが表示される場合、ご使用の環境の実行ロールに、タスクログのログストリームを作成するためのアクセス権限ポリシーが含まれていない可能性があります。

Could not read remote logs from log_group: airflow-*{*environmentName}-Task log_stream:* {*DAG_ID}/*{*TASK_ID}/*{*time}/*{*n}.log.

次のステップを推奨します。

  • Amazon MWAA 実行ロール にあるサンプルポリシーのいずれかを使用して、環境の実行ロールを変更します。

requirements.txt ファイルで Apache Airflow バージョンと互換性のないプロバイダパッケージを指定している場合もあります。例えば、Apache Airflow v2.0.2 を使用している場合、apache-airflow-providers-databricks パッケージのように、Airflow 2.1+ とのみ互換性のあるパッケージを指定している可能性があります。

次のステップを推奨します。

  1. Apache Airflow v2.0.2 を使用している場合は、requirements.txt ファイルを変更して apache-airflow[databricks] を追加します。これにより、Apache Airflow v2.0.2 と互換性のある正しいバージョンの Databricks パッケージがインストールされます。

  2. GitHub の aws-mwaa-docker-images を使用して、DAG、カスタムプラグイン、Python の依存関係をローカルでテストします。