Additionally, if you stick with a single Fly app, and instruct the Elixir node what type of work it has to do with a start-up arg, you can make use of these:
https://fly.io/docs/app-guides/multiple-processes/
https://community.fly.io/t/preview-multi-process-apps-get-your-workers-here
… which is great because you can scale each layer separately.
As a bonus, you can also pick a beefier VM for the crunch layer.