Come posso risolvere l'errore "Nessuna esportazione denominata XYZ trovata" in CloudFormation?

5 minuti di lettura
0

Ricevo l'errore "Nessuna esportazione denominata XYZ trovata" in AWS CloudFormation quando utilizzo Fn::ImportValue nello stack.

Breve descrizione

Se in CloudFormation crei un riferimento allo stack che utilizza valori di importazione o esportazione, devi procedere come segue:

  • Nello stack in cui stai esportando un valore, usa il flag Export: nella sezione Output del modello CloudFormation.
  • Nello stack in cui vuoi fare riferimento al valore esportato, usa Fn::ImportValue.

Puoi ricevere l'errore "Nessuna esportazione denominata XYX trovata" nei seguenti scenari:

  • Stai usando Fn::ImportValue in stack annidati.
  • Il valore esportato non è nella stessa regione AWS o nello stesso account AWS in cui lo stai importando.
  • Il valore esportato non viene creato o pubblicato prima dell’importazione nello stack.
  • Nello stack di importazione hai utilizzato un nome errato per l’esportazione.

Scegli una delle seguenti risoluzioni in base allo scenario che riscontri.

Soluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell’interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Stai usando Fn::ImportValue in stack annidati

Per impostazione predefinita, CloudFormation crea stack figlio in parallelo a stack annidati. Se gli stack figlio vengono creati in parallelo tra loro e uno importa un output da un altro, la creazione dello stack può avere esito negativo. Il valore di esportazione rischia di non essere disponibile in tempo utile per essere importato dall'altro stack figlio.

Per risolvere questo problema, usa l'attributo DependsOn per creare una dipendenza esplicita per lo stack che utilizza Fn::ImportValue. Lo stack figlio che utilizza Fn:ImportValue viene quindi creato solo dopo lo stack figlio che esporta il valore.

Nel seguente esempio di stack annidato, ChildStack01 esporta un valore nella sezione Output e ChildStack02 utilizza Fn::ImportValue per importare il valore da ChildStack01. Puoi utilizzare DependsOn per ChildStack02 sulla base del seguente modello YAML di esempio:

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'

Suggerimento: Per i riferimenti tra stack, usa Fn::ImportValue per importare un valore da un altro modello. Per gli stack annidati, usa Fn::Ref e Fn::GetAtt per fare riferimento al valore nel modello corrente.

Il valore esportato non è nella stessa regione AWS o nello stesso account AWS in cui stai importando il valore

I riferimenti tra stack si applicano solo all'interno di un singolo account e di una singola regione. Gli altri stack nello stesso account e nella stessa regione possono importare solo i valori esportati.

Per risolvere questo problema, completa i passaggi nella sezione Verifica la configurazione dello stack di esportazione e importazione prima di creare lo stack con Fn::ImportValue.

Il valore esportato non viene creato o pubblicato prima dell’importazione nello stack

Per gli stack non annidati, è necessario implementare lo stack che esporta un valore. Lo stack deve essere nello stato Create_Complete o Update_Complete prima di creare lo stack che viene importato.

Per risolvere questo problema, completa i passaggi nella sezione Verifica la configurazione dello stack di esportazione e importazione prima di creare lo stack con Fn::ImportValue.

Hai utilizzato un nome errato per l’esportazione nello stack di importazione

  1. Verifica che il nome per l'esportazione sia elencato nel tuo account.
  2. Quando importi un nome per l’esportazione da uno stack a un altro, verifica di utilizzare lo stesso nome per l’esportazione in entrambi gli stack.
  3. Completa i passaggi nella sezione Verifica la configurazione dello stack di esportazione e importazione prima di creare lo stack con Fn::ImportValue.

Verifica la configurazione degli stack di esportazione e importazione

Per verificare che il valore di esportazione sia nella stessa regione e nello stesso account, è possibile utilizzare la console CloudFormation o AWS CLI.

Uso della console CloudFormation:

  1. Apri la console CloudFormation.
  2. Nel riquadro di navigazione, scegli Esportazioni.
  3. Verifica che il valore per l’esportazione sia elencato nella console.

Uso dell’interfaccia AWS CLI:

1.    Per elencare le esportazioni disponibili, esegui il seguente comando:

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

Nota: sostituisci us-east-1 con la tua regione.

2.    Nell'output, verifica che la proprietà Name sia la stessa sia per lo stack di importazione che per quello di esportazione. L'output è simile al seguente:

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: quando usi i valori di importazione e di esportazione negli stack, considera quanto segue: Una volta che lo stack ha importato un valore di output, non è possibile eliminare lo stack che esporta il valore di output né modificare il valore di output esportato. Prima di poter eliminare lo stack di esportazione o modificare il valore di output, è necessario rimuovere tutte le importazioni. Il nome per l’esportazione deve essere univoco all'interno della regione. Come soluzione alternativa, è possibile utilizzare i parametri nell'archivio dei parametri AWS Systems Manager per condividere valori tra gli stack di CloudFormation.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa