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-nameOutputName:output-nameRegion:regionRoleArn:role-arn
Como alternativa, você pode usar a forma abreviada:
!GetStackOutput StackName:stack-nameOutputName:output-nameRegion:regionRoleArn: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:DescribeStacksna 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::GetStackOutputdentro de um valorFn::Subde mapa variável -
Fn::GetStackOutputdentro deFn::Base64 -
Fn::GetStackOutputcomo um valor de seçãoOutputsdireto -
Fn::GetStackOutputdentro deFn::Equalsna seçãoConditions -
Fn::GetStackOutputdentro deFn::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::GetStackOutputcria 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
RoleArnpara acesso entre contas, restrinja a permissãoDescribeStacksao 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.