Open5
Prefect で ローカル/本番を透過的に開発する環境を構築したい
実現方法
ローカルでは docker compose, 本番では ECS Fargate でのタスクを実行する。
Prefect は Prefect Cloudを使い、カスタムコンテナを使うためInfrastructureにECS Runを使うことで、現状アプリ側のコンテナに手をいれずワークフロー化できるはず。
ECS Run タスク実行時のオーバーヘッドはいったん無視
背景
この方法で、ローカルでは prefect-docker を使うことを検討した。
だが、諸々の環境変数やvolumeなどはそのままもっていきたい(開発時の現在の体験をそのままにしたい)ため、ECSのローカル環境を使いエミュレートをすることで同様の実行環境を提供できないか検討する。
ECSの環境をローカルで動かす
AWS がイメージと手法を提供しているので、こちらの手順で実装する
Prefect 側からECSタスクを実行する
prefect-aws の ECS Integrations を利用する。
Prefect と Sidekiq を組み合わせるには
Enqueue
- PrefectWorker内から ECSタスクを起動しSidekiqをenqueueする(オーバーヘッド大きい)
- WebAPI化する(現実的)
- Sidekiq Batchでwrapして完了待ちを行う
- SidekiqのEnqueueと違い、外部からのBatch作成はできなさそうなので、プロダクトへの組み込みが必要?
Status
- Sidekiq BatchのStatusを利用
- PollingするAPIが用意されている