Open5

Prefect で ローカル/本番を透過的に開発する環境を構築したい

bibiobibio

実現方法

ローカルでは docker compose, 本番では ECS Fargate でのタスクを実行する。
Prefect は Prefect Cloudを使い、カスタムコンテナを使うためInfrastructureにECS Runを使うことで、現状アプリ側のコンテナに手をいれずワークフロー化できるはず。

ECS Run タスク実行時のオーバーヘッドはいったん無視

背景

この方法で、ローカルでは prefect-docker を使うことを検討した。
だが、諸々の環境変数やvolumeなどはそのままもっていきたい(開発時の現在の体験をそのままにしたい)ため、ECSのローカル環境を使いエミュレートをすることで同様の実行環境を提供できないか検討する。

bibiobibio

Sidekiq Workerへのenqueueをコントロールしたい

  • enqueue はどの言語からもできる
  • ただし、完了を自前実装しない以外は難しい(いずれかのキューまたはProcessで実行中でない、になるがタイミングにより空振りする可能背)
  • Sidekiq Pro の Batch を使えば、完了を把握できる
  • Sidekiq Pro の Batch だけでWorkflowを組むこともできるが、見通しは悪い(callback 地獄)
bibiobibio

Prefect と Sidekiq を組み合わせるには

Enqueue

  • PrefectWorker内から ECSタスクを起動しSidekiqをenqueueする(オーバーヘッド大きい)
  • WebAPI化する(現実的)
    • Sidekiq Batchでwrapして完了待ちを行う
    • SidekiqのEnqueueと違い、外部からのBatch作成はできなさそうなので、プロダクトへの組み込みが必要?

Status