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:

  • Die Export-Namen müssen innerhalb einer Region für jedes AWS-Konto 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.

JSON

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" }} } }

YAML

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'

JSON

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"}} }] } } }

YAML

Stack B – Import

Resources: WebServerInstance: Type: 'AWS::EC2::Instance' Properties: InstanceType: t2.micro ImageId: ami-a1b23456 NetworkInterfaces: - GroupSet: - !ImportValue 'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID' AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: !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