Você apontou para si mesmo, no final da pergunta, que não é possível dar uma resposta direta e objetiva à sua pergunta além de "depende", então tentarei ajudar com base em minha ( não vasta) experiência usando AWS.
How do I decide which instance is good for my app (micro, small, medium, large etc.). In other words how can I tell how much memory/processing power is required by this application.
Por testes, benchmarking, experimentação. Existem vários artigos por aí apontando como o EC2 tem um desempenho inferior quando comparado a especificações de hardware "equivalentes" de outros provedores ( este é bom). Minha sugestão seria criar um ambiente com o seu melhor palpite, monitorar, carregar testes, avaliar suas instâncias, brincar com novas instâncias e decidir qual delas melhor se adequa aos requisitos de sua aplicação. Sem mais detalhes sobre sua arquitetura, esta é a melhor resposta que você pode ter.
How can I quantify maximum number of concurrent users on my server. This is important for this application, I need to know how many users would be supported by micro/small/medium or large instance.
Novamente, isso depende muito da arquitetura do seu sistema e do perfil de suas transações. Eles são intensivos em I / O, ligados à memória, ligados à cpu? A melhor dica é que você deve experimentar.
Should I go for everything installed on a single instance or should I have separate instance for database, backups and application.
Eu recomendo ter instâncias separadas para cada camada do seu aplicativo. Uma configuração típica na AWS incluiria instâncias EC2 (por trás de um Elastic Load Balancer ou não) (ou Elastic Beanstalk) para seu aplicativo, outro conjunto de instâncias EC2 ou RDS para seu banco de dados, S3 para persistência de arquivos e backups e assim por diante . Se você não espera uma carga enorme (ou nem moderada), uma única instância medium
pode se encaixar perfeitamente às suas necessidades. A principal razão para ter uma separação é que você pode escalá-las independentemente no futuro. Esta é, IMHO, o melhor benefício da AWS: flexibilidade. Você pode dimensionar seu sistema RDS com um clique do mouse (quase literalmente). Você também pode adicionar um Elastic Load Balancer na frente da sua camada da Web sem muito esforço e, em seguida, adicionar 2 ou 3 servidores da Web adicionais ao seu ecossistema. Então, eu manteria as coisas separadas, a fim de maximizar e alavancar essa flexibilidade.
How can I have an estimate of extra resources required with addition of each user (I think this would not be linear)
Experimentação, benchmarking, etc. Desculpe por ser repetitivo, mas quando você começar a implantar seus recursos, você vai perceber que as coisas são realmente não lineares, e que suas expectativas podem nem sempre ser verdadeiras ao usar o AWS. Seguindo algumas dicas simples (como a resposta que dei para o marcador anterior), não é garantido que seu sistema seja escalonado facilmente de acordo com sua carga, mas as coisas provavelmente serão menos dolorosas sempre que você precisar escalar.
Espero que ajude.