Comment transmettre des valeurs entre des piles imbriquées au sein de la même pile parent dans AWS CloudFormation ?

Dernière mise à jour : 12/06/2020

Je souhaite transmettre ou partager une valeur entre deux piles imbriquées au sein de la même pile parent dans AWS CloudFormation.

Brève description

La solution s'applique si :

  • Vous disposez de deux piles imbriquées, NestedStackA et NestedStackB qui font partie de la même pile parent.
  • Vous souhaitez utiliser une valeur de NestedStackA dans NestedStackB.

Solution

1.    Dans votre modèle AWS CloudFormation, transmettez la valeur que vous souhaitez partager en tant que sortie dans votre pile source (NestedStackA). Consultez les exemples JSON et YAML suivants.

JSON :

"Outputs": {
    "SharedValueOutput": {
        "Value": "yourValue",
        "Description": "You can refer to any resource from the template."
    }
}

YAML :

Outputs:
  SharedValueOutput:
    Value: yourValue         
    Description: You can refer to any resource from the template.

2.    Créez un paramètre dans la pile de destination (NestedStackB). Consultez les exemples JSON et YAML suivants.

JSON :

"Parameters": {
    "SharedValueParameter": {
        "Type": "String",
        "Description": "The shared value will be passed to this parameter by the parent stack."
    }
}

YAML :

Parameters: 
  SharedValueParameter: 
    Type: String
    Description: The shared value will be passed to this parameter by parent stack.

3.    Transmettez la valeur de sortie de NestedStackA comme valeur de paramètre pour NestedStackB. Pour accéder à cette valeur dans la pile parent, utilisez la fonction Fn::GetAtt avec le nom logique NestedStackA et le nom de la valeur de sortie au format Outputs.NestedStackOutputName . Consultez les exemples JSON et YAML suivants.

JSON :

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "NestedStackA": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": "<S3 URL for the template>"
      }
    },
    "NestedStackB": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": "<S3 URL for the template>",
        "Parameters": {
          "SharedValueParameter": {
            "Fn::GetAtt": [
              "NestedStackA",
              "Outputs.SharedValueOutput"
            ]
          }
        }
      }
    }
  }
}

YAML :

AWSTemplateFormatVersion: 2010-09-09
Resources:
  NestedStackA:
    Type: 'AWS::CloudFormation::Stack'
    Properties:
      TemplateURL: <S3 URL for the template>
  NestedStackB:
    Type: 'AWS::CloudFormation::Stack'
    Properties:
      TemplateURL: <S3 URL for the template>
      Parameters:
        SharedValueParameter: 
          Fn::GetAtt: 
          - NestedStackA
          - Outputs.SharedValueOutput

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?