【Airflow】【トラブル】Apache Airflow に関するトラブル

■ はじめに

https://dk521123.hatenablog.com/entry/2021/07/18/004531

で発生したトラブルを纏めておく。

目次

【1】Dockerによる環境設定でdocker-compose up後にエラー表示
【2】エラー「ModuleNotFoundError: No module named 'airflow.providers'」が表示
【3】エラー「DAG import Error / SyntaxError: (unicode error) 'utf-8' codec can't decode」が表示

【1】Dockerによる環境設定でdocker-compose up後にエラー表示

https://dk521123.hatenablog.com/entry/2021/10/11/134840

で、Dockerによる環境設定において、
「docker-compose up airflow-init」コマンド後、
以下「エラー内容」が表示されてしまった。

エラー内容

$ docker-compose up airflow-init

ERROR: The Compose file './docker-compose.yaml' is invalid because:
Unsupported config option for services.airflow-cli: 'profiles'
Invalid top-level property "x-airflow-common". Valid top-level sections for this Compose file are: version, services, networks, volumes, and extensions starting with "x-".

You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/
services.airflow-scheduler.depends_on contains an invalid type, it should be an array
services.airflow-triggerer.depends_on contains an invalid type, it should be an array
services.airflow-webserver.depends_on contains an invalid type, it should be an array
services.airflow-worker.depends_on contains an invalid type, it should be an array
services.flower.depends_on contains an invalid type, it should be an array
services.airflow-cli.depends_on contains an invalid type, it should be an array
services.airflow-init.depends_on contains an invalid type, it should be an array

原因

https://hakanu.net/docker/2021/09/19/resolving-invalid-docker-compose-yaml-error-during-using-airflow-with-docker/

より抜粋
~~~~
If it’s less than 1.29 which is minimum requirement by airflow,
 you should update your docker-compose.yaml
~~~~

今回の場合は、v1.25.0 で、v1.29より古いバージョンを使っていたため
~~~~
$ docker-compose --version
docker-compose version 1.25.0, build unknown
~~~~

解決案

# Check out where is your docker-compose
whereis docker-compose  # Probably it's at /usr/bin/docker-compose

# Make a copy just in case.
sudo cp /usr/bin/docker-compose /usr/bin/docker-compose_old

# Get the new build (in my case it's 1.29.2) <= v2系もあったけど、念のため、v1系を使った
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose

# check version again
docker-compose -v

【2】エラー「ModuleNotFoundError: No module named 'airflow.providers'」が表示

「airflow db init」実行時に
エラー「ModuleNotFoundError: No module named 'airflow.providers'」が
表示される。

解決案

足りないモジュールを再インストール(※)する

※ アンインストール後にインストールする

コマンド例

sudo pip uninstall apache-airflow-providers-sqlite
sudo pip install apache-airflow-providers-sqlite

# エラー「ModuleNotFoundError: No module named 'airflow.providers.ftp'」
sudo pip uninstall apache-airflow-providers-ftp
sudo pip install apache-airflow-providers-ftp

# エラー「ModuleNotFoundError: No module named 'airflow.providers.imap'」
sudo pip uninstall apache-airflow-providers-imap
sudo pip install apache-airflow-providers-imap

【3】エラー「DAG import Error / SyntaxError: (unicode error) 'utf-8' codec can't decode」が表示

https://dk521123.hatenablog.com/entry/2021/10/06/141323

などにおいて、以下「Pythonコード一部」のように、
日本語のメッセージでテストした際に、
Web UI側でエラー「DAG import Error(1)」が表示された。

Pythonコード一部

def send_email_for_success(context):
  ''' Callback for success
  '''
  print("Fire send_email_for_success")
  try:
    email_success = SnsPublishOperator(
      task_id='publish_sns_success_task',
      target_arn='arn:aws:sns:us-west-2-xxxxxxx',
      subject='これはタイトルです', # ここでエラー
      message='こんにちは世界'
    )
    return email_success.execute(context=context)
  except Exception as ex:
    print("[Error] " + str(ex))
    raise ex

エラー内容

DAG import Errorを展開した際のメッセージ

Broken DAG [/user/local/airflow/dags/hello.py] Traceback (most recent call last):
   File "<frozen importlib._bootstrap_external>", line 791, in source_to_code
   File "<frozen importlib._bootstrap_external>", line 219, in _call_with_frames_removed
   File "/user/local/airflow/dags/hello.py", line 45
SyntaxError: (unicode error) 'utf-8' codec can't decode bytes 0x83 in position 8: invalid start byte

原因

* DAGファイル(Pythonコード)のファイル形式が、SJISで保存されていたため

解決案

* DAGファイル(Pythonコード)のファイル形式を「UTF-8」で保存しなおした。

関連記事

Apache Airflow ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/07/18/004531
Apache Airflow ~ 通知あれこれ編 ~
https://dk521123.hatenablog.com/entry/2021/10/06/141323