A AWS oferece uma maneira de rotear o tráfego HTTPS para duas instâncias diferentes do EC2 com base no caminho do diretório?

10

Eu queria saber se o seguinte é possível com as ofertas da AWS?

https://www.example.com/a/-> servido pelo Apache na instância A do EC2

https://www.example.com/b/-> servido pelo Apache na instância B do EC2

Para esclarecer, não quero que os arquivos em um caminho de diretório estejam na mesma instância do servidor que os arquivos no outro caminho de diretório.

Entendo que isso seja possível com um proxy de algum tipo, mas existe uma solução mais fácil com uma das ofertas da AWS.

O EC2 Load Balancer não parece permitir alternar com base no caminho do diretório. A rota 53 funciona no nível do DNS, que não possui informações de caminho para retornar IPs com base nisso.

Joseph Shih
fonte
O balanceador de carga do EC2 é tão estúpido que não lê Host:cabeçalhos e filtra o tráfego falso. Parece improvável que eles adicionem recursos como você está perguntando se olhar para os cabeçalhos é muito trabalhoso para eles. Felizmente, eles têm outras opções.
pintos

Respostas:

29

Use o AWS Application Load Balancer , que faz o roteamento baseado em caminho . Esse segundo link é um tutorial de como fazê-lo.

Em resumo, você configura seu ALB como normal e siga estas etapas (copiadas do tutorial da AWS):

  • Na guia Ouvintes , use a seta para exibir as regras do ouvinte e, em seguida, escolha Adicionar regra . Especifique a regra da seguinte maneira:

  • Para Nome do grupo de destino , escolha o segundo grupo de destino que você criou.

  • Para Padrão do caminho, especifique o padrão exato a ser usado para o roteamento baseado em caminho (por exemplo, / img / *). Para mais informações, consulte Regras do Ouvinte.

  • Escolha Salvar .

Tim
fonte
Obrigado! Fiz o check-out do EC2 Application Load Balancer originalmente, passei pelo assistente, mas nunca criei um. O assistente não deu uma opção de caminho. Como o tutorial apontou, é preciso criá-lo primeiro e depois editar as regras.
Joseph Shih
9

Além da excelente resposta de Tim, você também pode conseguir isso com o CloudFront .

Primeiro, crie sua distribuição , adicionando origens para a Instância EC2 A e EC2 Instância B (que também podem ser balanceadores de carga, hosts que não sejam da AWS ou até buckets S3).

Em seguida, configure as regras de comportamento do cache para mapear / a / * e / b / * para as origens apropriadas.

Se faz sentido ou não usar o CloudFront para essa finalidade, dependerá do seu aplicativo e da necessidade de uma CDN.

Zach Lipton
fonte
4
Isso também pode se aplicar se você desejar /a*e /b*ser tratado por diferentes serviços, contas diferentes, regiões diferentes ou mesmo um caminho tratado por algo em execução na AWS e em outro local. O CloudFront possui muitos casos de uso que não exigem, conceitualmente, uma CDN.
Michael - sqlbot