Quando tento usar o AWS CloudFormation para atualizar um recurso do AWS::CloudFront::Distribution, recebo o seguinte erro: “Uma ou mais de suas origens ou grupos de origem não existem.”
Resolução
O targetOriginId de CacheBehavior ou DefaultCacheBehavior deve corresponder a um ID da propriedade Origin ou OriginGroups no recurso AWS::CloudFront::Distribution. Se os IDs não corresponderem, você receberá o erro origens ou grupos de origem não existem.
Esse erro ocorre quando você define o targetOriginID de uma origem que não existe ou que você criou fora do CloudFormation. Em uma operação de atualização, o CloudFormation exclui todas as origens e grupos de origem na distribuição que você criou fora do CloudFormation. Se você estiver usando a origem ou o grupo de origem quando o CloudFormation tentar excluí-lo, você receberá o erro.
Observação: é uma prática recomendada não modificar os recursos da pilha fora do CloudFormation. Modificações fora do CloudFormation podem criar uma incompatibilidade entre o modelo da sua pilha e o estado atual dos seus recursos da pilha.
Para solucionar esse problema, realize as etapas a seguir:
- Abra o recurso AWS::CloudFront::Distribution no modelo do CloudFormation.
- Certifique-se de que cada targetOriginID corresponda ao ID de uma das origens ou grupos de origem definidos nas propriedades Origins ou OriginGroups. Se o ID não corresponder, insira o ID da origem correto como parâmetro para DefaultCacheBehavior ou CacheBehavior.
No exemplo a seguir de trechos de modelos, DefaultCacheBehavior define e usa uma distribuição do CloudFront com uma única origem. Além disso, a origem usa uma identidade do acesso de origem (OAI) para autenticação e a origem é Amazon Simple Storage Service (Amazon S3).
Exemplo 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"
}
}
}
}
}
}
Exemplo 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}
Observação: No exemplos anteriores, substitua my-s3-origin pelo seu ID de origem, my-s3-bucket.s3.amazonaws.com pelo seu nome de domínio e /my-content pelo seu caminho de origem.
- Teste sua distribuição do CloudFront para verificar se sua pilha do CloudFormation foi criada ou atualizada.
Informações relacionadas
Usar várias origens com distribuições do CloudFront
Criar uma pilha a partir do console do CloudFormation
Práticas recomendadas do AWS CloudFormation