View a markdown version of this page

Fn::GetStackOutput - AWS CloudFormation

Este é o novo Guia de referência de modelos do CloudFormation. Atualize seus favoritos e links. Para obter ajuda para começar a usar o CloudFormation, consulte o Guia do usuário do AWS CloudFormation.

Fn::GetStackOutput

A função intrínseca Fn::GetStackOutput retorna o valor de uma saída proveniente de outra pilha. Ao contrário de Fn::ImportValue, essa função não exige que a pilha referenciada exporte explicitamente o valor de saída. Ela também é compatível com referências entre contas e entre regiões

Use essa função quando precisar referenciar saídas de pilhas em contas ou regiões da AWS, ou quando quiser referenciar saídas sem gerenciar exportações explícitas.

nota

Fn::GetStackOutput cria uma referência fraca. O valor referenciado é resolvido no momento da criação ou atualização da pilha. Se a pilha ou saída referenciada for excluída ou modificada posteriormente, a pilha consumidora não será atualizada ou notificada automaticamente. Para garantir a consistência, proteja as pilhas e saídas referenciadas contra alterações não intencionais.

nota

Fn::GetStackOutput não é compatível com referências entre partições.

Declaração

JSON

{ "Fn::GetStackOutput": { "StackName": "stack-name", "OutputName": "output-name", "Region": "region", "RoleArn": "role-arn" } }

YAML

Você pode usar o nome completo da função:

Fn::GetStackOutput: StackName: stack-name OutputName: output-name Region: region RoleArn: role-arn

Como alternativa, você pode usar a forma abreviada:

!GetStackOutput StackName: stack-name OutputName: output-name Region: region RoleArn: role-arn
Importante

Você não pode usar a forma abreviada de !GetStackOutput quando ela contiver outras funções de forma abreviada como !Sub ou !Ref como valores de parâmetro. Nesse caso, use o nome completo da função:

# Do not use !GetStackOutput StackName: !Ref MyStackNameParam OutputName: VpcId # Use this instead Fn::GetStackOutput: StackName: !Ref MyStackNameParam OutputName: VpcId

Parâmetros

StackName

O nome da pilha que contém a saída que você deseja referenciar.

Obrigatório: Sim

OutputName

O ID lógico da saída a referenciar. Essa é a chave definida na seção Saídas do modelo da pilha referenciada.

Obrigatório: Sim

Região

A região da AWS em que a pilha referenciada está implantada. Adota por padrão a região da pilha que está sendo criada ou atualizada.

Obrigatório: não

RoleArn

O ARN de um perfil do IAM com as permissões cloudformation:DescribeStacks na pilha referenciada. O perfil precisa ser assumível pelo perfil de execução da pilha que está sendo criada ou atualizada. Adota por padrão o perfil de execução da pilha atual. Use esse parâmetro ao fazer referência a uma pilha em outra conta da AWS.

Obrigatório: não

Valor de retorno

O valor da saída especificada proveniente da pilha referenciada.

Exemplos

Mesma conta, mesma região

O exemplo a seguir faz referência à saída VpcId proveniente de uma pilha nomeada ProducerStack na mesma conta e região. Como não há a especificação de Region ou RoleArn, o CloudFormation usa a região e o perfil de execução da pilha atual.

JSON

{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId" } }

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId

Mesma conta, região diferente

O exemplo a seguir faz referência à saída VpcId proveniente do ProducerStack implantado em us-west-2, enquanto a pilha consumidora está em uma região diferente. O parâmetro Region direciona o CloudFormation a pesquisar o valor referenciado em us-west-2.

JSON

{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "Region": "us-west-2" } }

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId Region: us-west-2

Entre contas

O exemplo a seguir faz referência à saída VpcId de ProducerStack na conta 111111111111. A pilha consumidora está na conta 222222222222. O RoleArn especifica um perfil na conta 111111111111 com permissões cloudformation:DescribeStacks, que precisa ser assumido pelo perfil de execução da pilha consumidora.

JSON

