Шаг 7 из 12

Fabric

Хорошо, с GitHub Actions надеюсь стало немного понятнее. Теперь необходимо понять что именно мы хотим сделать. Давайте рассмотрим пошагово что нужно сделать чтобы успешно задеплоить код для Apache Airflow:

  1. Необходимо склонировать репозиторий с кодом
  2. Установить версию Python, пусть в нашем случае это будет 3.8.12
  3. Установить зависимости для деплоя (об этом ниже)
  4. Запустить скрипт для авторизации на удалённом сервере (где установлен Airflow)
    1. На удалённом сервере мы будет обновлять код через git pull репозитория с дагами
    2. Установить зависимости в окружение Airflow
    3. Скопировать код с дагами в папку, указанную в конфиге Airflow dags_folder

Касательно 4-го пункта. В экосистеме существуют библиотеки для работы с удалённым сервером через протокол SSH, например, paramiko. Можно было бы напрямую использовать её, но я предлагаю обратить ваше внимание на не менее известную библиотеку для автоматизации процессов — fabric. У Fabric в качестве зависимости как раз есть пакет paramiko. Существует множество инструментов для автоматизации работы с удалёнными машинами. Наиболее популярными являются Ansible и SaltStack. Но чтобы о них рассказать потребуется отдельный курс или даже книга 🙂

Fabric очень простой и не требует специальных знаний декларативных или языков разметки. Весь код пишется на Python, его поймёт любой кто мало-мальски знаком с ним.

from fabric import Connection, task

ssh_key_path = os.path.join(os.path.expanduser('~'), '.ssh', 'id_rsa')

@task
def uname(context):
    with Connection(
        'server.com',
        connect_kwargs={'key_filename': ssh_key_path},
        user='user',
    ) as conn:
        conn.run('uname -a')

В коде выше есть всего 1 команда uname, которая выводит версию ядра на сервере server.com. Чтобы запустить необходимо выполнить:

$ fab uname

Но не стоит забывать, что предварительно необходимо установить пакет fabric:

pip install fabric

Комментарии