カーキ色はヒンディー語らしい

技術記事は https://zenn.dev/notrogue

Prefect見てみる コンポーネント編

not-rogue.hatenablog.comの続きで、Prefectに関連する概念のメモです。

 

Hybrid Model

www.prefect.io

medium.com

Prefectでは「Hybrid Model」を採用しています。これは、

が担当するという方針です。センシティブなデータやコードを預けなくてすみ、また、好きなインフラを使えるメリットがあります。

 

AirflowのSaasSであるCloud Composer Astronomerは、

  • 処理を行う場所(Worker)
  • 処理する場所に配置するやつ(Executor)
  • DAGファイルの置き場
  • DAG/タスクの状態を制御するやつ(Scheduler)
  • メタデータのデータベース
  • 管理インターフェイス(Webserver、API)

を全てSaaSとして提供しますが、Prefect Cloudでは、

はPrefect Cloudが提供しますが、

  • 処理を行う場所(Environment/Executor)
  • 処理する場所に配置するやつ(Agent)
  • Flowファイルの置き場(Storage)

に関しては、処理するための仕組みはPrefectが提供しますが、実際のインフラはユーザーが(AWSGCPなどに)用意します。

 

例えば、本番用にGKEのクラスタを使うなら、

  • Environment/Executor: DaskKubernetesEnvironment/RemoteDaskExecutor
  • Storage: Flowコードが入ったコンテナイメージ
  • Agent: GKE上でKubernates Agent

開発用にローカルで動かすなら、

  • Environment: 指定しない(デフォルトのRemoteEnvironmentになる)
  • Storage: ローカル
  • Agent: Local

などの設定を行います。環境の例は、Configure Your Environment | Prefect Docsがわかりやすいです。

 

Storage

docs.prefect.io

PrefectはHybrid Modelを採用しているので、Flowのコードは

  • ローカルファイル
  • GCS
  • S3
  • Azure Blob
  • Dockerイメージ

のいずれかに配置します。その設定がStorageです。

 

Agent

docs.prefect.io

flowの状態を監視して、処理するための準備をするのがAgentです。

  • Storageからコードの読み込み
  • flowコードで指定されている、環境変数の設定
  • Environmentの起動

などの処理を行っており、

  • ローカル
  • Docker
  • Kubernates
  • AWS Fargate

で動くAgentが用意されています。

 

 

Environment

docs.prefect.ioflowを処理する環境を定義するのが、Environmentです。

  • LocalEnvironment
  • RemoteEnvironment
  • RemoteDaskEnvironment
  • DaskKubernetesEnvironment(k8s上にDaskクラスターを作成し、そのジョブとして処理)
  • KubernetesJobEnvironment
  • FargateTaskEnvironment

のEnvironmentが用意されています。

なお、指定しない場合はRemoteEnvironment(+LocalExcutor)になります。

 

Executor

docs.prefect.io

Environmentに似た概念にExecutorというのもあります。こちらは、Environmentの上で、「function」(タスクに限らない?)の実行方法を指定するやつで、

  • Local(ローカルのプロセス)
  • Dask
  • Sync/LocalDask(これもDaskで処理)

が用意されています。デフォルトはLocalExecutorですが、DaskExecutorが本番だとオススメらしいです。