Cuando intento crear o actualizar una pila de AWS CloudFormation que contiene una distribución de Amazon CloudFront, obtengo el siguiente error: «One or more of your origins or origin groups do not exist».
Breve descripción
Este error se produce cuando la propiedad TargetOriginId de CacheBehavior o DefaultCacheBehavior no coincide con un origen de CloudFront o un ID de grupo de orígenes. Este ID es una cadena definida por el usuario que identifica de forma unívoca un origen o grupo de orígenes. Debe definir el grupo de origen en la plantilla y administrar sus recursos a través de CloudFormation.
Consejo: Es una de las prácticas recomendadas evitar realizar cambios en los recursos de la pila fuera de CloudFormation. Esto puede crear un desajuste entre la plantilla de su pila y el estado actual de sus recursos de pila. Cuando actualice o elimine la pila, el desajuste puede provocar errores.
Resolución
1. Confirme que TargetOriginId coincide con el ID de uno de los orígenes o grupos de orígenes definidos. Introduzca el ID de origen correcto como parámetro para DefaultCacheBehavior o CacheBehavior.
En los siguientes fragmentos de ejemplo de plantillas JSON y YAML, DefaultCacheBehavior define y consume una distribución de CloudFront con un único origen. Además, el origen utiliza una identidad de acceso de origen (OAI) para la autenticación. En los ejemplos, el ID de origen se establece en 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: Sustituya my-s3-origin por su ID de origen, my-s3-bucket.s3.amazonaws.com por su nombre de dominio y /my-content por su ruta de origen.
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. Compruebe su distribución de CloudFront y verifique que su pila de CloudFormation se ha creado o actualizado.
Información relacionada
Uso de varios orígenes con distribuciones de CloudFront
Creating a stack on the AWS CloudFormation console
AWS CloudFormation best practices