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

Date de la dernière mise à jour : 12/11/2021

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.FSPDans 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.FSPCré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.FSPTransmettez la valeur de sortie de NestedStackA comme valeur de paramètre pour NestedStackB. Pour accéder à cette valeur dans la pile parente, utilisez la fonction Fn::GetAtt. Utilisez le nom logique de NestedStackA et le nom de la valeur en 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 ?


Besoin d'aide pour une question technique ou de facturation ?