Estou brincando com o Amazon ECS (uma reembalagem do Docker) e descobrindo que há um recurso do Docker que o ECS parece não fornecer. Ou seja, eu gostaria de ter vários contêineres em execução em uma instância e ter solicitações chegando no endereço IP 1 mapeadas para o contêiner 1 e solicitações chegando no endereço IP 2 mapeadas no contêiner 2, etc.
No Docker, a ligação de um contêiner a um endereço IP específico é feita via:
docker run -p myHostIPAddr:80:8080 imageName command
No entanto, no Amazon ECS, não parece haver uma maneira de fazer isso.
Eu configurei uma instância do EC2 com vários endereços IP Elastic. Ao configurar um contêiner como parte de uma definição de tarefa, é possível mapear as portas do host para as portas do contêiner. No entanto, diferentemente do Docker, o ECS não fornece uma maneira de especificar o endereço IP do host como parte do mapeamento.
Uma reviravolta adicional é que eu gostaria que as solicitações de saída do contêiner N tivessem o endereço IP externo do contêiner N.
Existe uma maneira de fazer tudo isso?
Examinei a documentação da CLI da AWS, bem como o SDK da AWS para Java. Eu posso ver que a CLI pode retornar uma matriz networkBindings contendo elementos como este:
{
"bindIP": "0.0.0.0",
"containerPort": 8021,
"hostPort": 8021
},
e o Java SDK tem uma classe chamada NetworkBinding que representa as mesmas informações. No entanto, essas informações parecem ser apenas de saída, em resposta a uma solicitação. Não consigo encontrar uma maneira de fornecer essas informações vinculativas ao ECS.
A razão pela qual desejo fazer isso é que desejo configurar VMs completamente diferentes para diferentes constituintes, usando diferentes contêineres potencialmente na mesma instância do EC2. Cada VM teria seu próprio servidor da Web (incluindo certificados SSL distintos), bem como seu próprio serviço de FTP e SSH.
Obrigado.
aws ecs describe-container-instances
parece não ajudar. Eles realmente querem pressioná-lo a usar um ELB, o que para o nosso caso é meio idiota.