翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
トラブルシューティング:CloudWatch ログ記録と CloudTrail のエラー
このページのトピックには、Amazon CloudWatch Logs の解決策と、Amazon Managed Workflows for Apache Airflow 環境で発生する可能性のある 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.
-
次のステップを推奨します。
-
環境の
INFOレベルでタスクログを有効にしていることを確認します。詳細については、「Amazon CloudWatch での Airflow ログへのアクセス」を参照してください。 -
環境 実行ロール に正しい権限ポリシーがあることを確認します。
-
オペレータまたはタスクが正しく動作していること、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
同じ AWS CloudFormation テンプレートを使用して Amazon MWAA 環境と Amazon S3 バケットを作成する場合は、 AWS CloudFormation テンプレート内にDependsOnセクションを追加する必要があります。この2つのリソース(MWAA 環境とMWAA 実行ポリシー)は、 AWS CloudFormation内で依存関係にあります。次のステップを推奨します。
-
AWS CloudFormation テンプレートに次の
DependsOnステートメントを追加します。... MaxWorkers: 5 NetworkConfiguration: SecurityGroupIds: - !GetAtt SecurityGroup.GroupId SubnetIds: !Ref subnetIds WebserverAccessMode: PUBLIC_ONLYDependsOn: MwaaExecutionPolicyMwaaExecutionPolicy: 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を取得する
-
次のステップを推奨します。
-
Apache Airflow v2 を使用している場合、
core.lazy_load_plugins : Falseを Apache Airflow の構成オプションとして追加してください。詳細については、「Using configuration options to load plugins in 2」を参照してください。
-
スケジューラログで psycopg2 'server closed the connection unexpectedly' が表示される
次のようなエラーが発生した場合、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.
次のステップを推奨します。
-
Apache Airflow v2.0.2 へのアップグレードを検討してください。これにより、最大 5 つのスケジューラを指定できます。
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 を使用している場合、Airflow 2.1 以降とのみ互換性がある apache-airflow-providers-databricks
次のステップを推奨します。
-
Apache Airflow v2.0.2 を使用している場合は、
requirements.txtファイルを変更してapache-airflow[databricks]を追加します。これにより、Apache Airflow v2.0.2 と互換性のある正しいバージョンの Databricks パッケージがインストールされます。 -
GitHub DAGs、カスタムプラグイン、Python 依存関係をローカルでテストします。 aws-mwaa-docker-images