Wie behebe ich den Fehler „Kein Export mit dem Namen XYZ gefunden“ in CloudFormation?

Lesedauer: 4 Minute
0

Ich erhalte die Fehlermeldung „Kein Export mit dem Namen XYZ gefunden“ in AWS CloudFormation, wenn ich Fn::ImportValue in meinem Stack verwende.

Kurzbeschreibung

Wenn Sie in CloudFormation eine Stackreferenz erstellen, die Import- oder Exportwerte verwendet, müssen Sie wie folgt vorgehen:

  • Verwenden Sie in dem Stack, in dem Sie einen Wert exportieren, das Flag Export: im Abschnitt Outputs Ihrer CloudFormation-Vorlage.
  • Verwenden Sie in dem Stapel, in dem Sie den exportierten Wert referenzieren möchten, Fn::ImportValue.

In den folgenden Szenarien kann der Fehler „Kein Export mit dem Namen XYX gefunden“ angezeigt werden:

  • Sie verwenden Fn::ImportValue in verschachtelten Stacks.
  • Der exportierte Wert befindet sich nicht in derselben AWS-Region oder demselben AWS-Konto, in das Sie den Wert importieren.
  • Der exportierte Wert wird nicht erstellt oder veröffentlicht, bevor der Stack ihn importiert.
  • Sie haben im Importstack einen falschen Exportnamen verwendet.

Wählen Sie je nach Szenario, das Sie gerade erleben, eine der folgenden Lösungen.

Behebung

Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhalten, vergewissern Sie sich, dass Sie die neueste AWS CLI-Version verwenden.

Sie verwenden Fn::ImportValue in verschachtelten Stacks

Standardmäßig erstellt CloudFormation untergeordnete Stacks parallel zu verschachtelten Stacks. Wenn untergeordnete Stacks parallel zueinander erstellt werden und einer eine Ausgabe von einem anderen importiert, kann die Stackerstellung fehlschlagen. Es besteht die Gefahr, dass der Exportwert nicht rechtzeitig verfügbar ist, um vom anderen untergeordneten Stack importiert zu werden.

Um dieses Problem zu lösen, verwenden Sie das Attribut DependsOn, um eine explizite Abhängigkeit für den Stack zu erstellen, der Fn::ImportValue verwendet. Der untergeordnete Stack, der Fn:ImportValue verwendet, wird dann erst nach dem untergeordneten Stack erstellt, der den Wert exportiert.

Im folgenden Beispiel für einen verschachtelten Stack exportiert ChildStack01 einen Wert im Abschnitt Outputs, und ChildStack02 verwendet Fn::ImportValue, um den Wert aus ChildStack01 zu importieren. Sie können DependsOn für ChildStack02 verwenden, das auf der folgenden YAML-Beispielvorlage basiert:

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'

Tipp: Verwenden Sie für stackübergreifende Verweise Fn::ImportValue, um einen Wert aus einer anderen Vorlage zu importieren. Verwenden Sie für verschachtelte Stacks Fn::Ref und Fn::GetAtt, um auf den Wert in Ihrer aktuellen Vorlage zu verweisen.

Der exportierte Wert befindet sich nicht in derselben AWS-Region oder demselben AWS-Konto, in das Sie den Wert importieren

Stackübergreifende Verweise gelten nur innerhalb eines einzelnen Kontos und einer Region. Andere Stacks, die sich in demselben Konto und derselben Region befinden, können nur die exportierten Werte importieren.

Um dieses Problem zu beheben, führen Sie die Schritte im Abschnitt Stackkonfiguration der Export- und Import-Stacksn aus, bevor Sie den Stack mit Fn::ImportValue erstellen.

Der exportierte Wert wird nicht erstellt oder veröffentlicht, bevor der Stack ihn importiert

Bei nicht verschachtelten Stacks müssen Sie den Stapel bereitstellen, der einen Wert exportiert. Der Stack muss sich im Status Create_Complete oder Update_Complete befinden, bevor der Stack erstellt wird, der importiert wird.

Um dieses Problem zu beheben, führen Sie die Schritte im Abschnitt Stackkonfiguration der Export- und Import-Stacksn aus, bevor Sie den Stack mit Fn::ImportValue erstellen.

Sie haben im Importstack einen falschen Exportnamen verwendet

  1. Vergewissern Sie sich, dass der Exportname in Ihrem Konto aufgeführt ist.
  2. Wenn Sie einen Exportnamen von einem Stack in einen anderen Stack importieren, vergewissern Sie sich, dass Sie in beiden Stacks genau denselben Exportnamen verwenden.
  3. Führen Sie die Schritte im Abschnitt Stackkonfiguration der Export- und Import-Stacks überprüfen aus, bevor Sie den Stack mit Fn::ImportValue erstellen.

Stackkonfiguration der Export- und Import-Stacks überprüfen

Sie können entweder die CloudFormation-Konsole oder die AWS CLI verwenden, um zu überprüfen, ob der Exportwert in derselben Region und demselben Konto vorhanden ist.

Mithilfe der CloudFormation-Konsole:

  1. Öffnen Sie die CloudFormation-Konsole.
  2. Wählen Sie im Navigationsbereich Exports aus.
  3. Vergewissern Sie sich, dass der Exportwert in der Konsole aufgeführt ist.

Mithilfe der AWS-CLI:

1.Führen Sie den folgenden Befehl aus, um die verfügbaren Exporte aufzulisten:

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

Hinweis: Ersetzen Sie us-east-1 durch Ihre Region.

  1. Stellen Sie in der Ausgabe sicher, dass die Name-Eigenschaft sowohl für den Import- als auch für den Exportstack identisch ist. Die Ausgabe ähnelt der folgenden:
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

Wichtig: Beachten Sie Folgendes, wenn Sie Import- und Exportwerte in Ihren Stacks verwenden: Nachdem ein Stack einen Ausgabewert importiert hat, können Sie den Stack, der den Ausgabewert exportiert, nicht löschen oder den exportierten Ausgabewert ändern. Sie müssen alle Importe entfernen, bevor Sie den Exportstack löschen oder den Ausgabewert ändern können. Der Exportname muss innerhalb der Region eindeutig sein. Als Abhilfe können Sie Parameter im AWS Systems Manager Parameter Store verwenden, um Werte zwischen CloudFormation-Stacks auszutauschen.