kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Airflow : Docker で検証環境を構築して画面と CLI と REST API で操作する

ワークフローを管理するソフトウェア「Apache Airflow」に入門する.今までは本当にザッと試した程度の経験しかなく,テックブログに記事を書いたことすらなかった.幅広くある機能を試しながら学習ログを記事にしていく.今回は Airflow の検証環境を構築して画面と CLI と REST API で操作するところまでまとめていく💪

なお Airflow の原則と特徴は公式サイトに載っている.

  • Principles(原則)
    • Scalable(スケーラブル)
    • Dynamic(ダイナミック)
    • Extensible(拡張可能)
    • Elegant(エレガント)
  • Features(特徴)
    • Pure Python(標準の Pyhon 実装)
    • Useful UI(便利な UI)
    • Robust Integrations(堅牢な統合)
    • Easy to Use(使いやすさ)
    • Open Source(オープンソース)

airflow.apache.org

Docker を使う 🐳

検証環境を構築する方法として,ドキュメントには「Python (pip)」「Docker」の2種類が載っている.今回は環境をそこまで汚さずに使えて,個人的にも慣れている Docker を使う.基本的にはドキュメントの通りに進めればよく,解説も入っている.今回使う macOS など,環境ごとの注意点も載っていて親切だと感じた.

airflow.apache.org

まず,公開されている Docker Composedocker-compose.yaml をダウンロードする.検証した時点での最新となる Airflow 2.2.4 を使えるようになっていた.

$ curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.2.4/docker-compose.yaml'

そして準備コマンドを実行する.Airflow コンテナにマウントする「3種類」のディレクトリを作ったり,Airflow のアカウントを作るための初期化処理を docker-compose up airflow-init コマンドで実行したりする.

  • ./dags(DAG ファイル)
  • ./logs(ログ)
  • ./plugins(カスタムプラグイン)
$ mkdir -p ./dags ./logs ./plugins
$ echo -e "AIRFLOW_UID=$(id -u)" > .env
$ docker-compose up airflow-init

準備をしたらさっそく docker-compose up コマンドを実行して Airflow を起動する.

$ docker-compose up

http://localhost:8080/ にアクセスするとすぐに Airflow 画面にアクセスできる.初期ユーザーとして airflow/airflow でログインすると,DAG(有向非巡回グラフ = ワークフロー)の一覧を確認できる.ワークフローの詳細を確認したり,実行したりできる.簡単!

f:id:kakku22:20220227162338p:plain

f:id:kakku22:20220227162531p:plain

Airflow コンポーネント 🗝

ここで少し立ち止まって Airflow コンポーネントを確認する.まず,Docker Compose「7種類」のコンテナが起動されている.

$ docker ps --format 'table {{.Names}}' | sort
NAMES
airflow-airflow-scheduler-1
airflow-airflow-triggerer-1
airflow-airflow-webserver-1
airflow-airflow-worker-1
airflow-flower-1
airflow-postgres-1
airflow-redis-1

