Questa è la nuova Guida di riferimento ai modelli CloudFormation . Aggiorna i segnalibri e i link. Per informazioni su come iniziare CloudFormation, consulta la Guida AWS CloudFormation per l'utente.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Ventilatore:: GetStackOutput
La funzione intrinseca Fn::GetStackOutput restituisce il valore di un output da un altro stack. Al contrarioFn::ImportValue, questa funzione non richiede che lo stack di riferimento esporti esplicitamente il valore di output. Supporta anche riferimenti tra account e tra regioni.
Usa questa funzione quando devi fare riferimento agli output in pila tra AWS account o regioni o quando desideri fare riferimento agli output senza gestire esportazioni esplicite.
Nota
Fn::GetStackOutputcrea un riferimento debole. Il valore di riferimento viene risolto al momento della creazione o dell'aggiornamento dello stack. Se lo stack o l'output di riferimento viene successivamente eliminato o modificato, lo stack di consumo non viene aggiornato o notificato automaticamente. Per garantire la coerenza, proteggete gli stack e gli output di riferimento da modifiche non intenzionali.
Nota
Fn::GetStackOutputnon supporta i riferimenti tra partizioni.
Dichiarazione
JSON
{ "Fn::GetStackOutput": { "StackName": "stack-name", "OutputName": "output-name", "Region": "region", "RoleArn": "role-arn" } }
YAML
È possibile utilizzare il nome completo della funzione:
Fn::GetStackOutput: StackName:stack-nameOutputName:output-nameRegion:regionRoleArn:role-arn
In alternativa, si può utilizzare il formato breve:
!GetStackOutput StackName:stack-nameOutputName:output-nameRegion:regionRoleArn:role-arn
Importante
Non è possibile utilizzare il formato abbreviato di !GetStackOutput quando contiene altre funzioni in forma abbreviata come !Sub o !Ref come valori di parametro. In tal caso, utilizzate il nome completo della funzione:
# Do not use !GetStackOutput StackName: !Ref MyStackNameParam OutputName: VpcId # Use this instead Fn::GetStackOutput: StackName: !Ref MyStackNameParam OutputName: VpcId
Parameters
- StackName
-
Il nome dello stack che contiene l'output a cui vuoi fare riferimento.
Obbligatorio: sì
- OutputName
-
L'ID logico dell'output a cui fare riferimento. Questa è la chiave definita nella sezione Outputs del modello dello stack di riferimento.
Obbligatorio: sì
- Region
-
La AWS regione in cui viene distribuito lo stack di riferimento. Il valore predefinito è la regione dello stack che viene creato o aggiornato.
Obbligatorio: no
- RoleArn
-
L'ARN di un ruolo IAM con
cloudformation:DescribeStacksautorizzazioni sullo stack di riferimento. Questo ruolo deve essere assunto dal ruolo di esecuzione dello stack creato o aggiornato. Il valore predefinito è il ruolo di esecuzione dello stack corrente. Utilizzate questo parametro quando fate riferimento a uno stack in un account diverso. AWSObbligatorio: no
Valore restituito
Il valore dell'output specificato dallo stack di riferimento.
Esempi
Stesso account, stessa regione
L'esempio seguente fa riferimento all'VpcIdoutput di uno stack denominato ProducerStack nello stesso account e nella stessa regione. Poiché no RoleArn è specificato Region o, CloudFormation utilizza la regione e il ruolo di esecuzione dello stack corrente.
JSON
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId
Stesso account, regione diversa
L'esempio seguente fa riferimento all'VpcIdoutput di ProducerStack deployed inus-west-2, mentre lo stack di consumo si trova in una regione diversa. Il Region parametro indica di CloudFormation cercare il valore di riferimento in. 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
Cross-account
L'esempio seguente fa riferimento all'VpcIdoutput di ProducerStack in account. 111111111111 Lo stack di consumo è in conto222222222222. RoleArnspecifica un ruolo nell'account 111111111111 con cloudformation:DescribeStacks autorizzazioni, che deve essere assunto dal ruolo di esecuzione dello stack di consumo.
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
Cross-account e Cross-region
L'esempio seguente fa riferimento a un output di uno stack in un account diverso e in una regione diversa. Vengono specificati entrambi Region i parametri RoleArn e.
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
Configurazione del ruolo IAM
Quando si utilizza il RoleArn parametro per i riferimenti tra account, il ruolo IAM deve disporre dell'autorizzazione a descrivere gli stack nell'account che contiene lo stack di riferimento:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks" ], "Resource": "*" } ] }
Suggerimento
Per una politica più restrittiva, limita lo stack ARN specifico Resource a cui desideri fare riferimento.
Il ruolo deve avere una politica di fiducia che conceda AssumeRole le autorizzazioni al ruolo di esecuzione dello stack di consumo:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:role/CloudFormationExecutionRole" }, "Action": "sts:AssumeRole" } ] }
Funzioni supportate
Le seguenti funzioni possono essere utilizzate all'interno dei valori dei parametri di Fn::GetStackOutput (ad esempio, per costruire l'or). StackName RoleArn Il valore di queste funzioni non può dipendere da una risorsa.
-
Fn::Base64 -
Fn::FindInMap -
Fn::If -
Fn::Join -
Fn::Select -
Fn::Sub -
Ref
Fn::GetStackOutputesso stesso può essere utilizzato nelle seguenti posizioni del modello:
-
Valore diretto della proprietà della risorsa
-
Interno
Fn::Join -
Interno
Fn::If -
Interno
Fn::Select
Vedi Limiti noti sotto per le posizioni che non sono ancora supportate.
Ad esempio, puoi usare Ref per passare un valore di parametro come nome dello stack:
Parameters: SourceStackName: Type: String Resources: MyResource: Type: AWS::EC2::Instance Properties: SubnetId: Fn::GetStackOutput: StackName: !Ref SourceStackName OutputName: SubnetId
Limiti noti
I seguenti modelli di utilizzo non sono supportati in questa versione. Tutti restituiscono un InternalFailure errore. Il supporto per questi modelli verrà aggiunto in un futuro aggiornamento.
-
Fn::GetStackOutputall'interno di un valoreFn::Subvariabile della mappa -
Fn::GetStackOutputall'internoFn::Base64 -
Fn::GetStackOutputcome valore diOutputssezione diretta -
Fn::GetStackOutputall'Fn::Equalsinterno dellaConditionssezione -
Fn::GetStackOutputall'internoFn::ImportValue
Usa Fn::GetStackOutput direttamente come valore della proprietà della risorsa o racchiudilo all'interno Fn::JoinFn::If, oppureFn::Select.
Gestione degli errori
CloudFormation convalida i Fn::GetStackOutput riferimenti durante le operazioni di creazione o aggiornamento dello stack. Di seguito sono riportati gli errori più comuni che si possono verificare:
-
Il ruolo IAM non può essere assunto: l'operazione Stack fallisce con un errore di accesso negato. Verifica che il ruolo possa essere assunto dal ruolo di esecuzione dello stack di consumo.
-
Il ruolo IAM non ha DescribeStacks l'autorizzazione: l'operazione Stack fallisce con un errore di accesso negato. Verifica che la politica di autorizzazione del ruolo includa.
cloudformation:DescribeStacks -
Lo stack di riferimento non esiste: l'operazione Stack ha esito negativo e viene visualizzato un errore di convalida che indica che lo stack non è stato trovato. Se hai incluso il
Regionparametro, verifica che questa sia la regione corretta per lo stack a cui desideri fare riferimento. -
La chiave di output non esiste nello stack di riferimento: l'operazione Stack ha esito negativo e viene generato un errore di convalida che indica che l'output non è stato trovato.
-
Lo stack di riferimento si trova in una regione non abilitata per l'account di destinazione. L'operazione Stack non riesce. Assicurati che la regione di destinazione sia abilitata nell'account che possiede lo stack di riferimento.
-
La regione di riferimento non è valida: l'operazione Stack ha esito negativo e viene generato un errore di convalida.
Riferimenti tra le regioni us-east-1 e opt-in
È possibile che si verifichi un errore durante l'implementazione di un riferimento tra la us-east-1 regione e una regione opt-in. Per evitare tali errori, segui questa guida per aggiornare la compatibilità dei token per l'endpoint STS globale.
Usare Fn:: con GetStackOutput AWS Cloud Development Kit (AWS CDK)
Il AWS Cloud Development Kit (AWS CDK) (CDK) supporta Fn::GetStackOutput l'Fn.getStackOutput()intero metodo. Quando sono presenti riferimenti interregionali o interaccount tra stack CDK, ora il CDK può essere utilizzato in Fn::GetStackOutput modo nativo anziché generare risorse personalizzate con parametri SSM. Ciò semplifica i modelli sintetizzati ed elimina la necessità della soluzione alternativa precedente. crossRegionReferences
Per ulteriori informazioni, consulta il CDK API Reference.
Confronto con Fn: ImportValue
| Funzionalità | Fn::ImportValue |
Fn::GetStackOutput |
|---|---|---|
| Stesso account, stessa regione | Supportata | Supportata |
| Cross-account | Non supportata | Supportata |
| Cross-Region | Non supportata | Supportata |
| Richiede un'esportazione esplicita | Sì | No |
| Tipo di riferimento | Strong (blocca l'eliminazione dello stack di esportazione) | Debole (risolto in fase di implementazione) |
| Integrità referenziale | Sì | No |
Da utilizzare Fn::ImportValue quando è necessaria una forte integrità referenziale all'interno dello stesso account e della stessa regione. Utilizzalo Fn::GetStackOutput quando hai bisogno di riferimenti tra account o tra aree geografiche o quando vuoi evitare di gestire esportazioni esplicite.
Best practice
-
Proteggi gli stack e gli output referenziati. Poiché
Fn::GetStackOutputcrea un riferimento debole, l'eliminazione dello stack di riferimento non impedisce la creazione o l'aggiornamento dello stack di consumo. Tuttavia, le operazioni successive che risolvono nuovamente il riferimento falliranno. Utilizza le policy di stack, la protezione dall'eliminazione o le policy IAM per prevenire l'eliminazione accidentale degli stack di riferimento. -
Ambita i ruoli IAM in modo ristretto. Quando configuri l'
RoleArnaccesso tra account diversi, limita l'DescribeStacksautorizzazione allo stack ARN specifico quando possibile. -
Fai attenzione ai tempi di risoluzione. Il valore di riferimento viene risolto al momento della creazione o dell'aggiornamento dello stack. Se il valore di origine cambia, lo stack di consumo non viene aggiornato automaticamente. Per rilevare le modifiche, esegui un aggiornamento sullo stack di consumo.