Fn::ImportValue
内部函数 Fn::ImportValue 返回由另一个堆栈导出的输出的值。您通常使用此函数来创建跨堆栈引用。在以下示例模板代码段中,堆栈 A 导出 VPC 安全组值,而堆栈 B 导入这些值。
以下限制适用于跨堆栈引用:
-
对于每个 Amazon 账户,
Export名称在一个区域内必须是唯一的。 -
不能在区域之间创建跨堆栈引用。您只能使用内部函数
Fn::ImportValue导入在同一区域内已经导出的值。 -
对于输出,
Name的Export属性值不能使用依赖于资源的函数 (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: - !ImportValue 'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID' AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: !ImportValue 'Fn::Sub': '${NetworkStackNameParameter}-SubnetID'
声明
JSON
{ "Fn::ImportValue" :sharedValueToImport}
YAML
您可以使用完整的函数名称:
Fn::ImportValue:sharedValueToImport
或者,您也可以使用短格式:
!ImportValuesharedValueToImport
当它包含 !ImportValue 时,不能使用 !Sub 的简写形式。以下示例对 Amazon CloudFormation 有效,但对 YAML 无效:
!ImportValue !Sub "${NetworkStack}-SubnetID"
此时,您必须使用完整的函数名称,例如:
Fn::ImportValue: !Sub "${NetworkStack}-SubnetID"
参数
- sharedValueToImport
-
要导入的堆栈输出值。
返回值
堆栈输出值。
示例
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::Split -
Fn::Sub -
Ref