

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# トラブルシューティング:CloudWatch ログ記録と CloudTrail のエラー
<a name="t-cloudwatch-cloudtrail-logs"></a>

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

**Contents**
+ [ログ](#troubleshooting-view-logs)
  + [タスクログが見つからないか、`Reading remote log from Cloudwatch log_group` エラーが表示されました](#t-task-logs)
  + [ログなしでタスクが失敗しました](#t-task-failing-no-logs)
  + [CloudTrail で `ResourceAlreadyExistsException` エラーが表示される](#t-cloudtrail)
  + [CloudTrail で `Invalid request` エラーが表示される](#t-cloudtrail-bucket)
  + [Apache Airflow ログの `Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory` を取得する](#t-plugins-logs)
  + [ディスパッチャのログに psycopg2 「サーバが接続を誤って閉じました」とあります。](#scheduler-postgres-library)
  + [DAG 処理ログの `Executor reports task instance %s finished (%s) although the task says its %s` を取得する](#long-running-tasks)
  + [タスクログの `Could not read remote logs from log_group: airflow-*{*environmentName}-Task log_stream:* {*DAG_ID}/*{*TASK_ID}/*{*time}/*{*n}.log.` を取得する](#t-task-fail-permission)

## ログ
<a name="troubleshooting-view-logs"></a>

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

### タスクログが見つからないか、`Reading remote log from Cloudwatch log_group` エラーが表示されました
<a name="t-task-logs"></a>

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 ログへのアクセス](monitoring-airflow.md) を参照してください。

  1. 環境 [実行ロール](mwaa-create-role.md) に正しい権限ポリシーがあることを確認します。

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

### ログなしでタスクが失敗しました
<a name="t-task-failing-no-logs"></a>

ワークフロー内のタスクが失敗し、失敗したタスクのログが見つからない場合は、次にリストされるように、デフォルトパラメータに `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` エラーが表示される
<a name="t-cloudtrail"></a>

```
"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` エラーが表示される
<a name="t-cloudtrail-bucket"></a>

```
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 のクイックスタートチュートリアル](quick-start.md) を参照してください。

### Apache Airflow ログの `Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory` を取得する
<a name="t-plugins-logs"></a>
+ 次のステップを推奨します。

  1. Apache Airflow v2 を使用している場合、`core.lazy_load_plugins : False` を Apache Airflow の構成オプションとして追加してください。詳細については、[2 の設定オプションによるプラグインの読み込み](configuring-env-variables.md#configuring-2.0-airflow-override) を参照してください。

### ディスパッチャのログに psycopg2 「サーバが接続を誤って閉じました」とあります。
<a name="scheduler-postgres-library"></a>

次のようなエラーが表示される場合は、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` を取得する
<a name="long-running-tasks"></a>

次のようなエラーが表示される場合は、長時間タスクの実行が 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.` を取得する
<a name="t-task-fail-permission"></a>

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

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

次のステップを推奨します。
+ [Amazon MWAA 実行ロール](mwaa-create-role.md) にあるサンプルポリシーのいずれかを使用して、環境の実行ロールを変更します。

`requirements.txt` ファイルで Apache Airflow バージョンと互換性のないプロバイダパッケージを指定している場合もあります。例えば、Apache Airflow v2.0.2 を使用している場合、[apache-airflow-providers-databricks](https://airflow.apache.org/docs/apache-airflow-providers-databricks/stable/index.html) パッケージのように、Airflow 2.1\$1 とのみ互換性のあるパッケージを指定している可能性があります。

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

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

1. GitHub の [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) を使用して、DAG、カスタムプラグイン、Python の依存関係をローカルでテストします。