コンテナの簡単な説明はドキュメントに載っている.比較的コンポーネントは多いと思う.

  • airflow-scheduler : タスクの実行をスケジュールする
  • airflow-triggerer : タスクの実行をトリガーする
  • airflow-webserver : ウェブサーバー(アプリケーションは Flask で実装されている)
  • airflow-worker : airflow-scheduler によってスケジュールされたタスクを実行する(Celery で実装されている)
  • airflow-flower : airflow-worker を監視する(Flower で実装されていて http://localhost:5555/ でアクセスできる)
  • postgres : データベースサーバー
  • redis : airflow-scheduler から airflow-worker にメッセージを受け渡す

また関連する Airflow アーキテクチャは以下のドキュメントに載っている.

airflow.apache.org

CLI と REST API 👾

Airflow の良さとして「画面で操作できること」はあるけど,それ以外に CLI や REST API での操作もできる.

1. CLI

まず CLI を試す.Airflow CLI を使うと Airflow を管理したり,DAG を実行したり,多くの操作ができる.ドキュメントには以下のサブコマンドが載っていて本当に多かった!

  • celery cheat-sheet
  • config
  • connections
  • dags
  • db
  • info
  • jobs
  • kerberos
  • kubernetes
  • plugins
  • pools
  • providers
  • roles
  • rotate-fernet-key
  • scheduler
  • standalone
  • sync-perm
  • tasks
  • triggerer
  • users
  • variables
  • version
  • webserver

airflow.apache.org

今回は環境構築のドキュメントに載っている通り airflow.sh をダウンロードして使う.とは言え,スクリプトの内部では docker-compose run --rm airflow-cli を実行しているため,あくまでラッパーという立ち位置になる.

$ curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.2.4/airflow.sh'
$ chmod +x airflow.sh

version サブコマンドを実行すると Airflow のバージョンを確認できる.

$ ./airflow.sh version
2.2.4

users create サブコマンドを実行するとユーザーを追加するなど Airflow の管理操作も実行できる.

$ ./airflow.sh users create \
  --username kakakakakku \
  --firstname Yoshida \
  --lastname Yoshiaki \
  --role Admin \
  --email kakakakakku@example.com

User "kakakakakku" created with role "Admin"

ユーザー一覧は画面でも確認できる.

f:id:kakku22:20220227170137p:plain

dags trigger サブコマンドを実行すると指定した DAG をトリガーできる.合わせて DAG の初期状態として「一時停止 (Paused)」になっている場合は dags unpause サブコマンドで再開できる.

$ ./airflow.sh dags trigger example_bash_operator
$ ./airflow.sh dags unpause example_bash_operator

画面も1番上に表示されていた example_bash_operator DAG を実行できた.右上に success と表示されている.

f:id:kakku22:20220227170628p:plain

2. REST API

次に REST API を試す.REST API も CLI と同様に多くの操作をサポートしている.以下のように多くある.特に API を使って他のアプリケーションと簡単に連携できるのは便利だと思う.

  • Config
  • Connection
  • DAG
  • DAGRun
  • EventLog
  • ImportError
  • Monitoring
  • Pool
  • Provider
  • TaskInstance
  • Variable
  • XCom
  • Plugin
  • Role
  • Permission
  • User

API 情報はドキュメントに載っているし,検証環境で http://localhost:8080/api/v1/ui/ にアクセスすると Swagger UI も実装されているため,簡単に API の動作確認ができる.

airflow.apache.org

f:id:kakku22:20220227171000p:plain

例えば /api/v1/dags (GET) API を実行すると DAG の一覧を確認できる.以下は画面で1番上に表示されていた example_bash_operator DAG の情報を表示している.なお REST API は Basic 認証を必要とするため,curl コマンドに --user オプションを指定している.

$ curl -s http://localhost:8080/api/v1/dags --user 'airflow:airflow' | jq -r '.dags[0]'
{
  "dag_id": "example_bash_operator",
  "description": null,
  "file_token": "xxx",
  "fileloc": "/home/airflow/.local/lib/python3.7/site-packages/airflow/example_dags/example_bash_operator.py",
  "is_active": true,
  "is_paused": false,
  "is_subdag": false,
  "owners": [
    "airflow"
  ],
  "root_dag_id": null,
  "schedule_interval": {
    "__type": "CronExpression",
    "value": "0 0 * * *"
  },
  "tags": [
    {
      "name": "example2"
    },
    {
      "name": "example"
    }
  ]
}

まとめ

「Apache Airflow」に入門するためにドキュメントを参照しながら Docker を使って検証環境を構築した.また Airflow コンポーネントを確認したり,画面と CLI と REST API を使って Airflow の操作を試した.次は「Airflow Tutorial」を使って DAG を実行していくぞー!

「なぜシブヤの小学2年生はタブレットを使いこなせるのか?」を読んだ

書籍タイトルに興味を持って「なぜシブヤの小学2年生はタブレットを使いこなせるのか?」を読んだ.去年10月に出版された.ICT(情報通信技術)時代における小中学校での「タブレット導入」ドラマを生々しく読めて良かった.

  • 第1章 : ICT 時代の到来。校長はどう舵をとるべきか
  • 第2章 :「ダメな学校」はない。「ダメな先生」もいない
  • 第3章 :「渋谷タブレットの日」をやろう!
  • 第4章 : コロナ禍で加速する「学校デジタル化」
  • 第5章 :「学校デジタル化」に待ったなし!〈未来の学校〉に必要なこと

「タブレット導入」を考えすぎると手段が目的化してしまうけど,推進のためには一時的にでも目的化する必要もあったとのこと.特に第2章に載っている「教育長だより」は戦略的にトップダウンに伝えていた.他にも学校として明確なビジョンと構想をまとめたり,区民に対しても説明責任があったりと,関係者の多さにも苦労があったと思う.また教師経験が長いと今までのベストプラクティスを否定されたように感じて猛反発が出た話など,まさに「変化をどう受け入れるか」という学校教育に限らずよくあるシナリオだとも思った.

個人的には本書を読んでいて「Fearless Change」を思い出した.「エバンジェリスト」「小さな成功」そして「種をまく」「懐疑派代表」など,本書に出てくる戦略はどれも「Fearless Change」に沿っているように感じた.

僕自身も渋谷区に住んでいて,娘は本書にも出てくる小学校に通っている(現在1年生).よって,タブレットを部分的に活用してる話は聞いているし,実際に「渋谷タブレットの日(公開授業)」にも参加したこともある.高学年になるとより活用度合いも高まってくると思う.1年生でも本書に出てくる「デジタル教科書」を使って授業をしたり,「ミライシード」を使った学習もある.最近では「プログラミングゼミ」も使っていると言っていたし,コロナ禍での分散登校では「Microsoft Teams」を使った朝会もしてる.

programmingzemi.com

本書を読んで,渋谷区が「タブレット活用」に至るまでの数年間の過程を知れて良かった!今後も応援しつつ,もし少しでも IT 関連でお手伝いできることがあれば前向きに考えたいと思う (^O^)/

Redash v10 を試そう!「Redash ハンズオン資料」v10 をリリースした

Redash ハンズオン資料 v10 リリース

2017年に公開をしてから Redash のリリースに合わせて継続的に更新をしてきた「Redash ハンズオン資料 (redash-hands-on)」「Redash v10.1.0」に対応させた.お待たせしました!数年前ほどではなくても,現在もそこそこは個人学習などに使ってもらえていると思う.GitHub リポジトリの Star は 270 を超えてたー⭐️ありがとうございます!

github.com

主な変更点は以下となる.手順として新機能は取り込んでなく,基本的には今まで通りの手順を試せるようにしている.「Redash v10.1.0」「垂直ナビゲーションバー」によってデザインが大きく変わっているため,スクリーンショットは全て更新している.

  • 全般
    • Redash v10.1.0 をサポートした
    • スクリーンショットを更新した
    • UI 変更に合わせて手順を見直した
  • 環境
    • Docker Compose で構築した環境を削除する手順を追加した

「Redash v10.0.0」で追加された新機能もあり,例えば Excel / CSV データソースは気になる人も多いと思う.代表的な新機能は以下の記事で紹介しているので,読みながら試してみると良いんじゃないかと!

kakakakakku.hatenablog.com

New Collaborator 🚀

Redash Meetup 運営など Redash の普及に貢献されている id:ariarijp にお願いをして kakakakakku/redash-hands-on リポジトリに Collaborator として入ってもらった!今後は一緒にメンテナンスをしていく🚀よろしくお願いします!

redash-meetup.connpass.com

まとめ

「Redash ハンズオン資料 (redash-hands-on)」を使って Redash v10 を試そう!Happy querying :)

