Fn::ImportValue - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Fn::ImportValue

內部函數 Fn::ImportValue 會傳回另一個堆疊匯出的輸出值。此函數通常可用來建立跨堆疊參考。在下列範例範本程式碼片段中,Stack A 匯出VPC安全群組值,Stack B 則匯入它們。

注意

下列限制適用於跨堆疊參考:

  • 對於每個名稱 AWS 帳戶,Export名稱在區域中必須是唯一的。

  • 您無法跨區域建立跨堆疊參考。您可以使用內部函數 Fn::ImportValue,僅匯入已在同一區域內匯出的值。

  • 對於輸出,ExportName 屬性值無法使用依賴某個資源的 Ref 或者 GetAtt 函數。

    同樣,ImportValue 函數不能包含依賴某個資源的 RefGetAtt 函數。

  • 當其他堆疊匯入輸出值之後,您就無法刪除匯出輸出值的堆疊,也無法修改匯出的輸出值。您必須先移除所有匯入,之後才可以刪除匯出堆疊或修改輸出值。

JSON

堆疊 A 匯出結果

"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

堆疊 A 匯出結果

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

堆疊 B 匯入結果

"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

堆疊 B 匯入結果

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'

宣告

JSON

{ "Fn::ImportValue" : sharedValueToImport }

YAML

您可以使用完整的函數名稱:

Fn::ImportValue: sharedValueToImport

或者,您也可以使用較短的名稱:

!ImportValue sharedValueToImport
重要

!ImportValue 包含簡短格式的 !Sub,則您將無法使用它的簡短格式。

# do not use !ImportValue !Sub '${NetworkStack}-SubnetID'

對此,您必須使用完整的函數名稱,如下所示:

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

參數

sharedValueTo匯入

您想要匯入的堆疊輸出值。

傳回值

堆疊的輸出值。

範例

JSON

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

YAML

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

支援的函數

您可以在 Fn::ImportValue 函數中善用以下函數,但您無法使用某個資源決定這些函數值。

  • Fn::Base64

  • Fn::FindInMap

  • Fn::If

  • Fn::Join

  • Fn::Select

  • Fn::Sub

  • Ref