Fn::ImportValue
La función intrínseca Fn::ImportValue
devuelve el valor de una salida exportada por otra pila. Esta función se suele utilizar para crear referencias cruzadas entre pilas. En los siguientes fragmentos de código de plantillas de ejemplo, la Pila A exporta valores del grupo de seguridad de la VPC y la Pila B los importa.
nota
Las siguientes restricciones se aplican a las referencias cruzadas entre pilas:
-
Para cada Cuenta de AWS, los nombres
Export
deben ser únicos dentro de una región. -
No puede crear referencias cruzadas entre regiones. Puede utilizar la función intrínseca
Fn::ImportValue
para importar solo valores que se hayan exportado dentro de la misma región. -
Para las salidas, el valor de la propiedad
Name
de unExport
no puede usar las funcionesRef
oGetAtt
que dependen de un recurso.Del mismo modo, la función
ImportValue
no puede incluir funcionesRef
oGetAtt
que dependen de un recurso. -
Después de que otra pila importe un valor de salida, no se puede eliminar la pila que exporta el valor de salida ni modificar el valor de salida exportado. Todas las importaciones deben eliminarse antes de poder eliminar la pila de exportación o modificar el valor de salida.
JSON
Exportación de la pila 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
Exportación de la pila 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
Importación de la Pila 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
Importación de la Pila 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'
Declaración
JSON
{ "Fn::ImportValue" :
sharedValueToImport
}
YAML
Puede utilizar el nombre de la función completa:
Fn::ImportValue:
sharedValueToImport
También puede utilizar la forma abreviada:
!ImportValue
sharedValueToImport
importante
No se puede utilizar la forma abreviada de !ImportValue
cuando contiene la forma abreviada de !Sub
.
# do not use !ImportValue !Sub '${NetworkStack}-SubnetID'
En lugar de ello, debe utilizar el nombre de la función completa, por ejemplo:
Fn::ImportValue: !Sub "${NetworkStack}-SubnetID"
Parámetros
- sharedValueToImport
-
El valor de salida de la pila que desea importar.
Valor devuelto
El valor de salida de la pila.
Ejemplo
JSON
{ "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-SubnetID" } }
YAML
Fn::ImportValue: !Sub "${NetworkStackName}-SecurityGroupID"
Funciones compatibles
Puede utilizar las siguientes funciones en la función Fn::ImportValue
. El valor de estas funciones no puede depender de un recurso.
-
Fn::Base64
-
Fn::FindInMap
-
Fn::If
-
Fn::Join
-
Fn::Select
-
Fn::Sub
-
Ref