AirflowからAirbyteをトリッガーする際にハマるポイント
AirflowからAirbyte Operatorを利用するための設定について、Airbyte公式の記事は既にわかりやすくまとめています。実際に試してみて、少しハマったところがあったので、その知見を共有したいと思います。
2.3.0
以上にアップグレードする必要がある
1. Airflowをapache-airflow-providers-airbyte[http]
を利用するのにAirflowを2.3.0以上に上げないといけません。(apache-airflow-providers-airbyte[http]
をdocker-composer.yml
の_PIP_ADDITIONAL_REQUIREMENTS
に追加することも忘れずに)
Cloud Composerなどを利用している場合、GUIからアップグレード可能です。
version: '3'
x-airflow-common:
&airflow-common
image: apache/airflow:2.3.4-python3.8
environment:
&airflow-common-env
PYTHONPATH: /opt/airflow/dags
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:password@postgres/airflow
AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:password@postgres/airflow
AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0
AIRFLOW__API__AUTH_BACKEND: 'airflow.api.auth.backend.basic_auth'
# 追加
_PIP_ADDITIONAL_REQUIREMENTS: apache-airflow-providers-airbyte[http]==3.2.0
2.3.4
上げるとdocker-composeがバグる
2. Airflowの古いバージョンからairflow 2.2.xでは問題なく環境構築できていましたが、イメージをapache/airflow:2.3.4-python3.8
に変更してdocker compose up airflow-init
を実行したら怒られます。
You are running pip as root. Please use 'airflow' user to run pip!
Airflowの古いdocker-composer.yml
のバグのようなので、
services -> airflow-init -> environment
に_PIP_ADDITIONAL_REQUIREMENTS: ''
を追加すれば解決できます。
...
environment:
<<: *airflow-common-env
_AIRFLOW_DB_UPGRADE: 'true'
_AIRFLOW_WWW_USER_CREATE: 'true'
_AIRFLOW_WWW_USER_USERNAME: ${_AIRFLOW_WWW_USER_USERNAME:-airflow}
_AIRFLOW_WWW_USER_PASSWORD: ${_AIRFLOW_WWW_USER_PASSWORD:-password}
# 追加
_PIP_ADDITIONAL_REQUIREMENTS: ''
...
Could not resolve host: host.docker.internal
エラー
3. connectionsを設定する際に公式記事を参考にして環境構築し、airbyteのconnections設定してTest
ボタンをポチるとCould not resolve host: host.docker.internal
というエラーが出ました。
調べてみたら、Docker Engine(Linux)でコンテナからホスト側のサービスにアクセスする(host.docker.internal)際にhost.docker.internal:host-gateway
をextra_hosts
に追加する必要があります。
version: '3'
x-airflow-common:
&airflow-common
image: apache/airflow:2.3.4-python3.8
# 追加
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
&airflow-common-env
PYTHONPATH: /opt/airflow/dags
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:password@postgres/airflow
AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:password@postgres/airflow
AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0
AIRFLOW__API__AUTH_BACKEND: 'airflow.api.auth.backend.basic_auth'
_PIP_ADDITIONAL_REQUIREMENTS: apache-airflow-providers-airbyte[http]==3.2.0
また、AWSやGCPのconnections設定と同じく毎回手動で設定するのがめんどくさいので、コンテナを立ち上げた後docker exec -it colossus-workflow-webserver airflow connections import /opt/airflow/config/connections.json
を使ってconnectionsをimportすれば便利です。
{
"airbyte_conn": {
"conn_type": "airbyte",
"host": "host.docker.internal",
"login": "airbyte",
"password": "password",
"port": 8000
}
}
以上3点をクリアして問題なくAirflowからAirbyteをトリッガーできました。
ご参考になれば幸いです。
AirflowやAirbyteなどの知見があればまた共有したいと思います。
Discussion