■ はじめに
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
原因
より抜粋 ~~~~ 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