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

5 minutos de lectura
0

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

Resolución

Requisitos previos:

  • Utilice el indicador Exportar: en la sección Salidas de la plantilla de CloudFormation.
  • Use Fn::ImportValue en la pila en la que hace referencia al valor exportado.

Para resolver problemas con las referencias de pila cuando usa valores de importación y exportación, realice las siguientes acciones.

Si usa pilas anidadas, use DependsOn

De forma predeterminada, CloudFormation crea todas las pilas anidadas en paralelo. Cuando CloudFormation crea pilas secundarias en paralelo y una pila secundaria importa una salida de otra, es posible que no se pueda crear la pila. Es posible que el valor de exportación no esté disponible a tiempo para que la pila secundaria utilice Fn::ImportValue para importarlo.

Para resolver este problema, use el atributo DependsOn. Este atributo crea una dependencia explícita entre la pila que usa Fn::ImportValue y la pila que usa el atributo Export: para exportar un valor. De esta forma, CloudFormation crea la pila que usa Fn::ImportValue solo después de crear la pila que exporta el valor.

Ejemplo: En una pila anidada, ChildStack01 exporta un valor en la sección Salidas y ChildStack02 usa Fn::ImportValue para importar el valor de ChildStack01. En la siguiente plantilla YAML, ChildStack02 usa el atributo DependsOn:

AWSTemplateFormatVersion: 2010-09-09Resources:
 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'

Nota: Para referencias entre pilas, utilice Fn::ImportValue para importar un valor de otra plantilla. Para las referencias dentro de la misma pila, use Fn::Ref y Fn::GetAtt para devolver el valor del parámetro o recurso especificado.

Verificar el nombre de exportación en la pila de importación

Para comprobar que el valor de exportación es correcto, tome las siguientes medidas:

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

Asegúrese de que el valor exportado esté en la misma región de AWS o en la misma cuenta en la que está importando el valor

Puede usar referencias cruzadas solo en una sola cuenta y región. Pero otras pilas que estén en la misma cuenta y región solo pueden importar los valores exportados.

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

Asegúrese de que el valor exportado se crea o se 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 el estado Create_Complete o Update_Complete.

Antes de crear la pila con Complete los pasos de la sección Fn::ImportValue, consulte la sección Verifique la configuración de la pila de las pilas de exportación e importación.

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

Para comprobar que el valor de exportación está listo para importarse, utilice la consola de CloudFormation o la interfaz de línea de comandos de AWS (AWS CLI).

Nota: Las pilas de importación y exportación deben estar en la misma región y cuenta.

Para usar la consola de CloudFormation, siga estos pasos:

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

Para usar la AWS CLI, siga estos pasos:

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

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

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

  2. En el resultado, verifique que el valor de Nombre en la exportación sea el mismo que el valor de Fn::ImportValue.

    El resultado es similar al de este ejemplo:

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

Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

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. Para obtener información sobre cómo utilizar una solución alternativa, consulte How do I use parameters in AWS Systems Manager Parameter Store to share values between CloudFormation stacks? Tenga en cuenta que el nombre de exportación debe ser único dentro de la región.

La declaración de importación de la pila que importa la información es similar a la de este ejemplo:

Resources:
  WebServerInstance:
    Type: 'AWS::EC2::Instance'
    Properties:
      InstanceType: t2.micro
      ImageId: ami-a1b23456
      NetworkInterfaces:
          AssociatePublicIpAddress: 'true'
          DeviceIndex: '0'
          DeleteOnTermination: 'true'
          SubnetId: Fn::ImportValue: 'private-vpc-subnet-a'
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 meses