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

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

Prefectをローカルで動かしてみる

not-rogue.hatenablog.com

では、

  • タスクはローカルのDocker agent
  • メタデータとWebUIはPrefectCloud

でしたが、全部をローカルで動かすことも出来ます。

 

準備

https://docs.prefect.io/core/getting_started/installation.html

  • Docker
  • Docker compose
  • Python

あたりをインストールした後

prefect backend server
prefect server start

を実行します。うまくいくと

http://localhost:8080/

でPrefectのWebUIが見られます。

 

Dockerコンテナが色々起動しています

> docker ps                                                      
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                            NAMES
46b341464ee3        prefecthq/ui:0.10.5            "/intercept.sh"          13 days ago         Up 13 days          80/tcp, 0.0.0.0:8080->8080/tcp   cli_ui_1
bfba03d93db3        prefecthq/apollo:0.10.5        "npm run serve"          13 days ago         Up 13 days          0.0.0.0:4200->4200/tcp           cli_apollo_1
6e90ba52339f        prefecthq/server:0.10.5        "python src/prefect_…"   13 days ago         Up 13 days                                           cli_scheduler_1
13bdd322d7b6        prefecthq/server:0.10.5        "bash -c 'prefect-se…"   13 days ago         Up 13 days          0.0.0.0:4201->4201/tcp           cli_graphql_1
42d010c1bf38        hasura/graphql-engine:v1.1.0   "graphql-engine serve"   13 days ago         Up 13 days          0.0.0.0:3000->3000/tcp           cli_hasura_1
0c4d3a11b8b9        postgres:11                    "docker-entrypoint.s…"   13 days ago         Up 13 days          0.0.0.0:5432->5432/tcp           cli_postgres_1

 

Flowを登録

from prefect import task, Flow

@task
def say_hello():
    print("Hello, world!")

with Flow("Hello") as flow:
    task = say_hello()
    flow.register()
    flow.run_agent

 

> python hello.py
Result Handler check: OK
Flow: http://localhost:8080/flow/9a90a3f4-0221-4a4f-8688-0e1a8ff78b5b

実行

この時点では、Flowが登録されただけで実行はされません。

Flowが実行されるには、

  • FlowRunが作られて、scheduledなステータスになる
  • Flow Runを監視し、実行するagent

が必要です。

 

FlowRunは、Flow画面の右上の「Quick Run」をクリックすると作れます。

agentは何種類かありますがLocalAgentで動かしてみましょう。

 

prefect agent start


 ____            __           _        _                    _
|  _ \ _ __ ___ / _| ___  ___| |_     / \   __ _  ___ _ __ | |_
| |_) | '__/ _ \ |_ / _ \/ __| __|   / _ \ / _` |/ _ \ '_ \| __|
|  __/| | |  __/  _|  __/ (__| |_   / ___ \ (_| |  __/ | | | |_
|_|   |_|  \___|_|  \___|\___|\__| /_/   \_\__, |\___|_| |_|\__|
                                           |___/

[2020-05-19 13:03:38,521] INFO - agent | Starting LocalAgent with labels ['kimuramakotonoMacBook-Pro.local', 'azure-flow-storage', 'gcs-flow-storage', 's3-flow-storage']
[2020-05-19 13:03:38,521] INFO - agent | Agent documentation can be found at https://docs.prefect.io/orchestration/
[2020-05-19 13:03:38,521] INFO - agent | Agent connecting to the Prefect API at http://localhost:4200
[2020-05-19 13:03:38,635] INFO - agent | Waiting for flow runs...
[2020-05-19 13:03:38,950] INFO - agent | Found 1 flow run(s) to submit for execution.
[2020-05-19 13:03:39,000] INFO - agent | Deploying flow run 705d62e1-c436-4ed6-a90b-47f2679a5567

もう一度WebUIを見ると、Flow Runが作られ、Successになっていることが確認出来るはずです。