View a markdown version of this page

Lüfter:: GetStackOutput - AWS CloudFormation

Dies ist das neue CloudFormation Template Reference Guide. Bitte aktualisieren Sie Ihre Lesezeichen und Links. Hilfe zu den ersten CloudFormation Schritten finden Sie im AWS CloudFormation Benutzerhandbuch.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Lüfter:: GetStackOutput

Die intrinsische Funktion Fn::GetStackOutput gibt den Wert einer Ausgabe aus einem anderen Stapel zurück. Im Gegensatz dazu erfordert diese Funktion nichtFn::ImportValue, dass der Stack, auf den verwiesen wird, den Ausgabewert explizit exportiert. Sie unterstützt auch konto- und regionsübergreifende Verweise.

Verwenden Sie diese Funktion, wenn Sie stapelübergreifende Ausgaben für AWS Konten oder Regionen referenzieren müssen oder wenn Sie auf Ausgaben verweisen möchten, ohne explizite Exporte zu verwalten.

Anmerkung

Fn::GetStackOutputerzeugt eine schwache Referenz. Der Wert, auf den verwiesen wird, wird bei der Erstellung oder Aktualisierung des Stacks aufgelöst. Wenn der Stack oder die Ausgabe, auf die verwiesen wird, später gelöscht oder geändert wird, wird der verbrauchende Stack nicht automatisch aktualisiert oder benachrichtigt. Um die Konsistenz zu gewährleisten, sollten Sie die referenzierten Stacks und Ausgaben vor unbeabsichtigten Änderungen schützen.

Anmerkung

Fn::GetStackOutputunterstützt keine partitionsübergreifenden Verweise.

Deklaration

JSON

{ "Fn::GetStackOutput": { "StackName": "stack-name", "OutputName": "output-name", "Region": "region", "RoleArn": "role-arn" } }

YAML

Sie können den vollständigen Funktionsnamen verwenden:

Fn::GetStackOutput: StackName: stack-name OutputName: output-name Region: region RoleArn: role-arn

Alternativ können Sie auch die Kurzform verwenden:

!GetStackOutput StackName: stack-name OutputName: output-name Region: region RoleArn: role-arn
Wichtig

Sie können die Kurzform von nicht verwenden!GetStackOutput, wenn sie andere Kurzformfunktionen wie !Sub oder !Ref als Parameterwerte enthält. Verwenden Sie in diesem Fall den vollständigen Funktionsnamen:

# Do not use !GetStackOutput StackName: !Ref MyStackNameParam OutputName: VpcId # Use this instead Fn::GetStackOutput: StackName: !Ref MyStackNameParam OutputName: VpcId

Parameters

StackName

Der Name des Stacks, der die Ausgabe enthält, auf die Sie verweisen möchten.

Erforderlich: Ja

OutputName

Die logische ID der Ausgabe, auf die verwiesen werden soll. Dies ist der Schlüssel, der im Abschnitt Outputs der Vorlage des Stacks, auf den verwiesen wird, definiert ist.

Erforderlich: Ja

Region

Die AWS Region, in der der referenzierte Stack bereitgestellt wird. Standardmäßig wird die Region des Stacks verwendet, der erstellt oder aktualisiert wird.

Required: No

RoleArn

Der ARN einer IAM-Rolle mit cloudformation:DescribeStacks Berechtigungen für den referenzierten Stack. Diese Rolle muss durch die Ausführungsrolle des Stacks, der erstellt oder aktualisiert wird, übernommen werden. Standardmäßig wird die Ausführungsrolle des aktuellen Stacks verwendet. Verwenden Sie diesen Parameter, wenn Sie auf einen Stack in einem anderen AWS Konto verweisen.

Required: No

Rückgabewert

Der Wert der angegebenen Ausgabe aus dem referenzierten Stack.

Beispiele

Derselbe Account, gleiche Region

Das folgende Beispiel verweist auf die VpcId Ausgabe eines Stacks, der nach demselben Konto und derselben Region benannt ProducerStack ist. Da kein Region oder angegeben RoleArn ist, werden die Region und die Ausführungsrolle des aktuellen Stacks CloudFormation verwendet.

JSON

{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId" } }

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId

Gleiches Konto, andere Region

Das folgende Beispiel bezieht sich auf die VpcId Ausgabe von ProducerStack Deployed inus-west-2, während sich der verbrauchende Stack in einer anderen Region befindet. Der Region Parameter weist CloudFormation an, den referenzierten Wert in nachzuschlagenus-west-2.

JSON

{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "Region": "us-west-2" } }

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId Region: us-west-2

