

Il s’agit du nouveau *Guide de référence des modèles CloudFormation *. Veuillez mettre à jour vos favoris et vos liens. Pour obtenir de l'aide pour démarrer CloudFormation, consultez le [guide de AWS CloudFormation l'utilisateur](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# `Ventilateur : GetStackOutput`
<a name="intrinsic-function-reference-getstackoutput"></a>

La fonction intrinsèque `Fn::GetStackOutput` renvoie la valeur d'une sortie d'une autre pile. Contrairement à cette fonction`Fn::ImportValue`, il n'est pas nécessaire que la pile référencée exporte explicitement la valeur de sortie. Il prend également en charge les références entre comptes et entre régions.

Utilisez cette fonction lorsque vous devez référencer des sorties empilées entre AWS des comptes ou des régions, ou lorsque vous souhaitez référencer des sorties sans gérer d'exportations explicites.

**Note**  
`Fn::GetStackOutput`crée une référence faible. La valeur référencée est résolue au moment de la création ou de la mise à jour de la pile. Si la pile ou la sortie référencée est supprimée ou modifiée ultérieurement, la pile consommatrice n'est pas automatiquement mise à jour ni notifiée. Pour garantir la cohérence, protégez les piles et les sorties référencées contre les modifications involontaires.

**Note**  
`Fn::GetStackOutput`ne prend pas en charge les références entre partitions.

## Déclaration
<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>

Vous pouvez utiliser le nom complet de la fonction :

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

Vous pouvez également utiliser la forme courte :

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

**Important**  
Vous ne pouvez pas utiliser la forme abrégée `!GetStackOutput` lorsqu'elle contient d'autres fonctions abrégées telles que `!Sub` ou en tant `!Ref` que valeurs de paramètres. Dans ce cas, utilisez le nom complet de la fonction :  

```
# 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  
Le nom de la pile qui contient la sortie à laquelle vous souhaitez faire référence.  
*Obligatoire* : oui

OutputName  
ID logique de la sortie à référencer. Il s'agit de la clé définie dans la section Sorties du modèle de la pile référencée.  
*Obligatoire* : oui

Région  
 AWS Région dans laquelle la pile référencée est déployée. La valeur par défaut est la région de la pile en cours de création ou de mise à jour.  
*Obligatoire* : non

RoleArn  
L'ARN d'un rôle IAM doté d'`cloudformation:DescribeStacks`autorisations sur la pile référencée. Ce rôle doit être assumé par le rôle d'exécution de la pile créée ou mise à jour. Par défaut, c'est le rôle d'exécution de la pile actuelle. Utilisez ce paramètre lorsque vous référencez une pile dans un autre AWS compte.  
*Obligatoire* : non

## Valeur renvoyée
<a name="w2aac24c43c15"></a>

La valeur de la sortie spécifiée à partir de la pile référencée.

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

### Même compte, même région
<a name="intrinsic-function-reference-getstackoutput-example-same-account-region"></a>

L'exemple suivant fait référence à la `VpcId` sortie d'une pile nommée `ProducerStack` dans le même compte et dans la même région. Comme aucun `Region` ou n'`RoleArn`est spécifié, CloudFormation utilise la région et le rôle d'exécution de la pile actuelle.

#### 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
```

### Même compte, région différente
<a name="intrinsic-function-reference-getstackoutput-example-cross-region"></a>

L'exemple suivant fait référence à la `VpcId` sortie du produit `ProducerStack` déployé dans`us-west-2`, alors que la pile consommatrice se trouve dans une région différente. Le `Region` paramètre indique CloudFormation de rechercher la valeur référencée dans`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'exemple suivant fait référence à la `VpcId` sortie de `ProducerStack` in account`111111111111`. La pile consommatrice est prise en compte`222222222222`. `RoleArn`Spécifie un rôle dans le compte `111111111111` avec `cloudformation:DescribeStacks` des autorisations, qui doit être assumé par le rôle d'exécution de la pile consommatrice.

#### 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 et interrégional
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region"></a>

L'exemple suivant fait référence à une sortie provenant d'une pile d'un autre compte et d'une autre région. Les `Region` paramètres `RoleArn` et sont tous deux spécifiés.

#### 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
```

## Configuration du rôle IAM
<a name="intrinsic-function-reference-getstackoutput-iam"></a>

Lorsque vous utilisez le `RoleArn` paramètre pour les références entre comptes, le rôle IAM doit être autorisé à décrire les piles du compte contenant la pile référencée :

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

**Astuce**  
Pour une politique plus restrictive, étendez le champ d'application `Resource` à l'ARN de pile spécifique que vous souhaitez référencer.

Le rôle doit avoir une politique de confiance qui accorde des `AssumeRole` autorisations au rôle d'exécution de la pile consommatrice :

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

## Fonctions prises en charge
<a name="w2aac24c43c21"></a>

Les fonctions suivantes peuvent être utilisées dans les valeurs des paramètres de `Fn::GetStackOutput` (par exemple, pour construire le `StackName` ou`RoleArn`). La valeur de ces fonctions ne peut pas dépendre d'une ressource.
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

`Fn::GetStackOutput`lui-même peut être utilisé dans les positions de modèle suivantes :
+ Valeur directe de la propriété de la ressource
+ À l'intérieur `Fn::Join`
+ À l'intérieur `Fn::If`
+ À l'intérieur `Fn::Select`

Voir [Limitations connues](#intrinsic-function-reference-getstackoutput-limitations) ci-dessous les postes qui ne sont pas encore pris en charge.

Par exemple, vous pouvez utiliser `Ref` pour transmettre une valeur de paramètre comme nom de pile :

```
Parameters:
  SourceStackName:
    Type: String

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

## Limitations connues
<a name="intrinsic-function-reference-getstackoutput-limitations"></a>

Les modèles d'utilisation suivants ne sont pas pris en charge dans cette version. Toutes renvoient un `InternalFailure` message d'erreur. Support pour ces modèles sera ajouté dans une future mise à jour.
+ `Fn::GetStackOutput`à l'intérieur d'une valeur de carte `Fn::Sub` variable
+ `Fn::GetStackOutput`à l'intérieur `Fn::Base64`
+ `Fn::GetStackOutput`en tant que valeur de `Outputs` section directe
+ `Fn::GetStackOutput`à l'intérieur `Fn::Equals` de la `Conditions` section
+ `Fn::GetStackOutput`à l'intérieur `Fn::ImportValue`

`Fn::GetStackOutput`Utilisez-la directement comme valeur de propriété de ressource ou insérez-la dans `Fn::Join``Fn::If`, ou`Fn::Select`.

## Gestion des erreurs
<a name="intrinsic-function-reference-getstackoutput-errors"></a>

CloudFormation valide les `Fn::GetStackOutput` références lors des opérations de création ou de mise à jour de piles. Les erreurs les plus courantes que vous pouvez rencontrer sont les suivantes :
+ Le *rôle IAM ne peut pas être assumé* : l'opération Stack échoue avec une erreur de refus d'accès. Vérifiez que le rôle peut être assumé par le rôle d'exécution de la pile consommatrice.
+ Le *rôle IAM n'est pas DescribeStacks autorisé : l'*opération Stack échoue avec une erreur de refus d'accès. Vérifiez que la politique d'autorisation du rôle inclut`cloudformation:DescribeStacks`.
+ *La pile référencée n'existe pas* — L'opération de pile échoue avec une erreur de validation indiquant que la pile n'a pas été trouvée. Si vous avez inclus le `Region` paramètre, vérifiez qu'il s'agit de la bonne région pour la pile que vous souhaitez référencer.
+ *La clé de sortie n'existe pas sur la pile référencée* — L'opération de pile échoue avec une erreur de validation indiquant que la sortie n'a pas été trouvée.
+ *La pile référencée se trouve dans une région qui n'est pas activée pour le compte de destination*. L'opération de pile échoue. Assurez-vous que la région cible est activée dans le compte propriétaire de la pile référencée.
+ *La région référencée n'est pas valide* : l'opération de pile échoue avec une erreur de validation.

### Références entre les régions us-east-1 et opt-in
<a name="intrinsic-function-reference-getstackoutput-errors-optin"></a>

Il se peut que vous rencontriez une erreur lors de la mise en œuvre d'une référence entre la `us-east-1` région et une région optionnelle. Pour éviter de telles erreurs, suivez [ce guide pour mettre à jour la compatibilité des jetons pour le point de terminaison STS global](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html).

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

Le AWS Cloud Development Kit (AWS CDK) (CDK) prend en charge `Fn::GetStackOutput` le `Fn.getStackOutput()` procédé. Lorsque vous avez des références entre régions ou entre comptes entre des piles de CDK, le CDK peut désormais les utiliser de `Fn::GetStackOutput` manière native au lieu de générer des ressources personnalisées avec des paramètres SSM. Cela simplifie les modèles synthétisés et élimine le besoin de la solution de `crossRegionReferences` contournement précédente.

Pour plus d'informations, consultez la [référence de l'API CDK](https://docs.aws.amazon.com/cdk/api/v2/).

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


| Capacité | `Fn::ImportValue` | `Fn::GetStackOutput` | 
| --- | --- | --- | 
| Même compte, même région | Pris en charge | Pris en charge | 
| Cross-account | Non pris en charge | Pris en charge | 
| Cross-Region | Non pris en charge | Pris en charge | 
| Nécessite une exportation explicite | Oui | Non | 
| Type de référence | Fort (bloque la suppression de la pile d'exportation) | Faible (résolu au moment du déploiement) | 
| Intégrité référentielle | Oui | Non | 

`Fn::ImportValue`À utiliser lorsque vous avez besoin d'une solide intégrité référentielle au sein d'un même compte et d'une même région. `Fn::GetStackOutput`À utiliser lorsque vous avez besoin de références entre comptes ou entre régions, ou lorsque vous souhaitez éviter de gérer des exportations explicites.

## Bonnes pratiques
<a name="intrinsic-function-reference-getstackoutput-best-practices"></a>
+ *Protégez les piles et les sorties référencées.* Dans la `Fn::GetStackOutput` mesure où cela crée une référence faible, la suppression de la pile référencée n'empêche pas la création ou la mise à jour de la pile consommatrice. Cependant, les opérations suivantes qui rerésolvent la référence échoueront. Utilisez des politiques de pile, une protection contre la suppression ou des politiques IAM pour empêcher la suppression accidentelle de piles référencées.
+ *Élargissez votre champ d'application des rôles IAM.* Lorsque vous configurez `RoleArn` l'accès entre comptes, limitez l'`DescribeStacks`autorisation à l'ARN de pile spécifique dans la mesure du possible.
+ *Soyez conscient du calendrier de résolution.* La valeur référencée est résolue au moment de la création ou de la mise à jour de la pile. Si la valeur source change, la pile consommatrice n'est pas automatiquement mise à jour. Pour prendre en compte les modifications, effectuez une mise à jour sur la pile consommatrice.