Lorsque j'essaie de créer ou de mettre à jour une pile AWS CloudFormation qui contient une distribution Amazon CloudFront, l'erreur suivante s'affiche :
« One or more of your origins or origin groups do not exist. » (Un ou plusieurs de vos groupes d'origine ou origines n'existent pas)
Brève description
Cette erreur se produit 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. Vous devez définir le groupe d'origine dans le modèle et gérer vos ressources via CloudFormation.
Conseil : une bonne pratique consiste à éviter d'apporter des modifications aux ressources de la pile en dehors de 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. Vérifiez que le TargetOriginId correspond à l'ID de l'une des origines ou groupes d'origine définis. Saisissez l'ID d'origine correct en tant que 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, my-s3-bucket.s3.amazonaws.com par votre nom de domaine et /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 CloudFormation a bien été créée ou mise à jour, testez votre distribution CloudFront.
Informations connexes
Utilisation de différentes origines avec les distributions CloudFront
Création d'une pile dans la console AWS CloudFormation
Bonnes pratiques concernant AWS CloudFormation