Comment résoudre l'erreur « Un ou plusieurs de vos groupes d'origine ou origines n'existent pas » dans AWS CloudFormation ?

Date de la dernière mise à jour : 19/06/2020

Lorsque j'essaie de créer ou de mettre à jour une pile AWS CloudFormation qui contient une distribution Amazon CloudFront, j'obtiens l'erreur suivante d'AWS CloudFormation : « Un ou plusieurs de vos groupes d'origine ou origines n'existent pas ». Comment puis-je résoudre cette erreur ?

Brève description

Vous obtenez cette erreur d'AWS CloudFormation lorsque la propriété TargetOriginId de CacheBehavior ou DefaultCacheBehavior ne correspond pas à un ID d'origine ou de groupe d'origine CloudFront. Cet ID est une chaîne définie par l'utilisateur qui identifie de façon unique une origine ou un groupe d'origine.

Avant qu'AWS CloudFormation ne prenne en charge les groupes d'origine, vous pouviez créer un groupe d'origine manuellement et le référencer sur TargetOriginId. Désormais, vous devez définir un groupe d'origine dans le modèle et gérer toutes vos ressources via AWS CloudFormation.

Astuce : une bonne pratique consiste à éviter d'apporter des modifications aux ressources de pile en dehors d'AWS CloudFormation. Cela peut créer une incompatibilité entre le modèle de votre pile et l'état actuel des ressources de votre pile. Si vous mettez à jour ou supprimez la pile, l'incompatibilité peut engendrer des erreurs.

Solution

1.    Pour confirmer que TargetOriginId correspond à l'ID de l'une des origines ou l'un des groupes d'origine définis, saisissez l'ID d'origine correct comme paramètre pour DefaultCacheBehavior ou CacheBehavior.

Dans les exemples suivants d'extraits de modèle JSON et YAML, une distribution CloudFront avec une seule origine est définie et consommée par DefaultCacheBehavior. De plus, cette origine utilise une identité d'accès d'origine (OAI) pour l'authentification. Dans les exemples, l'ID d'origine est défini sur 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" }
                }
            }
        }
    }
}

Remarque : remplacez my-s3-origin par votre ID d'origine. Remplacez my-s3-bucket.s3.amazonaws.com par votre nom de domaine. Remplacez /my-content par votre chemin d'origine.

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.    Pour vérifier que votre pile AWS CloudFormation a bien été créée ou mise à jour, testez votre distribution CloudFront.