Then I started questioning, is this any better than 1 container per ec2 instance and running docker myself?
Assume that 1 fargate task definition == 1 ec2 instance.
I can't really think of any way that fargate would win in cost.
The management overhead for ec2 seems to be limited to starting docker daemon and launching your containers.
Should I migrate off of fargate onto ec2?
Where Fargate shines is situations that require rapid scaling or where the infrastructure can be more on-demand. The startup time for Fargate is lower than EC2 in my experience.
I would advocate for continuing to use ECS instead of self-managed docker, just use reserved EC2 instances.
Average task start time is about 3min on fargate. And there is no caching at all built-in.
I wish it was more like 5secs... :(
Really I wish I could run my app on Lambda but my app is too large at the moment, and has a lot of large/streaming/otherwise unusual HTTP requests that may be a bear to integrate with lambda...