Implementações Blue / Green com o CloudFront com igual proporção

2

Duas distribuições do CloudFront:

A opção que tentei foi ter duas Distribuições Web do CloudFront separadas, uma para um site estático no bucket s3 (versão A) e outra para outro site estático no bucket s3 (versão B). Eu tentei usar uma política de roteamento ponderada de Route53 onde eu adicionei dois registros para meu registro de Route53 de www.domain.com, um apontando para distribuição de CloudFront A com um peso de 0 e outro apontando para distribuição de CloudFront B com um peso de 0. I quer fazer testes A / B.

Usado www.domain.com como CNAME alternativo para a distribuição Prod.

Usado * .domain.com como CNAME alternativo para distribuição de produção B.

Meu conteúdo é sempre veiculado a partir de A. Quero que seja veiculado nas duas versões com igual proporção.

Qualquer ajuda sobre isso?

    
por Anushka Potabatti 04.02.2016 / 13:18

2 respostas

2

Você não pode fazer isso com o CloudFront.

tl; dr: seu curinga não corresponde a nomes de host nos quais um nome de host específico e conflitante está configurado em outra distribuição.

Você criou o nome alternativo do caractere curinga na distribuição B como uma tentativa de contornar essa restrição:

You cannot add an alternate domain name to a CloudFront distribution if the alternate domain name already exists in another CloudFront distribution, even if your AWS account owns the other distribution.

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-restrictions

Existe, é claro, uma razão para essa restrição, e também explica por que a distribuição B nunca veria suas solicitações, mesmo que sua configuração de DNS esteja funcionando como esperado.

A exceção à regra ...

However, you can add a wildcard alternate domain name, such as *.example.com, that includes (that overlaps with) a non-wildcard alternate domain name, such as www.example.com. Overlapping domain names can be in the same distribution or in separate distributions as long as both distributions were created by using the same AWS account.

... não fornece a exceção que você previu.

Quando um navegador da Web se conecta a um endpoint, como o navegador chegou lá não é preservado - era um registro A estático, um Alias, um CNAME, uma cascata inteira de CNAMEs ou um entrada no seu arquivo hosts? O servidor não sabe, porque essa informação não é preservada ... Ela sabe o endereço IP que você chegou, mas isso é de um pool compartilhado por muitas distribuições, então como sua solicitação chegou a uma determinada borda do CloudFront (que define de registros DNS foi seguido, seu "A" ou "B" - eles podem até mesmo não ser endereços IP diferentes no final do CloudFront) não é algo que pode ser usado para determinar qual distribuição deve atender sua solicitação.

O único mecanismo que o CloudFront tem para determinar qual distribuição deve atender a uma solicitação específica é o cabeçalho HTTP Host: na solicitação HTTP de entrada (potencialmente, negociação SNI também, mas isso não muda nada, independentemente de CloudFront usa isso).

O tratamento de uma solicitação como pertencente a uma distribuição específica é decidido com base em mais nada - não pode ser, já que não há mais nada disponível para se basear nela.

Por extensão lógica, somente uma distribuição pode ser associada a qualquer solicitação recebida Host: header, como www.example.com (sua distribuição "A".)

A outra distribuição ("B"), *.example.com é, na verdade, apenas capaz de atender a solicitações de tudo, exceto www.example.com (ou de outros nomes de domínio alternativos mais específicos que você associado a distribuições que, de outra forma, corresponderiam a esse caractere curinga) porque outra distribuição na mesma conta com um nome de host mais específico associado ("A") reivindica o nome de host específico www.example.com como uma exceção ao caractere curinga * .

Essencialmente, as solicitações são verificadas para uma distribuição com uma correspondência exata do nome do host, primeiro, e somente quando não houver correspondência, a distribuição com o caractere curinga será usada para a solicitação.

    
por 05.02.2016 / 00:24
1

Uma solução que recebi é: Eu tentei usar dois serviços diferentes. Onde eu adicionei dois registros para o meu registro Route53 do www.domain.com, um apontando para o CloudFront Distribution A com um peso de 0 e o outro apontando diretamente para o s3 Bucket (www.domain.com) no local B com um peso de 0. WRR funciona. Mas, eu não acho que podemos usar o estilo S3 / Cloudfront de WRR porque o desempenho será tão diferente entre os dois que o teste A / B não será realmente justo para a versão S3. Os clientes obterão tempos de resposta muito melhores dos servidores de borda do Cloudfront.

Eu tenho outra opção, por exemplo, configurar uma política de tráfego no Route 53. Eu acho que deveria ir com isso. Existe alguma outra opção que eu possa tentar e que atenda aos requisitos do Teste AB mais seja rentável?

    
por 08.02.2016 / 12:23