Quando provo a creare o aggiornare uno stack AWS CloudFormation che contiene una distribuzione Amazon CloudFront, ricevo il seguente errore: "Una o più delle tue origini o gruppi di origine non esistono."
Breve descrizione
Questo errore si verifica quando la proprietà TargetOriginId di CacheBehavior o DefaultCacheBehavior non corrisponde a un ID di origine o a un gruppo di origine CloudFront. Questo ID è una stringa definita dall'utente che identifica in modo univoco un'origine o un gruppo di origine. Devi definire il gruppo di origine nel modello e gestire le tue risorse tramite CloudFormation.
Suggerimento: è consigliabile evitare di apportare modifiche alle risorse dello stack esterne a CloudFormation. Ciò può creare una mancata corrispondenza tra il modello dello stack e lo stato attuale delle risorse dello stack. Quando aggiorni o elimini lo stack, la mancata corrispondenza può causare errori.
Risoluzione
1. Verifica che TargetOriginId corrisponda all'ID di una delle origini o dei gruppi di origine definiti. Immetti l'ID di origine corretto come parametro per DefaultCacheBehavior o CacheBehavior.
Nel seguente esempio di frammenti del modello JSON e YAML, DefaultCacheBehavior definisce e utilizza una distribuzione CloudFront con un'unica origine. Inoltre, l'origine utilizza un'identità di accesso all'origine (OAI) per l'autenticazione. Negli esempi, l'ID di origine è impostato su 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"
}
}
}
}
}
}
Nota: sostituisci my-s3-origin con il tuo ID di origine, my-s3-bucket.s3.amazonaws.com con il tuo nome di dominio e /my-content con il tuo percorso di 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. Prova la tua distribuzione CloudFront per verificare che lo stack CloudFormation sia stato creato o aggiornato.
Informazioni correlate
Utilizzo di origini diverse con le distribuzioni CloudFront
Creazione di uno stack nella console AWS CloudFormation
Migliori pratiche di AWS CloudFormation