View a markdown version of this page

Ventilatore:: GetStackOutput - AWS CloudFormation

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-name OutputName: output-name Region: region RoleArn: role-arn

In alternativa, si può utilizzare il formato breve:

!GetStackOutput StackName: stack-name OutputName: output-name Region: region RoleArn: 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:

OutputName

L'ID logico dell'output a cui fare riferimento. Questa è la chiave definita nella sezione Outputs del modello dello stack di riferimento.

Obbligatorio:

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:DescribeStacks autorizzazioni 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. AWS

Obbligatorio: 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 valore Fn::Sub variabile della mappa

  • Fn::GetStackOutputall'interno Fn::Base64

  • Fn::GetStackOutputcome valore di Outputs sezione diretta

  • Fn::GetStackOutputall'Fn::Equalsinterno della Conditions sezione

  • Fn::GetStackOutputall'interno Fn::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 Region parametro, 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 No
Tipo di riferimento Strong (blocca l'eliminazione dello stack di esportazione) Debole (risolto in fase di implementazione)
Integrità referenziale 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::GetStackOutput crea 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.