🤖

Cloud Composerのローカル開発 composer-local-dev お試し

2022/12/25に公開

はじめに

Cloud Composerをローカル環境で動作確認を行うことができるcomposer-local-devというものがリリースされたので試してみます。
インストールを行い、Composer環境の作成、Airflow UIの確認、Composer環境の停止、削除あたりをやってみました。

インストール

インストールは公式のとおりに行っていきます。
今回のGithubのソースコードはここにあります。
公式のcomposer-local-devのソースコードはこちらです。

まずは認証情報の構成を設定します。

$ gcloud auth application-default login
$ gcloud auth login

ライブラリのインストールを行います。

$ git clone https://github.com/GoogleCloudPlatform/composer-local-dev.git
$ cd composer-local-dev
$ pip3 install .

ローカル Composer環境の作成を行います。
GCP上に構築した環境をもとにしてローカルに作成することもできますが、今回はローカル環境で特定のバージョンを指定してexample-local-environmentという名前で構築を行います。

$ composer-dev create \
  --from-image-version composer-2.0.32-airflow-2.2.5 \
  example-local-environment

--dag-pathを指定しないとcomposerディレクトリが作成されその下にdags, data, airflow.dbなどが作成されます。
また以下のようにdagのパスを指定するとgit cloneしたcomposer-local-devディレクトリの下ではなくとも環境が作成できます。

/Users/sample/composer-dev-example $ composer-dev create \                         
  --from-image-version composer-2.0.32-airflow-2.2.5 \
  --dags-path dags \
  example-local-environment

作成した環境の確認を行います。

$ composer-dev list

  Environment Name          │ Version*                      │ State        
╶───────────────────────────┼───────────────────────────────┼─────────────╴
  example-local-environment │ composer-2.0.32-airflow-2.2.5 │ Not started  

作成した環境の詳細情報を表示をします。

$ composer-dev describe

Composer example-local-environment environment is in state: Not started.

Image version: composer-2.0.32-airflow-2.2.5
Dags directory: /Users/sample/composer-dev-example/dags.
The environment is using credentials from gcloud located at /Users/sample/.config/gcloud.

Airflow環境をスタートします。
Airflow環境が無事にスタートするとlocalhostからUIにアクセスできます。

$ composer-dev start example-local-environment
Starting example-local-environment composer environment...
...
Started example-local-environment environment.

1. You can put your DAGs in /Users/sample/composer-dev-example/dags
2. Access Airflow at http://localhost:8080

Airflow UIにアクセスを行うとこのようにDAGが登録されていることが確認できます。
今回は簡単なecho hellloするだけのDAGをdagsフォルダに置いています。

DAGを実行するとCLIからログが確認できます。

$ composer-dev logs example-local-environment
...
run_id='scheduled__2022-01-01T00:00:00+00:00', try_number=1) to executor with priority 1 and queue default
2022-12-24T06:45:02.809633465Z [2022-12-24 06:45:02,809] {base_executor.py:85} INFO - Adding to queue: ['airflow', 'tasks', 'run', 'demo', 'airflow', 
'scheduled__2022-01-01T00:00:00+00:00', '--local', '--subdir', 'DAGS_FOLDER/sample.py']
2022-12-24T06:45:02.815494757Z [2022-12-24 06:45:02,814] {sequential_executor.py:59} INFO - Executing command: ['airflow', 'tasks', 'run', 'demo', 'hello', 
'scheduled__2022-01-02T00:00:00+00:00', '--local', '--subdir', 'DAGS_FOLDER/sample.py']

DAGの変更を行った場合などにはリスタートを行うと反映されます。

$ composer-dev restart example-local-environment
...
2022-12-24T06:43:38.716401176Z DAG_PROCESSOR_MANAGER_LOG:[2022-12-24 06:43:38,715] {manager.py:518} INFO - Process each file at most once every 30 seconds
2022-12-24T06:43:38.716415718Z [2022-12-24 06:43:38,715] {scheduler_job.py:1235} INFO - Marked 1 SchedulerJob instances as failed
2022-12-24T06:43:38.716975468Z DAG_PROCESSOR_MANAGER_LOG:[2022-12-24 06:43:38,716] {manager.py:519} INFO - Checking for new files in /home/airflow/airflow/dags every 10 seconds
2022-12-24T06:43:38.719036343Z DAG_PROCESSOR_MANAGER_LOG:[2022-12-24 06:43:38,717] {manager.py:704} INFO - Searching for files in /home/airflow/airflow/dags

Started example-local-environment environment.

1. You can put your DAGs in /Users/sample/composer-dev-example/composer-dev-example/dags
2. Access Airflow at http://localhost:8080

Airflow 環境の停止を行います。

$ composer-dev stop example-local-environment
Stopped composer local environment.

停止を行うだけではDockerイメージは削除されないので直接dockerコマンドを使って削除します。

$ docker rmi -f $(docker images --filter=reference='*/cloud-airflow-releaser/*/*' -q)
Error response from daemon: conflict: unable to delete 428a4887bf60 (must be forced) - image is being used by stopped container 4ccc178d3498

まとめ

公式の通りに行うとインストールから、Airflowのスタート、リスタート、Airflow UIの確認、ログの確認、削除が確認できました。
裏側で動いているデータベースはSQLite、サービスアカウントの指定はできなさそうなどGCPの環境と完全に同じ状態で動かすことはできなそうですが、実際のGCPの環境と同じイメージで動かせることやAirflowを動かす環境を自分で作成しなくてもよい(Airflowを動かすにはwebserver、scheduler、dbを動かす必要がありそこがセットアップファイル)になって自分達で管理する必要がないのも便利そうです。

GitHubで編集を提案

Discussion