View a markdown version of this page

Ventilateur : GetStackOutput - AWS CloudFormation

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

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 carte Fn::Sub variable

  • Fn::GetStackOutputà l'intérieur Fn::Base64

  • Fn::GetStackOutputen 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::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 inclutcloudformation: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

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::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'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.