{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole" } }

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole

Entre contas e entre regiões

O exemplo a seguir faz referência a uma saída proveniente de uma pilha em uma conta diferente e em uma região diferente. Os parâmetros RoleArn e Region são especificados.

JSON

{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole", "Region": "us-west-2" } }

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole Region: us-west-2

Configuração de perfil do IAM

Ao usar o parâmetro RoleArn para referências entre contas, o perfil do IAM precisa ter permissão para descrever as pilhas na conta que contém a pilha referenciada:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks" ], "Resource": "*" } ] }
dica

Para uma política mais restritiva, defina o escopo de Resource para o ARN da pilha específica que deseja referenciar.

O perfil precisa ter uma política de confiança que conceda permissões AssumeRole ao perfil de execução da pilha consumidora:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:role/CloudFormationExecutionRole" }, "Action": "sts:AssumeRole" } ] }

Funções compatíveis

As funções a seguir podem ser usadas nos valores dos parâmetros de Fn::GetStackOutput (p. ex., para construir StackName ou RoleArn). O valor dessas funções não depende de um recurso.

  • Fn::Base64

  • Fn::FindInMap

  • Fn::If

  • Fn::Join

  • Fn::Select

  • Fn::Sub

  • Ref

A própria função Fn::GetStackOutput pode ser usada nas seguintes posições do modelo:

  • Valor direto de propriedade do recurso

  • Dentro de Fn::Join

  • Dentro de Fn::If

  • Dentro de Fn::Select

Veja Limitações conhecidas abaixo para conhecer as posições que ainda não são compatíveis.

Por exemplo, você pode usar Ref para transmitir um valor de parâmetro como o nome da pilha:

Parameters: SourceStackName: Type: String Resources: MyResource: Type: AWS::EC2::Instance Properties: SubnetId: Fn::GetStackOutput: StackName: !Ref SourceStackName OutputName: SubnetId

Limitações conhecidas

Os seguintes padrões de uso não são compatíveis nesta versão. Todos retornam o erro InternalFailure. A compatibilidade com esses padrões será adicionada em uma futura atualização.

  • Fn::GetStackOutput dentro de um valor Fn::Sub de mapa variável

  • Fn::GetStackOutput dentro de Fn::Base64

  • Fn::GetStackOutput como um valor de seção Outputs direto

  • Fn::GetStackOutput dentro de Fn::Equals na seção Conditions

  • Fn::GetStackOutput dentro de Fn::ImportValue

Use Fn::GetStackOutput diretamente como um valor de propriedade de recurso ou envolva-o dentro de Fn::Join, Fn::If ou Fn::Select.

Tratamento de erros

O CloudFormation valida referências Fn::GetStackOutput durante as operações de criação ou atualização da pilha. Veja a seguir os erros comuns que você pode encontrar:

  • O perfil do IAM não pode ser assumido: a operação da pilha falha com um erro de acesso negado. Verifique se o perfil pode ser assumido pelo perfil de execução da pilha consumidora.

  • O perfil do IAM não tem a permissão DescribeStacks: a operação da pilha falha com um erro de acesso negado. Verifique se a política de permissões do perfil inclui cloudformation:DescribeStacks.

  • O perfil referenciado não existe: a operação da pilha falha com um erro de validação indicando que a pilha não foi encontrada. Se você tiver incluído o parâmetro Region, verifique se essa é a região correta para a pilha que deseja referenciar.

  • A chave de saída não existe na pilha referenciada: a operação da pilha falha com um erro de validação indicando que a saída não foi encontrada.

  • A pilha referenciada está em uma região que não está habilitada para a conta de destino: a operação da pilha falha. Certifique-se de que a região de destino esteja habilitada na conta proprietária da pilha referenciada.

  • A região referenciada é inválida: a operação de pilha falha com um erro de validação.

Referências entre us-east-1 e regiões opcionais

Talvez você encontre um erro ao implementar uma referência entre a região us-east-1 e uma região opcional. Para evitar esses erros, siga este guia para atualizar a compatibilidade do token para o endpoint STS global.

Como usar Fn::GetStackOutput com o AWS Cloud Development Kit (AWS CDK)

O AWS Cloud Development Kit (AWS CDK) (CDK) oferece suporte a Fn::GetStackOutput com o método Fn.getStackOutput(). Agora o CDK pode usar Fn::GetStackOutput nativamente em vez de gerar recursos personalizados com parâmetros do SSM quando você tiver referências entre regiões ou contas entre pilhas do CDK. Isso simplifica os modelos sintetizados e elimina a necessidade da solução alternativa anterior com crossRegionReferences.

Para obter mais informações, consulte a Referência de API do CDK.

Comparação com Fn::ImportValue

Recurso Fn::ImportValue Fn::GetStackOutput
Mesma conta, mesma região Compatível Compatível
Entre contas Não compatível Compatível
Entre regiões Não compatível Compatível
Exige exportação explícita Sim Não
Tipo de referência Forte (bloqueia a exclusão da pilha exportadora) Fraco (resolvido no momento da implantação)
Integridade referencial Sim Não

Use Fn::ImportValue quando precisar de uma integridade referencial forte na mesma conta e região. Use Fn::GetStackOutput quando precisar de referências entre contas ou regiões, ou quando quiser evitar o gerenciamento de exportações explícitas.

Práticas recomendadas

  • Proteja as pilhas e saídas referenciadas. Como Fn::GetStackOutput cria uma referência fraca, a exclusão da pilha referenciada não impede que a pilha consumidora seja criada ou atualizada. No entanto, operações subsequentes que resolverem novamente a referência apresentarão falha. Use políticas de pilha, proteção contra exclusão ou políticas do IAM para evitar a exclusão acidental das pilhas referenciadas.

  • Defina estritamente o escopo de perfis do IAM. Ao configurar RoleArn para acesso entre contas, restrinja a permissão DescribeStacks ao ARN específico da pilha sempre que possível.

  • Esteja ciente do tempo de resolução. O valor referenciado é resolvido no momento da criação ou atualização da pilha. Se o valor de origem mudar, a pilha consumidora não será atualizada automaticamente. Para captar as alterações, execute uma atualização na pilha consumidora.