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-nameOutputName:output-nameRegion:regionRoleArn:role-arn
Alternativ können Sie auch die Kurzform verwenden:
!GetStackOutput StackName:stack-nameOutputName:output-nameRegion:regionRoleArn: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:DescribeStacksBerechtigungen 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 einesFn::Subvariablen Kartenwerts -
Fn::GetStackOutputim InnerenFn::Base64 -
Fn::GetStackOutputals direkterOutputsAbschnittswert -
Fn::GetStackOutputinnerhalbFn::EqualsdesConditionsAbschnitts -
Fn::GetStackOutputinnenFn::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
RegionParameter 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::GetStackOutputerzeugt 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
RoleArnfür den kontoübergreifenden Zugriff konfigurieren, beschränken Sie dieDescribeStacksBerechtigung 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.