Como resolvo o erro “Nenhuma exportação chamada XYZ encontrada” no CloudFormation?

5 minuto de leitura
0

Eu recebo o erro “Nenhuma exportação chamada XYZ encontrada” no AWS CloudFormation ao usar Fn::ImportValue em minha pilha.

Breve descrição

Se você criar uma referência de pilha no CloudFormation que usa valores de importação ou exportação, deverá fazer o seguinte:

  • Na pilha em que está exportando um valor, use o sinalizador Exportar: na seção Saídas do modelo do CloudFormation.
  • Na pilha em que você deseja fazer referência ao valor exportado, use Fn::ImportValue.

Você pode receber o erro “Nenhuma exportação chamada XYX encontrada” nos seguintes cenários:

  • Você está usando Fn::ImportValue em pilhas aninhadas.
  • O valor exportado não está na mesma região da AWS ou na mesma conta da AWS em que você está importando o valor.
  • O valor exportado não foi criado ou publicado antes que a pilha o importe.
  • Você usou um nome de exportação incorreto na pilha de importação.

Escolha uma das soluções a seguir de acordo com a situação que você está enfrentando.

Solução

Observação: se receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se você está usando sua versão mais recente.

Você está usando Fn::ImportValue em pilhas aninhadas

Por padrão, o CloudFormation cria pilhas filhas em paralelo com pilhas aninhadas. Se forem criadas pilhas filhas em paralelo e uma delas estiver importando uma saída de outra, a criação da pilha poderá falhar. O valor de exportação corre o risco de não estar disponível a tempo de ser importado pela outra pilha filha.

Para resolver esse problema, use o atributo DependsOn para criar uma dependência explícita para a pilha que está usando Fn::ImportValue. Então, a pilha filha que está usando Fn:ImportValue será criada somente depois da pilha filha que exporta o valor.

No exemplo de pilha aninhada a seguir, ChildStack01 exporta um valor na seção Saídas e ChildStack02 usa Fn::ImportValue para importar o valor de ChildStack01. Você pode usar DependsOn para ChildStack02 com base no seguinte modelo YAML de exemplo:

AWSTemplateFormatVersion: 2010-09-09
Resources:
 ChildStack01:
   Type: 'AWS::CloudFormation::Stack'
   Properties:
     TemplateURL: 'https://s3.amazonaws.com/cloudformation-templates-us-east-1/VPC.template'
     TimeoutInMinutes: '60'
 ChildStack02:
   Type: 'AWS::CloudFormation::Stack'
   DependsOn: ChildStack01
   Properties:
     TemplateURL: 'https://s3.amazonaws.com/cloudformation-templates-us-east-1/Subnet.template'
     TimeoutInMinutes: '60'

Dica: para referências entre pilhas, use Fn::ImportValue para importar um valor de outro modelo. Para pilhas aninhadas, use Fn::Ref e Fn::GetAtt para fazer referência ao valor em seu modelo atual.

O valor exportado não está na mesma região da AWS ou na mesma conta da AWS em que você está importando o valor

As referências entre pilhas aplicam-se somente em uma única conta e região. Outras pilhas que estão na mesma conta e região podem importar somente os valores exportados.

Para resolver esse problema, execute as etapas da seção Verifique a configuração das pilhas de exportação e importação antes de criar a pilha com Fn::ImportValue.

O valor exportado não foi criado ou publicado antes que a pilha o importe

Para pilhas não aninhadas, você deve implantar a pilha que está exportando um valor. A pilha deve estar no estado Create_Complete ou Update_Complete antes da criação da pilha que está sendo importada.

Para resolver esse problema, execute as etapas da seção Verifique a configuração das pilhas de exportação e importação antes de criar a pilha com Fn::ImportValue.

Você usou o nome de exportação incorreto na pilha de importação

  1. Confirme se o nome de exportação está em sua conta.
  2. Ao importar um nome de exportação de uma pilha para outra, confirme se você está usando exatamente o mesmo nome de exportação em ambas as pilhas.
  3. Execute as etapas da seção Verificar a configuração das pilhas de exportação e importação antes de criar a pilha com Fn::ImportValue.

Verificar a configuração das pilhas de exportação e importação

Você pode usar o console do CloudFormation ou a AWS CLI para confirmar se o valor da exportação existe na mesma região e conta.

Como usar o console do CloudFormation:

  1. Abrar o console do CloudFormation.
  2. No painel de navegação, escolha Exportações.
  3. Confirme se o valor da exportação aparece no console.

Usando a AWS CLI:

1.    Para listar as exportações disponíveis, execute o seguinte comando:

aws cloudformation list-exports --region us-east-1

Observação: substitua us-east-1 pela sua região.

2.    Na saída, verifique se a propriedade Name é a mesma para as pilhas de importação e de exportação. A saída é semelhante à seguinte:

aws cloudformation list-exports --region us-east-1 --output yaml
Exports:
- ExportingStackId: arn:aws:cloudformation:us-east-1:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800
  Name: private-vpc-subnet-a
  Value: subnet-01a234bcdefghij56

Importante: ao usar valores de importação e exportação em suas pilhas, considere o seguinte: Depois que uma pilha importa um valor de saída, você não pode excluir a pilha que está exportando o valor de saída nem modificar o valor de saída exportado. Você deve remover todas as importações antes de excluir a pilha de exportação ou modificar o valor de saída. O nome da exportação deve ser exclusivo na região. Como alternativa, você pode usar parâmetros do AWS Systems Manager Parameter Store para compartilhar valores entre pilhas do CloudFormation.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos