

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

# トラブルシューティング: DAG、オペレータ、接続、およびその他の問題
<a name="t-apache-airflow-202"></a>

このページのトピックでは、Apache Airflow v2 および v3 Pythonの依存関係、カスタムプラグイン、DAGs、オペレータ、接続、タスク、およびウェブサーバが Amazon Managed Workflows for Apache Airflow 環境で発生する可能性のある問題の解決方法について説明します。

**Contents**
+ [Connections](#troubleshooting-conn-202)
  + [Secrets Manager に接続できません。](#access-secrets-manager)
  + [`secretsmanager:ResourceTag/<tag-key>` シークレットマネージャの条件またはリソース制限は、実行ロールポリシーでどのように設定しますか。](#access-secrets-manager-condition-keys)
  + [Snowflake に接続できません。](#missing-snowflake)
  + [Airflow UI で接続が見つかりません](#connection-type-missing)
+ [ウェブサーバー](#troubleshooting-webserver-202)
  + [ウェブサーバーにアクセスすると、5xx エラーが発生します](#5xx-webserver-202)
  + [`The scheduler does not seem to be running` エラーが発生します](#error-scheduler-202)
+ [タスク](#troubleshooting-tasks-202)
  + [タスクが止まっている、または完了していません](#stranded-tasks-202)
  + [Airflow v3 なしでタスク失敗が発生します](#failed-task-no-log)
+ [CLI](#troubleshooting-cli-202)
  + [CLI で DAG をトリガーすると「503」エラーが発生します](#cli-toomany-202)
  + [`dags backfill` Apache エアフロー CLI コマンドが失敗した原因は？ 回避策はありますか?](#troubleshooting-cli-backfill)
+ [オペレータ](#troubleshooting-operators-202)
  + [S3-Transform オペレータの使用中に `PermissionError: [Errno 13] Permission denied` エラーが発生しました](#op-s3-transform)

## Connections
<a name="troubleshooting-conn-202"></a>

次のトピックでは、Apache Airflow 接続または別の AWS データベースを使用する場合に発生する可能性のあるエラーについて説明します。

### Secrets Manager に接続できません。
<a name="access-secrets-manager"></a>

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

1. Apache Airflow 接続と変数のシークレットキーを作成する方法を [AWS Secrets Manager シークレットを使用した Apache Airflow 接続の設定](connections-secrets-manager.md) で学習できます。

1. `test-variable` で ApacheAirflow 変数 ([Apache Airflow 変数の AWS Secrets Manager におけるシークレットキーの使用](samples-secrets-manager-var.md)) のシークレットキーを使用する方法を学習します。

1. [AWS Secrets Manager の Apache Airflow 接続でのシークレットキーの使用](samples-secrets-manager.md) で ApacheAirflow 接続 (`myconn`) のシークレットキーを使用する方法を学習します。

### `secretsmanager:ResourceTag/<tag-key>` シークレットマネージャの条件またはリソース制限は、実行ロールポリシーでどのように設定しますか。
<a name="access-secrets-manager-condition-keys"></a>

**注記**  
Apache Airflow バージョン 2.0 やそれ以前のバージョンに適用されます。

現時点では、Apache Airflow の既知の問題のため、環境の実行ロールで条件キーやその他のリソース制限を使用して Secrets Manager secrets へのアクセスを制限することはできません。

### Snowflake に接続できません。
<a name="missing-snowflake"></a>

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

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

1. ご使用の環境に適した requirements.txt に次のエントリを追加します。

   ```
   apache-airflow-providers-snowflake==1.3.0
   ```

1. 以下のインポートを DAG に追加する：

   ```
   from airflow.providers.snowflake.operators.snowflake import SnowflakeOperator
   ```

Apache Airflow 接続オブジェクトに、次のキーバリューのペアが含まれていることを確認します。

1. **接続 ID:** snowflake\$1conn

1. **コーンタイプ:** スノーフレーク

1. **ホスト：** <my account> <my region if not us-west-2>.snowflakecomputing.com

1. **スキーマ:** <my schema>

1. **ログイン：** <my user name>

1. **パスワード：** \$1\$1\$1\$1\$1\$1\$1\$1

1. **ポート:** <port, if any>

1. **エキストラ： **

   ```
   {
   						"account": "<my account>",
   						"warehouse": "<my warehouse>",
   						"database": "<my database>",
   						"region": "<my region if not using us-west-2 otherwise omit this line>"
   						}
   ```

例えば、次のようになります。

```
>>> import json
				>>> from airflow.models.connection import Connection
				>>> myconn = Connection(
				...    conn_id='snowflake_conn',
				...    conn_type='Snowflake',
				...    host='123456789012.us-east-1.snowflakecomputing.com',
				...    schema='YOUR_SCHEMA'
				...    login='YOUR_USERNAME',
				...    password='YOUR_PASSWORD',
				...    port='YOUR_PORT'
				...    extra=json.dumps(dict(account='123456789012', warehouse='YOUR_WAREHOUSE', database='YOUR_DB_OPTION', region='us-east-1')),
				... )
```

### Airflow UI で接続が見つかりません
<a name="connection-type-missing"></a>

Apache Airflow は Apache Airflow UI に接続テンプレートを用意しています。接続タイプに関係なく、接続 URI 文字列を生成します。Apache Airflow UI に接続テンプレートがない場合は、HTTP 接続テンプレートを使用するなど、代替の接続テンプレートを使用して接続 URI 文字列を生成できます。

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

1. Amazon MWAA が Apache Airflow UI で提供している接続タイプについては、[Amazon MWAA 環境にインストールされている Apache エアフロープロバイダーパッケージ](connections-packages.md) を参照してください。

1. Apache Airflow 接続を作成するためのコマンドは、[Apache Airflow CLI コマンドリファレンス](airflow-cli-command-reference.md) の CLI からアクセスできます。

1. [接続タイプの概要](manage-connection-types.md) のAmazon MWAA 上の Apache Airflow UI では使用できない接続タイプのために、Apache Airflow UI で接続テンプレートを交換して使用する方法を学習します。

## ウェブサーバー
<a name="troubleshooting-webserver-202"></a>

次のトピックでは、Amazon MWAA 上の Apache Airflow ウェブサーバーで発生する可能性のあるエラーについて説明します。

### ウェブサーバーにアクセスすると、5xx エラーが発生します
<a name="5xx-webserver-202"></a>

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

1. Apache Airflow 設定オプションを確認してください。などの Apache Airflow 設定オプションとして指定したキーと値のペアが正しく設定 AWS Secrets Managerされていることを確認します。詳細については、[Secrets Manager に接続できません。](#access-secrets-manager) を参照してください。

1. `requirements.txt` をチェックしてください。Apache Airflow バージョンと互換性のある、`requirements.txt` にリストされている Airflow の「extras」パッケージおよびその他のライブラリを確認してください。

1. `requirements.txt` ファイルに Python の依存関係を指定する方法については、[requirements.txt での Python 依存関係の管理](best-practices-dependencies.md) を参照してください。

### `The scheduler does not seem to be running` エラーが発生します
<a name="error-scheduler-202"></a>

スケジューラが実行されていないように見える場合や、最後の「ハートビート」が数時間前に受信された場合は、DAG が Apache Airflow にリストされず、新しいタスクがスケジューリングされない可能性があります。

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

1. VPC セキュリティグループがポート `5432` へのインバウンドアクセスを許可していることを確認します。これは、ご使用の環境の Amazon Aurora PostgreSQL メタデータデータベースに接続するために必要のポートです。このルールを追加したら、 Amazon MWAA を数分間待つとエラーが消えることがあります。詳細については、[Amazon MWAA の VPC のセキュリティ](vpc-security.md) を参照してください。
**注記**  
Aurora PostgreSQL メタデータベースは [Amazon MWAA サービスアーキテクチャ](what-is-mwaa.md#architecture-mwaa)の一部であり、 では使用できません AWS アカウント。
データベース関連のエラーは通常、スケジューラー障害の症状であり、根本的な原因ではありません。

1. スケジューラーが動作していない場合は、[依存関係のインストールの失敗](best-practices-dependencies.md) や [スケジューラーの過負荷](best-practices-tuning.md) など、さまざまな要因が原因である可能性があります。CloudWatch Logs で対応するロググループにアクセスして、DAGs、プラグイン、および要件が正しく機能していることを確認します。詳細については、[Amazon Managed Workflows for Apache Airflow のモニタリングとメトリクス](cw-metrics.md) を参照してください。

## タスク
<a name="troubleshooting-tasks-202"></a>

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

### タスクが止まっている、または完了していません
<a name="stranded-tasks-202"></a>

Apache Airflow タスクが「行き詰まっている」か、完了していない場合は、次のステップを推奨します。

1. 多数の DAG が定義されている可能性があります。DAG の数を減らし、環境の更新 (ログレベルの変更など) を実行して強制的にリセットしてください。

   1. Airflow は DAG が有効かどうかに関係なく解析します。環境の 50% を超える容量を使用していると、Apache Airflow スケジューラに負荷がかかり始める可能性があります。これにより、CloudWatch メトリクスの *合計解析時間* が長くなったり、CloudWatCloudWatch Logs の DAG 処理時間が長くることがあります。Apache Airflow の設定を最適化する方法は他にもありますが、このガイドの対象範囲には含まれていません。

   1. ご使用の環境のパフォーマンスを調整するために推奨するベスト・プラクティスの詳細については、[Amazon MWAA での Apache Airflow のパフォーマンス調整](best-practices-tuning.md) を参照してください。

1. キューには、多数のタスクがある可能性があります。これは、多くの場合、`None` 状態内のタスク数が大量かつ増加していること、または CloudWatch の `Queued Tasks` および/または `Tasks Pending` タスクが多数発生している場合に発生します。これは以下のような原因で発生する可能性があります。

   1. 実行するタスクの数が環境の実行能力を超えている場合や、自動スケーリング前にキューに入れられたタスクの数が多い場合は、タスクを検出して追加のワーカー.をデプロイする時間があります。

   1. 実行するタスクの数が、実行可能な環境よりも多い場合は、DAG が同時に実行するタスクの数を減らすか、Apache Airflow ワーカーの **最小数** を増やすことをお勧めします。

   1. 自動スケーリングで追加のワーカーを検出してデプロイする時間ができる前に、大量のタスクがキューに入れられている場合は、タスクの **配備をずらすか**、最小 Apache Airflow ワーカスレッドを増やすことをお勧めします。

   1.  AWS Command Line Interface (AWS CLI) の [update-environment](https://docs.aws.amazon.com/cli/latest/reference/mwaa/update-environment.html) コマンドを使用して、環境で実行されるワーカーの最小数または最大数を変更できます。

      ```
      aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 10
      ```

   1. ご使用の環境のパフォーマンスを調整するために推奨するベスト・プラクティスの詳細については、[Amazon MWAA での Apache Airflow のパフォーマンス調整](best-practices-tuning.md) を参照してください。

1. タスクが「実行中」状態のままになっている場合は、タスクをクリアしたり、成功または失敗のマークを付けることもできます。これにより、環境の自動スケーリングコンポーネントは、環境で実行されているワーカー数をスケールダウンできます。次の画像は、取り残されたタスクの例を示しています。  
![\[これは課題が立ち消えになっているイメージです。\]](http://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/images/mwaa-airflow-scaling.png)

   1. 取り残されたタスクの円を選択し、**クリア** を選択します（図を参照）。これにより Amazon MWAA はワーカーをスケールダウンできます。そうしない場合、Amazon MWAA はどの DAG が有効か無効かを判断できず、キューにタスクが残っている場合はスケールダウンできません。  
![\[Apache Airflow アクション\]](http://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/images/mwaa-airflow-scaling-menu.png)

1. Apache Airflow タスクライフサイクルの詳細については、*Apache Airflow リファレンスガイド*の [概念](https://airflow.apache.org/docs/apache-airflow/stable/concepts.html#task-lifecycle) を参照してください。

### Airflow v3 なしでタスク失敗が発生します
<a name="failed-task-no-log"></a>

Apache Airflow 3 タスクがログなしで失敗する場合は、次の手順に従ってください。
+ ワーカーログにタスクが失敗した `Task handler raised error: WorkerLostError('Worker exited prematurely: exitcode 15 Job: 12.')` 時刻などののエラーが表示される場合は、タスクに割り当てられた分岐ワーカープロセスが予期せず終了した可能性が高いことを示します。

  これに対処するには、同じ最小値と最大値で celery.worker\$1autoscale を設定することを検討してください。例えば、次のようになります。

  ```
  celery.worker_autoscale=5,5  # for mw1.small
  celery.worker_autoscale=10,10 # for mw1.medium
  celery.worker_autoscale=20,20 # for mw1.large
  ```

  これにより、ワーカープールのサイズが固定され、予期しないワーカーの終了が防止されます。

## CLI
<a name="troubleshooting-cli-202"></a>

次のトピックでは、 AWS Command Line Interfaceで Airflow CLI コマンドを実行したときに発生する可能性があるエラーについて説明します。

### CLI で DAG をトリガーすると「503」エラーが発生します
<a name="cli-toomany-202"></a>

Airflow CLI は Apache Airflow ウェブサーバー上でで実行され、同時実行性が制限されています。通常、 CLI コマンドを最大 4 つ同時に実行できます。

### `dags backfill` Apache エアフロー CLI コマンドが失敗した原因は？ 回避策はありますか?
<a name="troubleshooting-cli-backfill"></a>

**注記**  
以下は Apache Airflow v2.0.2 の環境にのみ適用されます。

他の Apache Airflow CLI コマンドと同様に、`backfill` コマンドはすべての DAGs を処理する前に、CLI 操作がどの DAGs に適用されているかに関係なく、すべての DAGs をローカルに解決します。Apache Airflow v2.0.2 を使用する Amazon MWAA 環境では、CLI コマンドの実行時にプラグインと要件がウェブサーバにインストールされていないため、解決操作が失敗し、`backfill` 操作が呼び出されません。環境に要件やプラグインがない場合、`backfill` 操作は成功します。

`backfill` CLI コマンドを実行できるようにするには、bash 演算子で呼び出すことをお勧めします。bash オペレータでは、`backfill` はワーカーから起動されます。これにより、必要な要件とプラグインがすべて使用可能になり、インストール後、 DAG が正常に解析できるようになります。次の例は、`backfill` を実行するための `BashOperator` 付き DAG を作成する方法を示しています。

```
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.utils.dates import days_ago

with DAG(dag_id="backfill_dag", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
    cli_command = BashOperator(
        task_id="bash_command",
        bash_command="airflow dags backfill my_dag_id"
    )
```

## オペレータ
<a name="troubleshooting-operators-202"></a>

次のトピックでは、オペレータを使用するときに受け取る可能性のあるエラーについて説明します。

### S3-Transform オペレータの使用中に `PermissionError: [Errno 13] Permission denied` エラーが発生しました
<a name="op-s3-transform"></a>

*S3Transform* オペレータを使用してシェルスクリプトを実行しようとして `PermissionError: [Errno 13] Permission denied` エラーが発生する場合は、次の手順を実行することをお勧めします。次のステップは、既存の plugins.zip ファイルがあることを前提としています。*新しい* plugins.zip を作成する場合は、[カスタムプラグインのインストール](configuring-dag-import-plugins.md) を参照してください。

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

1. 「変換」スクリプトを作成します。

   ```
   #!/bin/bash
   cp $1 $2
   ```

1. (オプション) macOS と Linux ユーザーは、次のコマンドを実行して、スクリプトが実行可能であることを確認しなければならないことがあります。

   ```
   chmod 777 transform_test.sh
   ```

1. スクリプトを plugins.zip に追加します。

   ```
   zip plugins.zip transform_test.sh
   ```

1. [plugins.zip を Amazon S3 にアップロードする](configuring-dag-import-plugins.md#configuring-dag-plugins-upload) のステップに従ってください。

1. [Amazon MWAA コンソールのplugins.zip バージョンの指定](configuring-dag-import-plugins.md#configuring-dag-plugins-s3-mwaaconsole) のステップに従ってください。

1. 以下の DAG を作成します。

   ```
   from airflow import DAG
   						from airflow.providers.amazon.aws.operators.s3_file_transform import S3FileTransformOperator
   						from airflow.utils.dates import days_ago
   						import os
   						
   						DAG_ID = os.path.basename(__file__).replace(".py", "")
   						
   						with DAG (dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
   						file_transform = S3FileTransformOperator(
   						task_id='file_transform',
   						transform_script='/usr/local/airflow/plugins/transform_test.sh',
   						source_s3_key='s3://amzn-s3-demo-bucket/files/input.txt',
   						dest_s3_key='s3://amzn-s3-demo-bucket/files/output.txt'
   						)
   ```

1. [Amazon S3 への DAG コードのアップロード](configuring-dag-folder.md#configuring-dag-folder-uploading) のステップに従ってください。