Cuando intento usar AWS CloudFormation para actualizar un recurso AWS::CloudFront::Distribution, recibo el siguiente error: "One or more of your origins or origin groups do not exist."
Resolución
El TargetOriginId de CacheBehavior o DefaultCacheBehavior debe coincidir con un Id de la propiedad Origin u OriginGroups en el recurso AWS::CloudFront::Distribution. Si los ID no coinciden, recibirás el error origins or origin groups do not exist.
Este error se produce cuando se establece el TargetOriginId de un origen que no existe o que se creó fuera de CloudFormation. En una operación de actualización, CloudFormation elimina todos los orígenes y grupos de origen de la distribución que creaste fuera de CloudFormation. Si estás utilizando el origen o el grupo de origen cuando CloudFormation intente eliminarlo, recibirás el error.
**Nota:**Se recomienda no modificar los recursos de la pila fuera de CloudFormation. Las modificaciones realizadas fuera de CloudFormation pueden crear una discrepancia entre la plantilla de la pila y el estado actual de los recursos de la pila.
Para resolver este problema, sigue los siguientes pasos:
- Abre el recurso de AWS::CloudFront::Distribution en la plantilla de CloudFormation.
- Asegúrate de que cada TargetOriginId coincida con el ID de uno de los orígenes o grupos de orígenes definidos en las propiedades Origins u OriginGroups. Si el ID no coincide, introduce el ID de origen correcto como parámetro para DefaultCacheBehavior o CacheBehavior.
En los siguientes fragmentos de ejemplo de plantillas, DefaultCacheBehavior define y usa una distribución de CloudFront con un único origen. Además, el origen usa una identidad de acceso de origen (OAI) para la autenticación y el origen es Amazon Simple Storage Service (Amazon S3).
Ejemplo de 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"
}
}
}
}
}
}
Ejemplo de 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}
Nota: En los ejemplos anteriores, sustituye my-s3-origin por el ID de origen, my-s3-bucket.s3.amazonaws.com por el nombre de dominio y /my-content por la ruta de origen.
- Prueba la distribución de CloudFront y verifica que la pila de CloudFormation se ha creado o actualizado.
Información relacionada
Uso de varios orígenes con distribuciones de CloudFront
Creación de una pila en la consola de CloudFormation
Prácticas recomendadas de AWS CloudFormation