本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Fn::ImportValue
內部函數 Fn::ImportValue
會傳回另一個堆疊匯出的輸出值。此函數通常可用來建立跨堆疊參考。在下列範例範本程式碼片段中,Stack A 匯出VPC安全群組值,Stack B 則匯入它們。
注意
下列限制適用於跨堆疊參考:
-
對於每個名稱 AWS 帳戶,
Export
名稱在區域中必須是唯一的。 -
您無法跨區域建立跨堆疊參考。您可以使用內部函數
Fn::ImportValue
,僅匯入已在同一區域內匯出的值。 -
對於輸出,
Export
的Name
屬性值無法使用依賴某個資源的Ref
或者GetAtt
函數。同樣,
ImportValue
函數不能包含依賴某個資源的Ref
或GetAtt
函數。 -
當其他堆疊匯入輸出值之後,您就無法刪除匯出輸出值的堆疊,也無法修改匯出的輸出值。您必須先移除所有匯入,之後才可以刪除匯出堆疊或修改輸出值。
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