関連記事

Katacoda を使って学習コンテンツを作ろう : Syntax 編

引き続き Katacoda を使って学習コンテンツを作る機能を試していく.今回は4記事目となり「Syntax(構文)」を詳しく調べる.過去3記事も合わせて読んでもらえればと!連載は今回で終了👏

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

Syntax(構文)

以下のドキュメントに載っている通り,Katacoda では Markdown を一部拡張した構文をサポートしている.今回は実際に試してみて便利だった4点を紹介する!

  • Execute
  • Copy
  • Open
  • Quiz

www.katacoda.community

Execute 👾

コマンドの後に {{execute}} と書くと,クリックして自動的にターミナルで実行できる.便利!

`echo 'This is Execute syntax' > execute.txt`{{execute}}

Copy 👾

コマンドの後に {{copy}} と書くと,クリックしてクリップボードにコピーできる.便利!

`echo 'it's Copy syntax'`{{copy}}

Open 👾

コマンドの後に {{open}} と書くと,VS Code でファイルを開ける.今回は {{execute}} で作った execute.txt を開く.便利!

`execute.txt`{{open}}

以下に Execute / Copy / Open を試したステップを載せた.

f:id:kakku22:20220218190934p:plain

Quiz 👾

Markdown に >> xxx <<===(*) という構文を書くと「クイズ」を実装できる.

  • 文字列一致
  • 文字列部分一致
  • 単一回答
  • 複数回答

以下は「文字列一致」「単一回答」の例を載せた.クイズに正解すると次に進めるようになる.理解度確認をしながら学習コンテンツを進められて便利!ただし動作確認をして気付いた仕様として,文字列一致で大文字と小文字の区別はできなかった.少し残念😇

