Fn::ImportValue - AWS CloudFormation

Fn::ImportValue

Die intrinsische Funktion Fn::ImportValue gibt den Wert einer Ausgabe zurück, die von einem anderen Stack exportiert wurde. Normalerweise verwenden Sie diese Funktion zum Erstellen von Cross-Stack-Referenzen. Im folgenden Beispiel eines Vorlagenausschnitts exportiert Stack A die VPC-Sicherheitsgruppenwerte, die von Stack B importiert werden.

Anmerkung

Die folgenden Einschränkungen gelten für Stack-übergreifende Referenzen:

  • Für jedes AWS-Konto müssen Export-Namen innerhalb einer Region eindeutig sein.

  • Sie können Stack-übergreifende Referenzen nicht über Regionen hinweg erstellen. Sie können die intrinsische Funktion Fn::ImportValue verwenden, um nur Werte zu importieren, die innerhalb derselben Region exportiert wurden.

  • Bei Ausgaben kann der Wert der Name-Eigenschaft eines Export keine Ref- oder GetAtt-Funktionen verwenden, die von einer Ressource abhängen.

    Ebenso darf die ImportValue-Funktion keine Ref- oder GetAtt-Funktionen enthalten, die von einer Ressource abhängen.

  • Sie können einen Stack nicht löschen, wenn ein anderer Stack auf einen seiner Ausgaben verweist.

  • Sie können einen Ausgabewert, auf den von einem anderen Stack verwiesen wird, nicht ändern oder entfernen.

Stack A – Export

"Outputs" : { "PublicSubnet" : { "Description" : "The subnet ID to use for public web servers", "Value" : { "Ref" : "PublicSubnet" }, "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SubnetID" }} }, "WebServerSecurityGroup" : { "Description" : "The security group ID to use for public web servers", "Value" : { "Fn::GetAtt" : ["WebServerSecurityGroup", "GroupId"] }, "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SecurityGroupID" }} } }

Stack B – Import

"Resources" : { "WebServerInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "InstanceType" : "t2.micro", "ImageId" : "ami-a1b23456", "NetworkInterfaces" : [{ "GroupSet" : [{"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SecurityGroupID"}}], "AssociatePublicIpAddress" : "true", "DeviceIndex" : "0", "DeleteOnTermination" : "true", "SubnetId" : {"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SubnetID"}} }] } } }

Deklaration

JSON

{ "Fn::ImportValue" : sharedValueToImport }

YAML

Sie können den vollständigen Funktionsnamen verwenden:

Fn::ImportValue: sharedValueToImport

Alternativ können Sie auch die Kurzform verwenden:

!ImportValue sharedValueToImport
Wichtig

Sie können die Kurzform von !ImportValue nicht verwenden, wenn es !Sub enthält. Das folgende Beispiel ist für AWS CloudFormation, jedoch nicht für YAML gültig:

!ImportValue !Sub "${NetworkStack}-SubnetID"

Stattdessen müssen Sie den vollständigen Funktionsnamen verwenden, zum Beispiel:

Fn::ImportValue: !Sub "${NetworkStack}-SubnetID"

Parameter

sharedValueToImport

Der Stack-Ausgabewert, den Sie importieren möchten.

Rückgabewert

Der Stack-Ausgabewert.

Beispiel

JSON

{ "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-SubnetID" } }

YAML

Fn::ImportValue: !Sub "${NetworkStackName}-SecurityGroupID"

Unterstützte Funktionen

Sie können die folgenden Funktionen in der Fn::ImportValue-Funktion verwenden. Der Wert dieser Funktionen darf nicht von einer Ressource abhängen.

  • Fn::Base64

  • Fn::FindInMap

  • Fn::If

  • Fn::Join

  • Fn::Select

  • Fn::Split

  • Fn::Sub

  • Ref