Cross-account

Das folgende Beispiel verweist auf die VpcId Ausgabe von ProducerStack in account111111111111. Der verbrauchende Stapel befindet sich im Konto222222222222. Das RoleArn gibt eine Rolle im Konto 111111111111 mit cloudformation:DescribeStacks Berechtigungen an, die von der Ausführungsrolle des verbrauchenden Stacks übernommen werden müssen.

JSON

{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole" } }

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole

Cross-account und regionsübergreifend

Das folgende Beispiel verweist auf eine Ausgabe eines Stacks in einem anderen Konto und einer anderen Region. Sowohl die als RoleArn auch die Region Parameter sind angegeben.

JSON

{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole", "Region": "us-west-2" } }

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole Region: us-west-2

IAM-Rollenkonfiguration

Wenn Sie den RoleArn Parameter für kontoübergreifende Verweise verwenden, muss die IAM-Rolle berechtigt sein, Stacks in dem Konto zu beschreiben, das den Stack enthält, auf den verwiesen wird:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks" ], "Resource": "*" } ] }
Tipp

Für eine restriktivere Richtlinie beschränken Sie Resource sich auf den spezifischen Stack-ARN, auf den Sie verweisen möchten.

Die Rolle muss über eine Vertrauensrichtlinie verfügen, die der Ausführungsrolle des Stacks, der den Stack nutzt, AssumeRole Berechtigungen gewährt:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:role/CloudFormationExecutionRole" }, "Action": "sts:AssumeRole" } ] }

Unterstützte Funktionen

Die folgenden Funktionen können innerhalb der Parameterwerte von verwendet werden Fn::GetStackOutput (z. B. um das StackName Oder zu konstruierenRoleArn). Der Wert dieser Funktionen darf nicht von einer Ressource abhängen.

  • Fn::Base64

  • Fn::FindInMap

  • Fn::If

  • Fn::Join

  • Fn::Select

  • Fn::Sub

  • Ref

Fn::GetStackOutputselbst kann an den folgenden Template-Positionen verwendet werden:

  • Direkter Eigenschaftswert der Ressource

  • Drinnen Fn::Join

  • Drinnen Fn::If

  • Drinnen Fn::Select

Bekannte BeschränkungenUnten finden Sie Positionen, die noch nicht unterstützt werden.

Sie können beispielsweise verwenden, Ref um einen Parameterwert als Stacknamen zu übergeben:

Parameters: SourceStackName: Type: String Resources: MyResource: Type: AWS::EC2::Instance Properties: SubnetId: Fn::GetStackOutput: StackName: !Ref SourceStackName OutputName: SubnetId

Bekannte Beschränkungen

Die folgenden Verwendungsmuster werden in dieser Version nicht unterstützt. Alle geben einen InternalFailure Fehler zurück. Die Support für diese Muster wird in einem future Update hinzugefügt.

  • Fn::GetStackOutputinnerhalb eines Fn::Sub variablen Kartenwerts

  • Fn::GetStackOutputim Inneren Fn::Base64

  • Fn::GetStackOutputals direkter Outputs Abschnittswert

  • Fn::GetStackOutputinnerhalb Fn::Equals des Conditions Abschnitts

  • Fn::GetStackOutputinnen Fn::ImportValue

Verwenden Sie ihn Fn::GetStackOutput direkt als Eigenschaftswert einer Ressource oder fügen Sie ihn in Fn::JoinFn::If, oder einFn::Select.

Fehlerbehandlung

CloudFormation validiert Fn::GetStackOutput Verweise bei der Erstellung oder Aktualisierung von Stacks. Im Folgenden sind die häufigsten Fehler aufgeführt, auf die Sie möglicherweise stoßen können:

  • Die IAM-Rolle kann nicht übernommen werden — der Stack-Vorgang schlägt mit der Fehlermeldung „Zugriff verweigert“ fehl. Stellen Sie sicher, dass die Rolle von der Ausführungsrolle des Stacks, der den Stack nutzt, übernommen werden kann.

  • Der IAM-Rolle fehlt die DescribeStacks Berechtigung — Der Stack-Vorgang schlägt mit der Fehlermeldung „Zugriff verweigert“ fehl. Stellen Sie sicher, dass die Berechtigungsrichtlinie der Rolle Folgendes umfasst: cloudformation:DescribeStacks

  • Der referenzierte Stack ist nicht vorhanden — Der Stack-Vorgang schlägt fehl und es wird ein Validierungsfehler angezeigt, der darauf hinweist, dass der Stack nicht gefunden wurde. Wenn Sie den Region Parameter angegeben haben, überprüfen Sie, ob dies die richtige Region für den Stack ist, auf den Sie verweisen möchten.

  • Der Ausgabeschlüssel ist auf dem Stack, auf den verwiesen wird, nicht vorhanden. Der Stack-Vorgang schlägt fehl und es wird ein Validierungsfehler angezeigt, der angibt, dass die Ausgabe nicht gefunden wurde.

  • Der referenzierte Stack befindet sich in einer Region, die für das Zielkonto nicht aktiviert ist — der Stack-Vorgang schlägt fehl. Stellen Sie sicher, dass die Zielregion in dem Konto aktiviert ist, dem der referenzierte Stack gehört.

  • Die referenzierte Region ist ungültig — Der Stack-Vorgang schlägt mit einem Validierungsfehler fehl.

Verweise zwischen US-East-1- und Opt-In-Regionen

Bei der Implementierung eines Verweises zwischen der us-east-1 Region und einer Opt-in-Region kann ein Fehler auftreten. Um solche Fehler zu vermeiden, folgen Sie dieser Anleitung zur Aktualisierung der Token-Kompatibilität für den globalen STS-Endpunkt.

Verwenden von Fn:: GetStackOutput mit AWS Cloud Development Kit (AWS CDK)

Das AWS Cloud Development Kit (AWS CDK) (CDK) unterstützt Fn::GetStackOutput durch die Fn.getStackOutput() Methode. Wenn Sie über regionsübergreifende oder kontenübergreifende Verweise zwischen CDK-Stacks verfügen, kann das CDK diese nun Fn::GetStackOutput nativ verwenden, anstatt benutzerdefinierte Ressourcen mit SSM-Parametern zu generieren. Dies vereinfacht die synthetisierten Vorlagen und macht die vorherige Problemumgehung überflüssig. crossRegionReferences

Weitere Informationen finden Sie in der CDK-API-Referenz.

Vergleich mit Fn: ImportValue

Funktion Fn::ImportValue Fn::GetStackOutput
Gleiches Konto, gleiche Region Unterstützt Unterstützt
Cross-account Nicht unterstützt Unterstützt
Cross-Region Nicht unterstützt Unterstützt
Erfordert einen expliziten Export Ja Nein
Art des Verweises Stark (blockiert das Löschen des Exportstapels) Schwach (bei der Bereitstellung behoben)
Referentielle Integrität Ja Nein

Verwenden Sie diese Fn::ImportValue Option, wenn Sie eine starke referenzielle Integrität innerhalb desselben Kontos und derselben Region benötigen. Verwenden Sie diese OptionFn::GetStackOutput, wenn Sie konto- oder regionsübergreifende Referenzen benötigen oder wenn Sie die Verwaltung expliziter Exporte vermeiden möchten.

Best Practices

  • Schützt Stapel und Ausgaben, auf die verwiesen wird. Da eine schwache Referenz Fn::GetStackOutput erzeugt wird, verhindert das Löschen des Stacks, auf den verwiesen wird, nicht, dass der Stack, der ihn beansprucht, erstellt oder aktualisiert wird. Nachfolgende Operationen, die die Referenz erneut auflösen, schlagen jedoch fehl. Verwenden Sie Stack-Richtlinien, Löschschutz oder IAM-Richtlinien, um ein versehentliches Löschen von Stacks zu verhindern, auf die verwiesen wird.

  • Geben Sie IAM-Rollen eng ein. Wenn Sie den RoleArn für den kontoübergreifenden Zugriff konfigurieren, beschränken Sie die DescribeStacks Berechtigung nach Möglichkeit auf den spezifischen Stack-ARN.

  • Achten Sie auf den Zeitpunkt der Problemlösung. Der Wert, auf den verwiesen wird, wird bei der Erstellung oder Aktualisierung des Stacks aufgelöst. Wenn sich der Quellwert ändert, wird der verbrauchende Stack nicht automatisch aktualisiert. Um die Änderungen zu übernehmen, führen Sie eine Aktualisierung des Stacks durch, der die Daten konsumiert.