>>Q1: カカカカックの正しいスペルは何ですか?<<
=== kakakakakku

>>Q4: github の正式な表記はどちらですか?<<
( ) Github
(*) GitHub

f:id:kakku22:20220221113157p:plain

今回は以下の GitHub リポジトリを使って kakakakakku-course/kakakakakku-scenario-3-syntax を追加した.あくまで検証用なので未来的に消す可能性はある.

github.com

VS Code 拡張機能

調べたら「Syntax(構文)」の入力をサポートする VS Code 拡張機能もあった.ショートカットを使ったりして補完できる.大規模に書くときは良さそう!

marketplace.visualstudio.com

まとめ

Katacoda では Markdown を一部拡張した構文をサポートしている.Execute / Copy / Open は頻繁に使うことになりそうだし,Quiz もとても便利な構文だった!

環境構築をせずにブラウザを使ってサクッと学べる学習コンテンツを作る予定があり,計4記事を連載して Katacoda の機能を調べていた.本当に便利だった.主要な機能や開発の流れを把握できたので連載は今回で終了👏

積極的に Katacoda を使っていくぞー!

Katacoda を使って学習コンテンツを作ろう : Layouts 編

引き続き Katacoda を使って学習コンテンツを作る機能を試していく.今回は3記事目となり「Layouts(レイアウト)」を詳しく調べる.過去2記事も合わせて読んでもらえればと!

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

Layouts(レイアウト)

Katacoda では「左側に手順書/右側にターミナル」という基本的なレイアウト以外にも対応している.以下のドキュメントに載っている通り「計7種類」のレイアウトがある.また index.jsonshowide オプションを設定すると別タブに VS Code を追加することもできるため,実際にはもう少し多くの種類から選べる.今回はよく使いそうなレイアウトを試していく!

  • Terminal
  • Editor + Terminal
  • VS Code + Terminal
  • Terminal + Iframe tab
  • Terminal + Iframe
  • Iframe
  • Terminal + Terminal

www.katacoda.community

Katacoda UI Layouts Example

今回は「Layouts(レイアウト)」の違いを試せる学習コンテンツ「Katacoda UI Layouts Example」を使う.

katacoda.com

1. Scenario with Terminal UI 🎨

まずは「Terminal」レイアウトを試す.index.json で以下のように設定する(抜粋).

"environment": {
    "uilayout": "terminal"
},

katacoda.com

「左側に手順書/右側にターミナル」という基本的なレイアウトで見慣れている.今まで試した Katacoda もほとんど同じレイアウトになっていたと思う.ほぼデフォルトのレイアウトと言えそう.

f:id:kakku22:20220218105441p:plain

2. Scenario with Terminal and VS Code UI as Tab 🎨

次は「Terminal + VS Code」レイアウトを試す.index.json で以下のように設定する(抜粋).showide オプションを設定すると別タブに VS Code を追加できる.

"environment": {
    "uieditorpath": "/root/example",
    "showide": true,
    "idePort": 23000,
    "uilayout": "terminal"
},

katacoda.com

「左側に手順書/右側にターミナルと VS Code(タブ切り替え)」というレイアウトになる.コードは uieditorpath オプションで設定しているため /root/example/ にある.vim などを使わずにコードを書けるからプログラミング入門者でも便利に使えそう!

f:id:kakku22:20220218105900p:plain

Scenario with VS Code / Terminal UI Split Screen 🎨

今度は「Terminal + VS Code Split Screen」レイアウトを試す.index.json で以下のように設定する(抜粋).

"environment": {
    "uilayout": "vscode-terminal-split"
},

katacoda.com

「左側に手順書/右側にターミナルと VS Code(画面分割)」というレイアウトになる.タブ切り替えをしなくてもよくて便利!少し狭く感じるためディスプレイが大きかったら問題なく使えそう.

f:id:kakku22:20220218110230p:plain

まとめ

Katacoda では多くの「Layouts(レイアウト)」が使える.今までは Terminal を使っていて,VS Code を追加できるのは知らなかった.プログラミングを体験する学習コンテンツを作るときには絶対に使いたいところ!また今回紹介しなかった Iframe というレイアウトを使うと,任意の URL を指定してレイアウトの中にウェブページを表示できる.個人的にどう使うと便利なのか思い付かなかった.次の記事では Syntax を調べていく!