Como resolvo o erro “Uma ou mais de suas origens ou grupos de origem não existem” no CloudFormation?

3 minuto de leitura
0

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:

  1. Abra o recurso AWS::CloudFront::Distribution no modelo do CloudFormation.
  2. 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.
  3. 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

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses