Guidance Needed: Migrating from ECS Fargate to ECS EC2 with Auto Scaling and Cost Optimization

I currently have a setup on Amazon ECS Fargate where my Python Django application is deployed along with Celery, Celery Beat, Elasticsearch, and Redis. All five services are running in a single ECS cluster with varying CPU and memory configurations.

We maintain three separate AWS accounts for Production, Staging, and Development environments.

Due to cost considerations, my manager has asked me to migrate the deployment to ECS using EC2 instances. I’m new to this setup and would really appreciate guidance on the following:

  1. Should I use Spot Instances, On-Demand, or a mix of both?
  2. Is it recommended to run all services in a single ECS cluster, or should I split them?
  3. What’s the best way to handle resource scaling? For example, if a developer requests increased CPU for a specific service but there are no remaining resources in the cluster.
  4. How can I upgrade EC2 instance sizes in the Auto Scaling Group when needed?
  5. What is the correct way to configure the Auto Scaling Group, including strategies for fault tolerance and performance?

Any step-by-step guidance or best practices would be highly appreciated. Thanks in advance!