Fn::ImportValue - AWS CloudFormation

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 seguintes restrições se aplicam a referências de pilha cruzada:

  • Para cada conta da AWS, os nomes de Export devem ser exclusivos dentro de uma região.

  • Você não pode criar referências de pilha cruzada entre regiões. Você pode usar a função intrínseca Fn::ImportValue para importar apenas valores que foram exportados dentro da mesma região.

  • Para saídas, o valor da propriedade Name de um Export não pode usar funções Ref ou GetAtt que dependam de um recurso.

    Da mesma maneira, a função ImportValue não pode incluir funções Ref ou GetAtt que dependam de um recurso.

  • Você não poderá excluir uma pilha, se outra pilha referenciar uma das saídas.

  • Você não pode modificar nem remover um valor de saída referenciado por outra pilha.

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: - !ImportValue 'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID' AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: !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 ele contém um !Sub. O exemplo a seguir é válido para o AWS CloudFormation, mas não para o YAML:

!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::Split

  • Fn::Sub

  • Ref