Fn::ImportValue
A função intrínseca Fn::ImportValue
retorna o valor de uma saída exportada por outra pilha. Normalmente, você usa essa função para criar referências de pilha cruzada. Nos trechos do modelo de exemplo a seguir, Stack A exporta valores do security group da VPC, e Stack B os importa.
nota
As restrições a seguir se aplicam a referências de pilha cruzada.
-
Para cada Conta da AWS, os nomes de
Export
devem ser exclusivos em uma região. -
Não é possível criar referências entre pilhas nas diversas regiões. Você pode usar a função intrínseca
Fn::ImportValue
para importar somente valores que foram exportados na mesma região. -
Para saídas, o valor da propriedade
Name
de umaExport
não pode utilizar funçõesRef
ouGetAtt
que dependem de um recurso.Da mesma forma, a função
ImportValue
não pode incluir funçõesRef
ouGetAtt
que dependem de um recurso. -
Depois que outra pilha importar um valor de saída, não será possível excluir a pilha que está exportando o valor de saída ou modificar o valor de saída exportado. Todas as importações deverão ser removidas para que você possa excluir a pilha de exportação ou modificar o valor de saída.
JSON
Exportação da Stack 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
Exportação da Stack 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
Importação da Stack 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
Importação da Stack 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'
Declaração
JSON
{ "Fn::ImportValue" :
sharedValueToImport
}
YAML
Você pode usar o nome completo da função:
Fn::ImportValue:
sharedValueToImport
Como alternativa, você pode usar a forma abreviada:
!ImportValue
sharedValueToImport
Importante
Você não pode usar a forma abreviada de !ImportValue
quando ela contém a forma abreviada de !Sub
.
# do not use !ImportValue !Sub '${NetworkStack}-SubnetID'
Em vez disso, você deve usar o nome completo da função, por exemplo:
Fn::ImportValue: !Sub "${NetworkStack}-SubnetID"
Parâmetros
- sharedValueToImport
-
O valor de saída da pilha que você deseja importar.
Valor de retorno
O valor de saída da pilha.
Exemplo
JSON
{ "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-SubnetID" } }
YAML
Fn::ImportValue: !Sub "${NetworkStackName}-SecurityGroupID"
Funções compatíveis
Você pode usar as seguintes funções na função Fn::ImportValue
. O valor dessas funções não depende de um recurso.
-
Fn::Base64
-
Fn::FindInMap
-
Fn::If
-
Fn::Join
-
Fn::Select
-
Fn::Sub
-
Ref