Comment utiliser les paramètres dans AWS Systems Manager Parameter Store pour partager les valeurs entre les piles CloudFormation ?

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

Je reçois un message d'erreur lorsque j'essaie de mettre à jour une variable d'exportation utilisée dans une autre pile AWS CloudFormation. L'erreur est « Cannot update an export variable as it is in use by another stack. » (Impossible de mettre une variable d'exportation à jour car elle est utilisée par une autre pile).

Brève description

Pour résoudre cette erreur, utilisez les paramètres SSM dans AWS Systems Manager Parameter Store pour partager des valeurs entre les piles CloudFormation. Un paramètre SSM stocke une valeur dans une pile (stackA) qui peut être utilisée par une autre pile (stackB).

Lorsque vous utilisez un paramètre SSM, il n'y a pas de dépendance entre les deux piles CloudFormation. Cela est dû au fait que la variable est stockée dans l'AWS Systems Manager Parameter Store.

Remarque : CloudFormation prend en charge plusieurs types de paramètres SSM.

Résolution

1.    Créez une pile CloudFormation (par exemple, stackA) en fonction du modèle suivant :

{
  "AWSTemplateFormatVersion": "2010-09-09",

  "Parameters": {

    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availability Zone",
      "Type": "String"
    },

    "AMIId": {
      "Description": "The Amazon Machine Image id",
      "Type": "String"
    },

    "InstanceType": {
      "Description": "The Type of instance",
      "Type": "String"
    }
  },


  "Resources": {


    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Fn::GetAtt": ["BasicParameter", "Value"]
        },
        "ImageId": { "Ref": "AMIId" },
        "InstanceType": { "Ref": "InstanceType" }
      }
    },

    "BasicParameter": {
      "Type": "AWS::SSM::Parameter",
      "Properties": {
        "Name": "AvailabilityZone",
        "Type": "String",
        "Value": {
          "Ref": "AvailabilityZone"
        }

      }
    }
  }
}

Le modèle précédent crée une instance et un paramètre SSM. La valeur du paramètre SSM est définie sur la zone de disponibilité de l'instance qui est créée. stackA crée à présent un magasin de paramètres SSM avec « Name » (Nom) défini sur AvailabilityZone (Zone de disponibilité) et « Value » (Valeur) défini sur us-east-2a.

Remarque : vous devez utiliser un nom unique pour votre paramètre SSM.

2.    Créez une autre pile CloudFormation (par exemple, stackB) en fonction du modèle suivant.

{
  "AWSTemplateFormatVersion": "2010-09-09",
  
  "Parameters": {
    
"AMIId": {
  "Description": "The Amazon Machine Image id",
  "Type": "String"
},

"InstanceType": {
  "Description": "The Type of instance",
  "Type": "String"
}
    
    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availablity Zone",
      "Type": "AWS::SSM::Parameter::Value<String>",
      "Default": "AvailabilityZone"
    }

  },
  "Mappings": {

  },
  "Conditions": {

  },
  "Resources": {
    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Ref": "AvailabilityZone"
        },
        "ImageId": { "Ref": "AMIId" },
        "InstanceType": { "Ref": "InstanceType" }
      }
    }
  }
}

Le modèle précédent utilise le paramètre SSM qui a été créé par stackA à l'étape 1.

Remarque : pour utiliser ce paramètre, vous devez déclarer un paramètre dans stackB. Définissez Type sur AWS::SSM::Parameter::Value <String>. L'instance créée à partir de stackB est ensuite lancée dans la zone de disponibilité us-east-2a.

3.    Pour mettre à jour stackA, changez le paramètre AvailabilityZone de us-east-2a pour us-east-2b.

4.    Lancez l'instance à partir de stackA dans la même zone de disponibilité mise à jour que stackB.

À présent, l'instance est remplacée et lancée dans la zone de disponibilité us-east-2b.


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


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