

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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

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`
<a name="intrinsic-function-reference-getstackoutput"></a>

La funzione intrinseca `Fn::GetStackOutput` restituisce il valore di un output da un altro stack. Al contrario`Fn::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::GetStackOutput`crea 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::GetStackOutput`non supporta i riferimenti tra partizioni.

## Dichiarazione
<a name="w2aac24c43c11"></a>

### JSON
<a name="intrinsic-function-reference-getstackoutput-syntax.json"></a>

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

### YAML
<a name="intrinsic-function-reference-getstackoutput-syntax.yaml"></a>

È 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
<a name="w2aac24c43c13"></a>

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: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
<a name="w2aac24c43c15"></a>

Il valore dell'output specificato dallo stack di riferimento.

## Esempi
<a name="w2aac24c43c17"></a>

### Stesso account, stessa regione
<a name="intrinsic-function-reference-getstackoutput-example-same-account-region"></a>

L'esempio seguente fa riferimento all'`VpcId`output 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
<a name="intrinsic-function-reference-getstackoutput-example-same.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-same.yaml"></a>

```
Fn::GetStackOutput:
  StackName: ProducerStack
  OutputName: VpcId
```

### Stesso account, regione diversa
<a name="intrinsic-function-reference-getstackoutput-example-cross-region"></a>

L'esempio seguente fa riferimento all'`VpcId`output di `ProducerStack` deployed in`us-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
<a name="intrinsic-function-reference-getstackoutput-example-cross-region.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-cross-region.yaml"></a>

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

### Cross-account
<a name="intrinsic-function-reference-getstackoutput-example-cross-account"></a>

L'esempio seguente fa riferimento all'`VpcId`output di `ProducerStack` in account. `111111111111` Lo stack di consumo è in conto`222222222222`. `RoleArn`specifica un ruolo nell'account `111111111111` con `cloudformation:DescribeStacks` autorizzazioni, che deve essere assunto dal ruolo di esecuzione dello stack di consumo.

#### JSON
<a name="intrinsic-function-reference-getstackoutput-example-cross-account.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-cross-account.yaml"></a>

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

### Cross-account e Cross-region
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region"></a>

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
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region.yaml"></a>

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

## Configurazione del ruolo IAM
<a name="intrinsic-function-reference-getstackoutput-iam"></a>

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
<a name="w2aac24c43c21"></a>

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::GetStackOutput`esso 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](#intrinsic-function-reference-getstackoutput-limitations) 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
<a name="intrinsic-function-reference-getstackoutput-limitations"></a>

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::GetStackOutput`all'interno di un valore `Fn::Sub` variabile della mappa
+ `Fn::GetStackOutput`all'interno `Fn::Base64`
+ `Fn::GetStackOutput`come valore di `Outputs` sezione diretta
+ `Fn::GetStackOutput`all'`Fn::Equals`interno della `Conditions` sezione
+ `Fn::GetStackOutput`all'interno `Fn::ImportValue`

Usa `Fn::GetStackOutput` direttamente come valore della proprietà della risorsa o racchiudilo all'interno `Fn::Join``Fn::If`, oppure`Fn::Select`.

## Gestione degli errori
<a name="intrinsic-function-reference-getstackoutput-errors"></a>

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
<a name="intrinsic-function-reference-getstackoutput-errors-optin"></a>

È 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html).

## Usare Fn:: con GetStackOutput AWS Cloud Development Kit (AWS CDK)
<a name="intrinsic-function-reference-getstackoutput-cdk"></a>

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.](https://docs.aws.amazon.com/cdk/api/v2/)

## Confronto con Fn: ImportValue
<a name="intrinsic-function-reference-getstackoutput-comparison"></a>


| 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
<a name="intrinsic-function-reference-getstackoutput-best-practices"></a>
+ *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'`RoleArn`accesso tra account diversi, limita l'`DescribeStacks`autorizzazione 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.