Fn::ImportValue
The intrinsic function Fn::ImportValue
returns the value of an output exported by another stack. You
typically use this function to create cross-stack
references. In the following example template snippets, Stack A exports VPC security
group values and Stack B imports them.
Note
The following restrictions apply to cross-stack references:
-
For each AWS account,
Export
names must be unique within a region. -
You can't create cross-stack references across regions. You can use the intrinsic function
Fn::ImportValue
to import only values that have been exported within the same region. -
For outputs, the value of the
Name
property of anExport
can't useRef
orGetAtt
functions that depend on a resource.Similarly, the
ImportValue
function can't includeRef
orGetAtt
functions that depend on a resource. -
You can't delete a stack if another stack references one of its outputs.
-
You can't modify or remove an output value that is referenced by another stack.
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: - Fn::ImportValue: 'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID' AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: Fn::ImportValue 'Fn::Sub': '${NetworkStackNameParameter}-SubnetID'
Declaration
JSON
{ "Fn::ImportValue" :
sharedValueToImport
}
YAML
You can use the full function name:
Fn::ImportValue:
sharedValueToImport
Alternatively, you can use the short form:
!ImportValue
sharedValueToImport
Important
You can't use the short form of !ImportValue
when it contains the short form of
!Sub
.
# do not use !ImportValue !Sub '${NetworkStack}-SubnetID'
Instead, you must use the full function name, for example:
Fn::ImportValue: !Sub "${NetworkStack}-SubnetID"
Parameters
- sharedValueToImport
-
The stack output value that you want to import.
Return value
The stack output value.
Example
JSON
{ "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-SubnetID" } }
YAML
Fn::ImportValue: !Sub "${NetworkStackName}-SecurityGroupID"
Supported functions
You can use the following functions in the Fn::ImportValue
function. The
value of these functions can't depend on a resource.
-
Fn::Base64
-
Fn::FindInMap
-
Fn::If
-
Fn::Join
-
Fn::Select
-
Fn::Sub
-
Ref