■ はじめに
https://dk521123.hatenablog.com/entry/2024/06/13/222403
で、Apache Airflow(MWAA)の単体試験を扱った。 今回は、それをLocalで動かせる環境を構築する
目次
【0】前提条件 【1】構築手順 0)ディレクトリ構成 1)docker-compose を作成する 2)requirements.txt を作成する 【2】コマンド実行例 1)環境構築する 2)コンテナ上に入る 3)テストを実行する
【0】前提条件
* docker compose が動かせる環境であること => docker-compose については、以下の関連記事を参照のこと。
Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000
【1】構築手順
0)ディレクトリ構成
├── docker-compose-test.yml ... 「1)docker-compose を作成する」 ├── dags │ └── hello_world.py ... 「Apache Airflow ~ 単体試験 / 入門編 ~」 ├── requirements │ └── requirements.txt ... 「2)requirements.txt を作成する」 └── tests ├── __init__.py └── test_hello_world.py ... 「Apache Airflow ~ 単体試験 / 入門編 ~」
Apache Airflow ~ 単体試験 / 入門編 ~
https://dk521123.hatenablog.com/entry/2024/06/13/222403
1)docker-compose を作成する
* 以下の関連記事を元に作成
https://dk521123.hatenablog.com/entry/2021/11/07/132014
docker-compose-test.yml
version: "3" services: postgres: image: postgres:13-alpine environment: - POSTGRES_USER=airflow - POSTGRES_PASSWORD=airflow - POSTGRES_DB=airflow ports: - "5432:5432" logging: options: max-size: 10m max-file: "3" local-runner: image: amazon/mwaa-local:2_8 restart: always depends_on: - postgres environment: - LOAD_EX=n - EXECUTOR=Local - DEFAULT_PASSWORD=test - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres:5432/airflow logging: options: max-size: 10m max-file: "3" volumes: - "${PWD}/dags:/usr/local/airflow/dags" - "${PWD}/plugins:/usr/local/airflow/plugins" - "${PWD}/requirements:/usr/local/airflow/requirements" - "${PWD}/startup_script:/usr/local/airflow/startup" - "${PWD}/tests:/usr/local/airflow/tests" ports: - "28080:8080" command: local-runner healthcheck: test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"] interval: 30s timeout: 30s retries: 3 # ★オプション(なくてもいい) localstack: image: localstack/localstack:latest container_name: "localstack" ports: - "4566:4566" environment: - SERVICES=s3 aws-cli: image: mesosphere/aws-cli container_name: "aws-cli" volumes: - ./resources:/tmp/resources environment: - AWS_ACCESS_KEY_ID=dummyaccess - AWS_SECRET_ACCESS_KEY=dummysecret - AWS_DEFAULT_REGION=us-west-2 entrypoint: /bin/sh -c command: > " aws --endpoint http://localstack:4566 s3 mb s3://reports aws --endpoint http://localstack:4566 s3 mb s3://reports-output aws --endpoint http://localstack:4566 s3 cp /tmp/resources/fake-report.json \ s3://reports/fake-report.json " depends_on: - localstack
2)requirements.txt を作成する
requirements.txt
pytest
【2】コマンド実行例
1)環境構築する
docker compose -f docker-compose-test.yml up -d
2)コンテナ上に入る
docker-compose exec local-runner bash
3)テストを実行する
$ pytest tests ============================= test session starts ============================== platform linux -- Python 3.10.9, pytest-8.2.2, pluggy-1.5.0 rootdir: /usr/local/airflow plugins: anyio-3.7.1 collected 1 item tests/test_hello_world.py . [100%] =============================== warnings summary =============================== ... -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ======================== 1 passed, 25 warnings in 2.35s ========================
参考文献
https://takemikami.com/2023/0515-docker-compose.html
https://qiita.com/yaboxi_/items/5000ab8d598d86cfe1f7
https://medium.com/its-tinkoff/testing-of-apache-airflows-dags-with-docker-compose-and-pytest-c75be554b184
関連記事
Apache Airflow ~ 単体試験 / 入門編 ~
https://dk521123.hatenablog.com/entry/2024/06/13/222403
Apache Airflow ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/09/28/135510
Apache Airflow ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/07/18/004531
Apache Airflow ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/07/24/233012
Apache Airflow ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/07/28/234319
Apache Airflow ~ リトライ ~
https://dk521123.hatenablog.com/entry/2021/10/10/000000
Apache Airflow ~ タイムアウト ~
https://dk521123.hatenablog.com/entry/2021/10/12/000000
MWAA Local ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/05/233309
MWAA Local ~ 環境構築編 / Docker compose ~
https://dk521123.hatenablog.com/entry/2021/11/07/132014
MWAA Local ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/10/21/233404
単体試験 / pytest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/13/224810
単体試験 / pytest ~ 基本編 / Fixture ~
https://dk521123.hatenablog.com/entry/2021/11/24/163751
単体試験 / pytest ~ 基本編 / pytest-mock ~
https://dk521123.hatenablog.com/entry/2021/11/25/131615
単体試験 / unittest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/02/223658
単体試験 / unittest ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/03/31/000000
Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000