Сохранить и восстановить Connections и Variables в Apache Airflow™
Перед удалением кластера или переносом DAG сохраните Connections и Variables из его базы метаданных. Для полной выгрузки значений в Apache Airflow™ 3.1.8 используйте CLI. В UI нет экспорта Connections, а экспорт Variables может содержать замаскированные значения.
Выгрузка включает настройки из базы метаданных. История запусков, DAG-файлы, логи, конфигурация кластера и значения из окружения или внешнего хранилища секретов в нее не входят. Сохраните их отдельно, если они нужны для переноса.
Перед началом
Подготовьте kubectl с доступом к установке и локальный Python 3 для проверки JSON. Нужны права на чтение AirflowCluster, получение списка подов и выполнение команд в подах (pods/exec). Учетных данных веб-интерфейса Apache Airflow™ для этой операции недостаточно; при отсутствии доступа обратитесь к администратору установки.
-
Убедитесь, что исходный кластер находится в состоянии
Ready. При необходимости возобновите его. -
На время выгрузки прекратите изменение Connections и Variables: две команды экспорта не создают общий атомарный снимок.
-
Получите UID кластера:
kubectl get airflowcluster <имя_кластера> \ -n <пространство_имен> \ -o jsonpath='{.metadata.uid}' -
Найдите работающий под API server:
kubectl get pods -n <пространство_имен> \ -l 'tier=airflow,component=api-server,airflow.stackland.yandex.cloud/owner-uid=<UID_кластера>'Используйте имя пода со всеми готовыми контейнерами в следующих командах.
Экспортировать настройки
Важно
Файлы экспорта содержат расшифрованные пароли и секретные значения. Сохраняйте их в каталоге с ограниченным доступом, не добавляйте в репозиторий и не передавайте через логи или сообщения.
-
Создайте новый локальный каталог для копии и перейдите в него. Выполните команды в одном терминале:
umask 077 mkdir airflow-settings-backup cd airflow-settings-backup -
Экспортируйте Connections:
kubectl exec <имя_пода> -n <пространство_имен> \ -c api-server -- \ airflow connections export - --file-format json > connections.json -
Экспортируйте Variables:
kubectl exec <имя_пода> -n <пространство_имен> \ -c api-server -- \ airflow variables export - > variables.jsonОбе команды должны завершиться успешно. Сообщение о количестве экспортированных записей выводится отдельно от JSON.
-
Проверьте, что файлы содержат корректный JSON, не выводя значения на экран:
python3 -m json.tool connections.json > /dev/null python3 -m json.tool variables.json > /dev/null -
Сопоставьте количество выгруженных записей с ожидаемым. Пустой JSON-объект
{}допустим только в том случае, если в базе действительно нет соответствующих настроек. Для проверки переноса восстановите копию в подготовленном кластере и проверьте использующие ее DAG до удаления исходного кластера.
Восстановить настройки
-
Создайте целевой кластер, установите нужные providers и зависимости и дождитесь
Ready. Найдите его под API server так же, как для исходного кластера. В следующих командах используйте пространство имен и под именно целевого кластера. -
Из локального каталога с копией передайте JSON-файлы в под:
kubectl exec -i <под_целевого_кластера> -n <пространство_имен> \ -c api-server -- sh -c 'umask 077; cat > /tmp/airflow-connections.json' < connections.json kubectl exec -i <под_целевого_кластера> -n <пространство_имен> \ -c api-server -- sh -c 'umask 077; cat > /tmp/airflow-variables.json' < variables.json -
Импортируйте настройки:
kubectl exec <под_целевого_кластера> -n <пространство_имен> \ -c api-server -- airflow connections import /tmp/airflow-connections.json kubectl exec <под_целевого_кластера> -n <пространство_имен> \ -c api-server -- airflow variables import \ --action-on-existing-key skip /tmp/airflow-variables.jsonЭти команды сохраняют существующие записи при совпадении идентификаторов. Прочитайте результат импорта: отдельные записи могут быть пропущены или завершиться ошибкой. Если требуется намеренно заменить существующие настройки, предварительно сохраните их, затем используйте
--overwriteдля Connections и--action-on-existing-key overwriteдля Variables. -
В веб-интерфейсе целевого кластера откройте Admin → Connections и Admin → Variables. Проверьте наличие нужных идентификаторов. Загрузите DAG и выполните проверочный запуск, чтобы подтвердить доступ к внешним системам и чтение переменных.
-
После импорта удалите временные файлы из пода:
kubectl exec <под_целевого_кластера> -n <пространство_имен> \ -c api-server -- rm /tmp/airflow-connections.json /tmp/airflow-variables.json
Храните локальную копию в соответствии с правилами вашей организации. Подробнее о командах — в справочнике CLI Apache Airflow™