💎

prefect をローカルで動かすための構成要素を理解する

2024/01/28に公開

はじめに

prefect の構成要素について理解します。
ここでの構成要素とは、prefect をローカル環境で動かすための要素を指します。
(そのため、SaaS である prefect cloud については言及しません。)

この記事では、以下の要素について説明しています。

  • prefect-server
  • database

prefect とは

prefect とは、手軽にデータ処理 pipeline を構築することができるワークフロー管理ツールです。
https://docs.prefect.io/latest/

prefect のインストール

公式ドキュメントを参照します。
https://docs.prefect.io/latest/getting-started/installation/#install-prefect

prefect-server

prefect のインストール後、以下のコマンドを使うことができます。

prefect server start

このコマンドにより、 prefect-server が起動します。

prefect-server は、prefect を使うための API と UI を提供してくれるプロセスです。

prefect-server が持つ API は、 prefect をインストールしたときに提供される CLI コマンドで利用することができます。この API を通して、ワークフローの登録を行ったりします。

また先ほどの prefect-server の起動により、デフォルトであれば localhost:4200 で以下のような UI にアクセスすることが出来ます。

database

prefect-server は、多くのリソース情報をバックエンドの database に保存します。
保存される情報には、 Flow や Task 等様々なものがあります(他にも多くのリソース情報が保存される)。Flow や Task は、ワークフローを表現するリソースになりますが、これらはまた別の記事で扱おうと思います。

database には sqlitePostgreSQL が利用できます。
デフォルトでは sqlite が使用されます。

また sqlite が使用されている場合、そのデータベースファイルは ~/.prefect/prefect.db に配置されるようです。

API を通じて prefect を操作していると、このデータベースファイルにリソース情報が保存されていきます。もしデータベースの内容をリセットしたい場合は、以下のコマンドを利用します。

prefect server database reset -y

PostgreSQLの利用

sqlite ではなく、PostgreSQL を使うには以下のようにします。

まず prefect が利用する環境変数 PREFECT_API_DATABASE_CONNECTION_URL の値を以下のように設定します。

prefect config set PREFECT_API_DATABASE_CONNECTION_URL="postgresql+asyncpg://postgres:[yourTopSecretPassword]@localhost:5432/prefect"

次にローカルで PostgreSQL インスタンスを起動します。
公式ドキュメントでも推奨されていますが、 docker で起動するのが良さそうです。

docker run -d --name prefect-postgres -v prefectdb:/var/lib/postgresql/data -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=[yourTopSecretPassword] -e POSTGRES_DB=prefect postgres:latest

「環境変数の設定」と「PostgreSQLの起動」が完了したら、最後に prefect-server を起動します。

prefect server start

これでバックエンドのデータベースに PostgreSQL が使用されます。

終わりに

prefect の構成要素理解として、 今回は prefect-server と database を扱いました。
次回は(もしやるとすれば)、 Flow や Task 周りを扱おうかと思います。

参考

https://docs.prefect.io/latest/guides/host/

Discussion