AWS CloudFormation에서 "One or more of your origins or origin groups do not exist" 오류를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 8월 18일

Amazon CloudFront 배포를 포함한 AWS CloudFormation 스택을 생성하거나 업데이트하려고 하면 다음 오류가 발생합니다.

"One or more of your origins or origin groups do not exist."

간략한 설명

이 오류는 CacheBehavior 또는 DefaultCacheBehaviorTargetOriginId 속성이 CloudFront 오리진이나 오리진 그룹 ID와 일치하지 않을 경우 발생합니다. 이 ID는 오리진 또는 오리진 그룹을 고유하게 식별하는 사용자 정의 문자열입니다. 오리진 그룹을 템플릿에서 정의한 다음 CloudFormation을 통해 리소스를 관리해야 합니다.

: CloudFormation 외부의 스택 리소스를 변경하지 않는 것이 좋습니다. 변경할 경우 스택의 템플릿과 스택 리소스의 현재 상태 사이에 불일치가 발생할 수 있습니다. 스택을 업데이트하거나 삭제하면 불일치 때문에 오류가 발생할 수 있습니다.

해결 방법

1.    TargetOriginId가 정의된 오리진 또는 오리진 그룹 중 하나의 ID와 일치하는지 확인합니다. DefaultCacheBehavior 또는 CacheBehavior에 대한 파라미터로 올바른 오리진 ID를 입력합니다.

다음의 예제 JSON 및 YAML 템플릿 스니펫에서는 DefaultCacheBehavior가 단일 오리진을 포함한 CloudFront 배포를 정의하고 사용합니다. 또한 이 오리진은 인증을 위해 오리진 액세스 ID(OAI)를 사용합니다. 해당 예제에서 오리진 ID는 my-s3-origin으로 설정되어 있습니다.

JSON:

{
  "AWSTemplateFormatVersion": "2010-09-09T00:00:00.000Z",
  "Resources": {
    "cloudfrontdistribution": {
      "Type": "AWS::CloudFront::Distribution",
      "Properties": {
        "DistributionConfig": {
          "DefaultCacheBehavior": {
            "ViewerProtocolPolicy": "https-only",
            "DefaultTTL": 3600,
            "ForwardedValues": {
              "Cookies": {
                "Forward": "none"
              },
              "QueryString": true
            },
            "TargetOriginId": "my-s3-origin"
          },
          "Enabled": true,
          "Origins": [
            {
              "DomainName": "my-s3-bucket.s3.amazonaws.com",
              "Id": "my-s3-origin",
              "S3OriginConfig": {
                "OriginAccessIdentity": {
                  "Fn::Sub": "origin-access-identity/cloudfront/${CloudFrontOriginAccessIdentity}"
                }
              },
              "OriginPath": "/my-content"
            }
          ]
        }
      }
    },
    "CloudFrontOriginAccessIdentity": {
      "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity",
      "Properties": {
        "CloudFrontOriginAccessIdentityConfig": {
          "Comment": {
            "Ref": "AWS::StackName"
          }
        }
      }
    }
  }
}

참고: my-s3-origin을 오리진 ID로, my-s3-bucket.s3.amazonaws.com을 도메인 이름으로, /my-content를 오리진 경로로 바꿉니다.

YAML:

AWSTemplateFormatVersion: 2010-09-09
Resources:
  cloudfrontdistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        DefaultCacheBehavior:
          ViewerProtocolPolicy: https-only
          DefaultTTL: 3600
          ForwardedValues:
            Cookies:
              Forward: none
            QueryString: true
          TargetOriginId: my-s3-origin
        Enabled: true
        Origins:
          - DomainName: 'my-s3-bucket.s3.amazonaws.com'
            Id: my-s3-origin
            S3OriginConfig:
              OriginAccessIdentity: !Sub origin-access-identity/cloudfront/${CloudFrontOriginAccessIdentity}
            OriginPath: /my-content
          
  CloudFrontOriginAccessIdentity:
    Type: AWS::CloudFront::CloudFrontOriginAccessIdentity
    Properties:
      CloudFrontOriginAccessIdentityConfig:
        Comment: !Sub ${AWS::StackName}

2.    CloudFormation 스택이 생성되었거나 업데이트되었는지 확인하려면 CloudFront 배포를 테스트합니다.