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

Date de la dernière mise à jour : 10/01/2020

Lorsque j'essaie de mettre à jour une variable d'exportation utilisée dans une autre pile AWS CloudFormation, je reçois le message d'erreur suivant : « Cannot update an export variable as it is in use by another stack » (Impossible de mettre à jour une variable d'export, car elle est utilisée par une autre pile). Comment puis-je résoudre cette erreur ?

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 AWS 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 AWS CloudFormation car la variable est stockée dans AWS Systems Manager Parameter Store.

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

Résolution

1.    Créez une pile AWS 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 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 AWS 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 ?

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


Vous avez besoin d’aide ?