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.
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
La fonction intrinsèque Fn::GetStackOutput renvoie la valeur d'une sortie d'une autre pile. Contrairement à cette fonctionFn::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::GetStackOutputcré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::GetStackOutputne prend pas en charge les références entre partitions.
Déclaration
JSON
{ "Fn::GetStackOutput": { "StackName": "stack-name", "OutputName": "output-name", "Region": "region", "RoleArn": "role-arn" } }
YAML
Vous pouvez utiliser le nom complet de la fonction :
Fn::GetStackOutput: StackName:stack-nameOutputName:output-nameRegion:regionRoleArn:role-arn
Vous pouvez également utiliser la forme courte :
!GetStackOutput StackName:stack-nameOutputName:output-nameRegion:regionRoleArn: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
- 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:DescribeStacksautorisations 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
La valeur de la sortie spécifiée à partir de la pile référencée.
Exemples
Même compte, même région
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'RoleArnest spécifié, CloudFormation utilise la région et le rôle d'exécution de la pile actuelle.
JSON
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId
Même compte, région différente
L'exemple suivant fait référence à la VpcId sortie du produit ProducerStack déployé dansus-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 dansus-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'exemple suivant fait référence à la VpcId sortie de ProducerStack in account111111111111. La pile consommatrice est prise en compte222222222222. RoleArnSpé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
{ "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 et interrégional
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
{ "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
Configuration du rôle IAM
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
Les fonctions suivantes peuvent être utilisées dans les valeurs des paramètres de Fn::GetStackOutput (par exemple, pour construire le StackName ouRoleArn). 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::GetStackOutputlui-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 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
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 carteFn::Subvariable -
Fn::GetStackOutputà l'intérieurFn::Base64 -
Fn::GetStackOutputen tant que valeur deOutputssection directe -
Fn::GetStackOutputà l'intérieurFn::Equalsde laConditionssection -
Fn::GetStackOutputà l'intérieurFn::ImportValue
Fn::GetStackOutputUtilisez-la directement comme valeur de propriété de ressource ou insérez-la dans Fn::JoinFn::If, ouFn::Select.
Gestion des erreurs
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
Regionparamè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
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.
Utilisation de Fn : : GetStackOutput avec AWS Cloud Development Kit (AWS CDK)
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.
Comparaison avec Fn : ImportValue
| 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
-
Protégez les piles et les sorties référencées. Dans la
Fn::GetStackOutputmesure 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
RoleArnl'accès entre comptes, limitez l'DescribeStacksautorisation à 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.