Yandex Marketplace
August 27, 2022

Apache Airflow

Apache Airflow - известный планировщик для ETL процессов. ETL - это один из основных процессов в управлении хранилищами данных, который включает в себя: извлечение данных из внешних источников; их трансформация и очистка, чтобы они соответствовали потребностям бизнес-модели; и загрузка их в хранилище данных.

В этой статье мы не будем касаться вопросов работы с этим инструментом. Для этого будет отдельная статья. Но разберём установку его в облаке.

Подготовка!

SA у нас уже готов: https://teletype.in/@cameda/w93lPMPQWS4
Выберем зону доступности А: https://teletype.in/@cameda/S34zdiTcbUM
Сеть и подсети создали ранее: https://teletype.in/@cameda/ZbTkF70KWK9
Адрес для ВМ зарезервировали: https://teletype.in/@cameda/o1poekVpPaO
SG будем использовать со всеми открытыми портами: https://teletype.in/@cameda/qpWd5IvF8EZ

Создадим скрипт для cloud-init:

#cloud-config
  version: v1
  package_update: true
  package_upgrade: true
  write_files:
   - encoding: b64
     content: VGVzc3R0dC4uLg==
     owner: root:root
     path: /opt/test
     permissions: '0644'
  packages:
  - git
  - htop
  - mc
  - tree
  - make
  - iftop
  - iotop
  - dstat
  datasource:
   Ec2:
    strict_id: false
  users:
  - default
  - name: cameda
    gecos: Alexey Volkov
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    lock_passwd: false
    passwd: $6$rounds=4096$WhW2cxlj/QX90$Jic1yPwlpiWV98oX8akplpOX4e7pgJlWHCfKAyPiMf7xP1AqI7iocN/gjWQNX9WuIUf14LVgxJluajfOInk.u.
    ssh_authorized_keys:
      - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDI98mJDBN9cnp6HOdBYTQILeAhUSDvDfoqA9iLmVPDyPLFRWs7tE4BjCAcFD6a3M50QIboCaohfa7h+PWksYibab7I3QHOR7y9pCW8FGonGRw2ACvt906qlaWHFj7jWOxuihFoiRROKqLCW5YE/Yc4XFIvW1gu3JQdvQ1wemWvujsI8EHE6PI1pEg7/41y6kn3IhNHIr8WRLe4dPyPGjwc4LpBCcaRSJiX4YjVXynSIHNk365UrL+nGv8ix7bW5FNCgGqSgfUTVCfMYLzQ/gYHPVQrcIvCeHjkwluH8Z3gXeN3OliejBjpLi+IWIzd9K6UADSUNU8oL+9941tDidp8APoe7RbB4h3bY6k8Bhy0yxohgQS2OWSYd1mjeEx8Ba5wzJKqfpUgmcPdrBJnBwLgLMFQyEfYG6vTPkYWAKEvkkJ6ZiA4tdoQvCb+B0xJV/ivHyLtoi3LFE59mbQFDUy8O51vX9JjBDLwzyTEeslWp7uOP66Ti5Q5ucNXbs5yXTU= cameda@cameda-osx"

login: cameda
password: Pa$w0rd

Создадим ВМ с Airflow:

export FOLDER=$(yc config get folder-id)
export ZONE=ru-central1-a
export SUBNET=$(yc vpc subnet get subnet-a --format json | jq -r '.id')
export SA=$(yc iam service-account get cameda-service --format json | jq -r '.id')
export SG=$(yc vpc sg get cam-all --format json | jq -r '.id')
export IP=$(yc vpc address get airflow --format=json | jq -r ".external_ipv4_address" | jq -r ".address")
yc compute instance create \
--folder-id $FOLDER \
--name cam-airflow \
--description "Airflow machine" \
--hostname cam-airflow \
--zone $ZONE \
--platform standard-v3 \
--create-boot-disk image-family=airflow-2x,size=60,type=network-ssd,block-size=8K \
--image-folder-id standard-images \
--memory 8 \
--cores 4 \
--core-fraction 100 \
--preemptible \
--network-settings type=standard \
--network-interface subnet-id=$SUBNET,nat-ip-version=ipv4,nat-address=$IP,security-group-ids=$SG \
--metadata serial-port-enable=1 \
--metadata-from-file='user-data=cloud-init.yaml' \
--service-account-id $SA \
--async

После создания ВМ к ней надо подключиться по ssh для того чтобы создать пользователя для работы с Airflow.

ssh -i ~/.ssh/id_rsa cameda@51.250.87.248

Создадим пользователя и выдадим ему необходимые права:

airflow users create -r Admin -u Cameda -e cameda4@yandex.ru -f admin -l user -p test

Здесь Admin - это пользовательская роль.

Если пользователя надо будет удалить, то выполним команду:

airflow users delete --username Cameda

Проверим работу:
Заходим в браузер на адрес: http://51.250.87.248
login: Cameda
password: test

Готово!

Полезные ссылки.

Airflow in Marketplace:
https://cloud.yandex.ru/marketplace/products/yc/apache-airflow-2

Документация: https://airflow.apache.org/docs/apache-airflow/stable/index.html
Apache Airflow: делаем ETL проще: https://habr.com/ru/post/512386/