Como resolvo o erro CNAMEAlreadyExists ao configurar um alias do CNAME para minha distribuição do CloudFront?

7 minuto de leitura
0

Quando eu configuro um alias de registro de nome canônico (CNAME) para minha distribuição do Amazon CloudFront, recebo um erro “CNAMEAlreadyExists”.

Breve descrição

Você não pode usar o mesmo alias do CNAME para mais de uma distribuição do CloudFront. Quando o alias do CNAME que você está tentando adicionar já está associado a outra distribuição do CloudFront, você recebe um erro:

“Um ou mais dos CNAMEs que você forneceu já estão associados a um recurso diferente. (Serviço: AmazonCloudFront; Código de status: 409; Código de erro: CNAMEAlreadyExists; ID da solicitação: a123456b-c78d-90e1-23f4-gh5i67890jkl*"

Se você tiver acesso às distribuições de origem e de destino, remova manualmente a associação CNAME da distribuição existente do CloudFront. Em seguida, associe o CNAME à nova distribuição do CloudFront.

Observação: se você quiser associar manualmente o CNAME, talvez seja necessário esperar até que o status da distribuição antiga seja Implantada antes de continuar.

Se você não souber a ID da distribuição, use a API ListConflictingAliases do CloudFront. Isso permite que você encontre informações parciais sobre a distribuição e a ID da conta do alias do CNAME conflitante. Em seguida, use a API AssociateAlias para mover seu CNAME da distribuição existente (distribuição de origem) para a nova distribuição (distribuição de destino). Use uma das seguintes resoluções com base no seu cenário:

  • Para distribuições de origem e destino que estão na mesma conta, consulte a seção Usar a API AssociateAlias para mover seu CNAME.
  • Para distribuições de origem e destino entre contas, consulte a seção Desativar distribuição de origem com o CNAME conflitante.
  • Se você não conseguir desativar a distribuição de origem devido ao tempo de inatividade do tráfego existente, consulte Usar um curinga para mover o nome de domínio alternativo.
    Observação: você não pode usar um curinga para mover um domínio apex (exemplo.com). Para mover um domínio apex quando as distribuições de origem e de destino estiverem em contas diferentes da AWS, entre em contato com o AWS Support para mover um nome de domínio alternativo.

Resolução

Usar a API AssociateAlias para mover seu CNAME

Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está utilizando a versão mais recente.

1.    Na política do AWS Identity and Access Management (IAM) do usuário ou do perfil que está fazendo a solicitação de API, adicione as seguintes permissões em nível de recurso:

Importante: O usuário ou perfil do IAM que faz a solicitação deve ter essas permissões em nível de recurso na distribuição de origem e na distribuição de destino.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudFrontCnameSwapSameAcc",
      "Effect": "Allow",
      "Action": [
        "cloudfront:GetDistribution",
        "cloudfront:ListConflictingAliases",
        "cloudfront:AssociateAlias",
        "cloudfront:UpdateDistribution"
      ],
      "Resource": [
        "arn:aws:cloudfront::SourceAcccount:distribution/SourceDistroID",
        "arn:aws:cloudfront::TargetAccount:distribution/TargetDistroID"
      ]
    }
  ]
}

Observação: substitua SourceAcccount pelo número da conta da AWS da distribuição de origem. Substitua SourceDistroID pela ID de distribuição de origem. Substitua TargetAccountID pelo número da conta da AWS da distribuição de destino. Substitua TargetDistroID pela ID de distribuição de destino.

2.    Identifique a distribuição com o CNAME conflitante. Se você não sabe qual distribuição tem o CNAME conflitante, use a API ListConflictingAliases para encontrar essa distribuição:

$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME

Observação: substitua YourDistributionID pela ID da sua distribuição. Substitua YourCNAME pelo alias do CNAME conflitante.

3.    Para verificar a propriedade do domínio, você deve ter acesso de leitura a YourDistributionID. Você também deve ter um certificado SSL associado à distribuição do CloudFront que proteja o CNAME conflitante.

Quando estiver pronto para verificar a propriedade, crie um registro DNS TXT para o CNAME que corresponda ao nome canônico da distribuição de destino. Seu registro TXT deve incluir um sublinhado antes do CNAME, Apex ou Curinga:

