AWS CloudFormation の「1 つ以上のオリジンまたはオリジングループが存在しない」というエラーを解決するにはどうすればよいですか?

最終更新日: 2020 年 6 月 19 日

Amazon CloudFront ディストリビューションを含む AWS CloudFormation スタックを作成または更新しようとすると、AWS CloudFormation から「1 つ以上のオリジンまたはオリジングループが存在しません」というエラーが表示されます。 このエラーを解決するにはどうすればよいですか?

簡単な説明

CacheBehavior または DefaultCacheBehaviorTargetOriginId プロパティが CloudFront のオリジンまたはオリジングループの ID と一致しない場合、AWS CloudFormation からこのエラーを受け取ります。この ID は、オリジンまたはオリジングループを一意に識別するユーザー定義の文字列です。

AWS CloudFormation がオリジングループをサポートする前に、オリジングループを手動で作成し、TargetOriginId でオリジングループを参照できます。ここで、テンプレートでオリジングループを定義し、AWS CloudFormation 経由ですべてのリソースを管理する必要があります。

ヒント: ベストプラクティスとして、AWS CloudFormation の外部でスタックリソースを変更しないようにします。外部で変更すると、スタックのテンプレートとスタックリソースの現在の状態との間に不一致が生じる可能性があります。スタックを更新または削除すると、不一致によりエラーが発生する可能性があります。

解決方法

1.    TargetOriginId が定義済みのオリジンまたはオリジングループの 1 つの ID と一致することを確認するために、DefaultCacheBehavior または CacheBehavior のパラメータとして正しいオリジン ID を入力します。

次の JSON および YAML テンプレートスニペットの例では、単一のオリジンを持つ CloudFront ディストリビューションが DefaultCacheBehavior によって定義され、消費されています。さらに、このオリジンは認証に オリジンアクセスアイデンティティ (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.    AWS CloudFormation スタックが作成または更新されたことを確認するために、CloudFront ディストリビューションをテストします。