Do I need to create separate task definitions?
Sim
Do I need to create separate services?
Não necessariamente. Você pode simplesmente executar tarefas por conta própria sem o "serviço". Mas o "serviço" permite a associação com o balanceador de carga, o escalonamento automático do aplicativo e com implantações com tempo de inatividade zero.
A única maneira de "vincular link" aos seus contêineres é defini-los em uma definição de tarefa, como você está fazendo atualmente. Dessa forma, o ECS colocará todos os contêineres na mesma instância. Dividir em tarefas diferentes significa que não há vinculação, pois os contêineres podem ser iniciados em instâncias diferentes.
Portanto, se você decidir dividi-los, cada contêiner precisará se conectar a outros contêineres por meio de URLs "de serviço".
Meu conselho é para
- Criar ALB / ELB
- Divida todos os contêineres em tarefas individuais.
- Crie "serviços" para todas as tarefas
- Associe cada contêiner de serviços a ALB / ELB
- Atualize cada configuração de serviço para usar o DNS: PORT do ALB / ELB usado por cada serviço
- Pare de usar rabitMQ e migre para o SQS.
Dessa forma, você pode dimensionar cada "serviço" individualmente.
Se você decidir ficar com o rabbitMQ, precisará usar o ELB para o contêiner rabbitMQ e associar manualmente a porta do contêiner usada pelo rabbitMQ ao ELB.
Os ALBs descobrirão automaticamente as portas de contêiner usadas pelos seus serviços.
Veja isto para mais detalhes sobre ALB e ECS: