Перейти к содержанию

Режим выполнения Docker (Docker Execution Mode)

Ниже — туториал по запуску Docker-операторов Cosmos dbt и необходимой настройке.

Требования

  • Docker с демоном Docker (Docker Desktop на macOS). Инструкция: Docker installation guide.
  • Airflow
  • Пакет astronomer-cosmos с Docker-операторами dbt
  • Контейнер Postgres
  • Docker-образ с нужным dbt-проектом и DAG dbt
  • DAG dbt с Docker-операторами dbt в каталоге DAGs Airflow для запуска в Airflow

Детали по пунктам 2–6 — ниже.

Пошаговая инструкция

1. Установка Airflow и Cosmos

Создайте виртуальное окружение Python, активируйте его, обновите pip и установите Apache Airflow® и astronomer-cosmos с адаптером Postgres:

python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install apache-airflow
pip install "astronomer-cosmos[dbt-postgres]"

2. Настройка базы Postgres

Нужна запущенная база Postgres для dbt-проекта. Запуск и проброс порта:

docker run --name some-postgres -e POSTGRES_PASSWORD="<postgres_password>" -e POSTGRES_USER=postgres -e POSTGRES_DB=postgres -p5432:5432 -d postgres

3. Сборка Docker-образа dbt

Чтобы Docker-операторы работали, нужен образ, который передаётся в параметр image операторов dbt в DAG.

Клонируйте репозиторий cosmos-example:

git clone https://github.com/astronomer/cosmos-example.git
cd cosmos-example

Соберите образ с файлами dbt-проекта и профилем dbt, используя Dockerfile:

docker build -t dbt-jaffle-shop:1.0.0 -f Dockerfile.postgres_profile_docker_k8s .

На M1 при сбое сборки может понадобиться задать переменные окружения:

Примечание

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0
export DOCKER_DEFAULT_PLATFORM=linux/amd64

Просмотрите Dockerfile, чтобы понять, что он делает, и использовать его как образец в своём проекте.

  • В образ добавляется файл профиля dbt.
  • В образ добавляется каталог dags с dbt-проектом jaffle_shop.
  • Файл dbt_project.yml заменяется на postgres_profile_dbt_project.yml, где в ключе profile указан postgres_profile, так как для K8s/Docker-операторов создание профиля из подключений Airflow (как в режиме local) пока не поддерживается.

4. Настройка и запуск DAG в Airflow

Скопируйте каталог dags из репозитория cosmos-example в домашний каталог Airflow:

cp -r dags $AIRFLOW_HOME/

Запустите Airflow:

airflow standalone

Если пользователь Airflow не имеет доступа к сокету Docker или к образам в кластере Kind, может потребоваться запуск airflow standalone с sudo.

Примечание

Войдите в Airflow в браузере по адресу http://localhost:8080/ (логин airflow, пароль — из файла standalone_admin_password.txt).

Включите и запустите DAG jaffle_shop_docker. После успешного выполнения DAG вы увидите завершённый прогон.

Задание ProfileConfig

Начиная с Cosmos 1.8.0, в Docker-операторах Dbt DAG можно использовать аргумент profile_config и указывать профили dbt из файла profiles.yml. Путь к файлу задаётся параметром profiles_yml_path в profile_config.

В режиме ExecutionMode.DOCKER с profile_config работает только вариант с profiles_yml_path. Метод profile_mapping не подходит: подключения Airflow недоступны внутри контейнера, поэтому их нельзя сопоставить с профилем dbt.