_.example.com.         900   IN   TXT     "dexample123456.cloudfront.net"
_cname.example.com.    900   IN   TXT     "dexample123456.cloudfront.net"
_*.example.com.        900   IN   TXT     "dexample123456.cloudfront.net"

4.    Verifique se a distribuição de destino tem um certificado SSL válido.

Observação: o nome do assunto ou nome alternativo do assunto deve corresponder ou se sobrepor ao alias do CNAME fornecido. É uma prática recomendada ter um certificado válido emitido por uma CA confiável que esteja listada na lista de certificados CA da Mozilla ou no AWS Certificate Manager.

5.    Execute a solicitação da API AssociateAlias na conta que possui a distribuição de destino:

$ aws cloudfront associate-alias --target-distribution-id YourTargeDistributiontID --alias your_cname.example.com

Desativar a distribuição de origem com o CNAME conflitante

Se sua distribuição de origem e distribuição de destino estiverem em contas diferentes da AWS, primeiro desative a distribuição de origem associada ao domínio conflitante. Em seguida, use a API AssociateAlias para mover o CNAME.

Você pode usar o comando associate-alias para mover domínios do Apex entre diferentes contas da AWS

1.    Abra o console do CloudFront.

2.    No painel de navegação, escolha Distribuições

3.    Selecione a distribuição de origem e escolha Desativar.

Se você não sabe qual distribuição tem o CNAME conflitante, use a API ListConflictingAliases para encontrar essa distribuição. Substitua YourDistributionID pela ID da sua distribuição e YourCNAME pelo nome do CNAME conflitante:

$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME

Observação: A API ListConflictingAliases exige as permissões GetDistribution e ListConflictingAliases.

Depois de desativar a distribuição de origem, siga as etapas na seção Usar a API AssociateAlias para mover sua seção CNAME.

Se você não tiver acesso à conta da AWS com a distribuição de origem ou se não conseguir desativar a distribuição de origem, entre em contato com o AWS Support.

Usar um curinga para mover o nome de domínio alternativo

Se sua distribuição de origem e distribuição de destino estiverem em contas diferentes, mas você não puder desativar a distribuição de origem, mova o CNAME. Para fazer isso, use um curinga. Você deve ter acesso à distribuição de origem e à distribuição de destino para esse processo.

Esse processo envolve várias atualizações nas distribuições de origem e de destino. Aguarde até que cada distribuição implante totalmente a alteração mais recente antes de prosseguir para a próxima etapa.

1.    Atualize a distribuição de destino para adicionar um CNAME curinga que cubra o nome de domínio alternativo que você deseja mover. Se seu domínio for www.exemplo.com, adicione o nome de domínio alternativo curinga *.exemplo.com à distribuição de destino.

Observação: você deve ter um certificado SSL/TLS na distribuição de destino que proteja o nome de domínio curinga

2.    Atualize as configurações de DNS do CNAME para apontar para o nome canônico da distribuição de destino. Por exemplo, se seu domínio for www.exemplo.com, atualize o registro DNS de www.exemplo.com para direcionar o tráfego para o nome canônico da distribuição de destino:

www.example.com.         86400   IN   CNAME     "dexample123456.cloudfront.net"

Observação: Mesmo depois de atualizadas as configurações de DNS, a distribuição de origem atende às solicitações que usam o nome de domínio alternativo. Isso ocorre porque o nome de domínio alternativo ainda está associado à distribuição de origem.

3.    Atualize a distribuição de origem para remover o nome de domínio alternativo.

Observação: durante essa etapa, não há interrupção no tráfego ao vivo. Como o nome de domínio solicitado corresponde ao domínio curinga adicionado à distribuição de destino, o tráfego ao vivo usa as configurações de distribuição de destino.

4.    Para adicionar o nome de domínio alternativo que você deseja mover, atualize a distribuição de destino.

5.    Para validar o registro DNS para o CNAME, use dig ou uma ferramenta de consulta ao DNS semelhante:

dig CNAME www.example.com +short
nslookup example.com

6.    (Opcional) Para remover o nome de domínio alternativo curinga, atualize a distribuição de destino.

AWS OFICIAL
AWS OFICIALAtualizada há um ano