Fn::ImportValue - AWS CloudFormation

Fn::ImportValue

内部函数 Fn::ImportValue 返回由另一个堆栈导出的输出的值。您通常使用此函数来创建跨堆栈引用。在以下示例模板代码段中,堆栈 A 导出 VPC 安全组值,而堆栈 B 导入这些值。

注意

以下限制适用于跨堆栈引用:

  • 对于每个 AWS 账户,Export 名称在区域内必须是唯一的。

  • 不能跨区域创建跨堆栈引用。您可以使用内置函数 Fn::ImportValue 仅导入已在同一区域内导出的值。

  • 对于输出,ExportName 属性值无法使用依赖于资源的 RefGetAtt 函数。

    同样,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
重要

当包含 !Sub 的简写形式时,不能使用 !ImportValue 的简写形式。

# do not use !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::Sub

  • Ref