¿Cómo puedo resolver el error «No se ha encontrado ninguna exportación con el nombre XYZ» en CloudFormation?

5 minutos de lectura
0

Recibo el error «No se ha encontrado ninguna exportación con el nombre XYZ» en AWS CloudFormation cuando utilizo Fn::ImportValue en mi pila.

Breve descripción

Si crea una referencia de pila en CloudFormation que utilice valores de importación o exportación, debe hacer lo siguiente:

  • En la pila en la que va a exportar un valor, utilice el indicador Exportar: en la sección Salidas de la plantilla de CloudFormation.
  • En la pila en la que desea hacer referencia al valor exportado, utilice Fn::ImportValue.

Puede aparecer el error «No se ha encontrado ninguna exportación con el nombre XYX» en las siguientes situaciones:

  • Está usando Fn::ImportValue en pilas anidadas.
  • El valor exportado no se encuentra en la misma región de AWS ni en la misma cuenta de AWS en la que está importando el valor.
  • El valor exportado no se crea ni publica antes de que la pila lo importe.
  • Ha utilizado un nombre de exportación incorrecto en la pila de importación.

Elija una de las siguientes resoluciones en función de la situación en la que se encuentre.

Resolución

Nota: Si recibe errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

Está usando Fn::ImportValue en pilas anidadas

De forma predeterminada, CloudFormation crea pilas secundarias en paralelo con las pilas anidadas. Si las pilas secundarias se crean en paralelo y una de ellas importa una salida de otra, la creación de la pila puede fallar. El valor de exportación corre el riesgo de no estar disponible a tiempo para ser importado por la otra pila secundaria.

Para resolver este problema, utilice el atributo DependsOn para crear una dependencia explícita para la pila que usa Fn::ImportValue. La pila secundaria que usa Fn:ImportValue se crea entonces solo después de la pila secundaria que exporta el valor.

En el siguiente ejemplo de pila anidada, ChildStack01 exporta un valor en la sección Salidas y ChildStack02 usa Fn::ImportValue para importar el valor de ChildStack01. Puede usar DependsOn para ChildStack02 basándose en el siguiente ejemplo de plantilla YAML:

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'

Consejo: Para referencias entre pilas, utilice Fn::ImportValue para importar un valor de otra plantilla. Para pilas anidadas, utilice Fn::Ref y Fn::GetAtt para hacer referencia al valor de la plantilla actual.

El valor exportado no se encuentra en la misma región de AWS ni en la misma cuenta de AWS en la que está importando el valor

Las referencias cruzadas solo se aplican a una sola cuenta y región. Otras pilas que estén en la misma cuenta y región solo pueden importar los valores exportados.

Para resolver este problema, complete los pasos de la sección Verifique la configuración de la pila de las pilas de exportación e importación antes de crear la pila con Fn::ImportValue.

El valor exportado no se crea ni publica antes de que la pila lo importe

En el caso de las pilas no anidadas, debe implementar la pila que exporta un valor. La pila debe estar en los estados Create_Complete o Update_Complete antes de crear la pila que se va a importar.

Para resolver este problema, complete los pasos de la sección Verifique la configuración de la pila de las pilas de exportación e importación antes de crear la pila con Fn::ImportValue.

Ha utilizado un nombre de exportación incorrecto en la pila de importación

  1. Confirme que el nombre de exportación aparezca en su cuenta.
  2. Al importar un nombre de exportación de una pila a otra, confirme que utiliza exactamente el mismo nombre de exportación en ambas pilas.
  3. Complete los pasos de la sección Verifique la configuración de la pila de las pilas de exportación e importación antes de crear la pila con Fn::ImportValue.

Verifique la configuración de pila de las pilas de exportación e importación

Puede utilizar la consola de CloudFormation o la AWS CLI para comprobar que el valor de exportación existe en la misma región y cuenta.

Mediante la consola de CloudFormation:

  1. Abra la consola de CloudFormation.
  2. En el panel de navegación, seleccione Exportaciones.
  3. Confirme que el valor de exportación aparezca en la consola.

Mediante la AWS CLI:

1.Para mostrar las exportaciones disponibles, ejecute el siguiente comando:

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

Nota: Sustituya us-east-1 por su región.

2.En la salida, compruebe que la propiedad Nombre sea la misma tanto para la pila de importación como para la de exportación. El resultado es similar al siguiente:

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: Cuando utilice valores de importación y exportación en sus pilas, tenga en cuenta lo siguiente: Después de que una pila importe un valor de salida, no puede eliminar la pila que exporta el valor de salida ni modificar el valor de salida exportado. Debe eliminar todas las importaciones antes de poder eliminar la pila de exportación o modificar el valor de salida. El nombre de exportación debe ser único dentro de la región. Como solución alternativa, puede utilizar los parámetros del Almacén de parámetros de AWS Systems Manager para compartir valores entre pilas de CloudFormation.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años