CloudFront 배포에 대한 CNAME 별칭을 설정할 때 CNAMEAlreadyExists 오류를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon CloudFront 배포에 대한 캐노니컬 네임 레코드(CNAME) 별칭을 설정할 때, "CNAMEAlreadyExists"라는 오류가 발생합니다.

간단한 설명

한 개 이상의 CloudFront 배포에 대해 같은 CNAME 별칭을 사용할 수 없습니다. 추가하려는 CNAME 별칭이 이미 다른 CloudFront 배포와 연결되어 있으면 다음 오류가 발생합니다.

"One or more of the CNAMEs you provided are already associated with a different resource. (Service: AmazonCloudFront; Status Code: 409; Error Code: CNAMEAlreadyExists; Request ID: a123456b-c78d-90e1-23f4-gh5i67890jkl*"

소스 및 대상 배포에 모두 액세스할 수 있는 경우, 기존 CloudFront 배포에서 CNAME 연결을 수동으로 제거합니다. 그런 다음, CNAME을 새 CloudFront 배포와 연결합니다.

참고: CNAME을 수동으로 연결하려면 이전 배포의 상태가 배포됨이 될 때까지 기다렸다가 계속 진행해야 할 수도 있습니다.

배포 ID를 모르는 경우에는 ListConflictingAliases CloudFront API를 사용하십시오. 이를 통해 배포에 대한 일부 정보와 충돌하는 CNAME 별칭에 대한 AWS 계정 ID를 찾을 수 있습니다. 그런 다음, AssociateAlias API를 사용하여 사용자의 CNAME을 기존 배포(소스 배포) 에서 새 배포(대상 배포)로 이동합니다.

사용자의 시나리오에 따라 다음 해결 방법 중 하나를 사용합니다.

  • 같은 계정에 있는 소스 및 대상 배포의 경우, AssociateAlias API를 사용하여 사용자의 CNAME 이동 섹션을 참조하십시오.
  • 계정 간 소스 및 대상 배포에 대해서는 충돌하는 CNAME이 있는 소스 배포 비활성화 섹션을 참조하십시오.
  • 기존 트래픽의 정지 시간으로 인해 소스 배포를 비활성화할 수 없는 경우, 와일드카드를 사용하여 대체 도메인 이름 이동을 참조하십시오.
    참고: Apex 도메인(example.com)을 이동하는 데는 와일드카드를 사용할 수 없습니다. 소스 배포와 대상 배포가 서로 다른 계정에 있는 경우 Apex 도메인을 이동하려면 대체 도메인 이름을 이동하려면 AWS Support에 문의를 참조하십시오.

해결 방법

AssociateAlias API를 사용하여 사용자의 CNAME 이동

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

CNAME을 이동하려면 다음 단계를 완료합니다.

  1. API 요청을 보내는 사용자 또는 역할의 AWS Identity and Access Management(IAM) 정책에서 다음 리소스 수준 권한을 추가합니다.
    참고:****SourceAcccount을 소스 배포의 계정 번호로 바꿉니다. SourceDistroID를 소스 배포 ID로 바꿉니다. TargetAccountID를 대상 배포의 계정 번호로 바꿉니다. 대상 배포 ID로 바꾸십시오.

    {
      "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"
          ]
        }
      ]
    }

    중요: 요청을 보내는 IAM 사용자 또는 역할은 소스 배포와 대상 배포 모두에서 리소스 수준 권한을 가져야 합니다.

  2. 충돌하는 CNAME이 있는 배포를 식별하세요. 어느 배포에 충돌하는 CNAME이 있는지 모르는 경우 ListConflictingAliases API를 사용하여 해당 배포를 찾습니다.
    참고: YourDistributionID를 배포의 ID로 바꾸고 YourCNAME을 충돌하는 CNAME 별칭으로 바꾸십시오.

    $ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME
  3. 도메인의 소유권을 확인하려면 YourDistributionID에 대한 읽기 액세스가 있어야 합니다. 또한 충돌하는 CNAME을 보호하는 CloudFront 배포와 연결된 SSL/TLS 인증서가 있어야 합니다. 소유권을 확인할 준비가 되면 대상 배포의 정식 이름으로 확인한 CNAME용 DNS TXT 기록을 생성하십시오. 사용자의 TXT 기록에는 CNAME, Apex 또는 와일드카드 앞에 밑줄 표시가 포함되어야 합니다.

    _.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. 대상 배포에 유효한 SSL/TLS 인증서가 있는지 확인합니다.
    참고: 주체 이름 또는 주체 대체 이름은 CNAME 별칭과 일치하거나 겹쳐야 합니다. AWS Certificate Manager 또는 Mozilla의 CA 인증서 목록에 나열된 신뢰할 수 있는 CA에서 발급한 유효한 인증서를 사용하는 것이 모범 사례입니다. 자세한 내용은 Mozilla의 CA 인증 프로그램(Mozilla 웹 사이트)을 참조하십시오.

  5. 대상 배포를 소유한 계정에서 AssociateAlias API 요청을 실행합니다.

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

충돌하는 CNAME이 있는 소스 배포를 비활성화합니다

소스 배포와 대상 배포가 서로 다른 계정에 있는 경우 충돌하는 도메인과 연결된 소스 배포를 해제합니다. 그런 다음, AssociateAlias API를 사용하여 CNAME을 이동합니다.

associate-alias 명령을 사용하여 여러 계정 간에 Apex 도메인을 이동할 수 있습니다

  1. CloudFront 콘솔을 엽니다.
  2. 탐색 창에서 배포를 선택합니다
  3. 소스 배포를 선택한 다음, 비활성화를 선택합니다.
    **참고:**어느 배포에 충돌하는 CNAME이 있는지 모르는 경우 ListConflictingAliases API를 사용하여 해당 배포를 찾습니다. YourDistributionID를 사용자의 배포 ID로 바꾸고 YourCNAME를 충돌하는 CNAME의 이름으로 바꾸십시오.
    $ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME

참고: ListConflictingAliases API에는 GetDistributionListConflictingAliases 권한이 필요합니다.

소스 배포를 비활성화한 후에는 AssociateAlias API를 사용하여 사용자의 CNAME 이동 섹션에 있는 단계를 따르십시오.

소스 배포를 통해 계정에 액세스할 수 없거나 소스 배포를 비활성화할 수 없는 경우, AWS Support에 문의하십시오.

와일드카드를 사용하여 대체 도메인 이름 이동

소스 배포와 대상 배포가 서로 다른 계정에 있지만 소스 배포를 비활성화할 수 없는 경우 와일드카드를 사용하여 CNAME을 이동합니다. CNAME을 이동하려면 소스 배포와 대상 배포에 모두 액세스할 수 있어야 합니다.

이 프로세스에는 소스와 대상 배포 모두에 대한 여러 업데이트가 포함되어 있습니다. 다음 단계로 진행하기 전에 각 배포에서 최신 변경 사항이 완전히 배포될 때까지 기다립니다.

대체 도메인 네임을 이동하려면 다음 단계를 완료합니다.

  1. 대상 배포를 업데이트하여 사용자가 이동하려는 대체 도메인 이름을 포함하는 와일드카드 CNAME을 추가합니다. 사용자의 도메인이 www.example.com인 경우, 와일드카드 대체 도메인 이름 \ *.example.com을 대상 배포에 추가합니다.
    **참고:**대상 배포에는 와일드카드 도메인 이름을 보호하는 SSL/TLS 인증서가 있어야 합니다

  2. 대상 배포의 정식 이름을 가리키도록 CNAME의 DNS 설정을 업데이트하십시오. 예를 들어, 사용자의 도메인이 www.example.com인 경우 www.example.com의 DNS 기록을 업데이트하여 대상 배포의 정식 이름으로 트래픽을 라우팅합니다.

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

    참고: 대체 도메인 이름이 여전히 소스 배포에 연결되어 있기 때문에 소스 배포는 여전히 대체 도메인 이름을 사용하는 요청을 받습니다. 대상 배포는 3단계에서 소스 배포에서 대체 도메인 이름을 제거할 때까지 요청(컷오버)을 받지 않습니다.

  3. 소스 배포를 업데이트하여 대체 도메인 이름을 제거하십시오.
    참고: 이 단계에서는 라이브 트래픽이 중단되지 않습니다. 요청된 도메인 이름이 대상 배포에 추가된 와일드카드 도메인과 일치하므로 실시간 트래픽은 대상 배포 설정을 사용합니다.

  4. 사용자가 이동하려는 대체 도메인 이름을 추가하려면, 대상 배포를 업데이트하십시오.

  5. CNAME의 DNS 기록을 입증하려면, dig 또는 유사한 DNS 쿼리 도구를 사용하십시오.

    dig CNAME www.example.com +shortnslookup example.com
  6. (선택 사항) 와일드카드 대체 도메인 이름을 제거하려면, 대상 배포를 업데이트하십시오.

AWS 공식
AWS 공식업데이트됨 4달 전