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

Lecture de 3 minute(s)
0

Lorsque j'essaie de mettre à jour une variable d'exportation utilisée dans une autre pile AWS CloudFormation, je reçois un message d'erreur. L'erreur est la suivante : « Impossible de mettre à jour une variable d'exportation car elle est utilisée par une autre pile ».

Brève description

Pour résoudre cette erreur, utilisez les paramètres SSM dans le AWS Systems Manager Parameter Store pour partager les valeurs entre les piles CloudFormation. Un paramètre SSM stocke une valeur dans une pile (StackA) qu'une autre pile (StackB) peut utiliser.

Lorsque vous utilisez un paramètre SSM, il n'existe aucune dépendance entre les deux piles CloudFormation. Cela est dû au fait que le magasin de AWS Systems Manager Parameter Store la variable.

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

Résolution

1.    Créez une pile CloudFormation (StackA) basée sur le 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 créée. StackA crée un magasin de paramètres SSM dont le Nom est défini sur ZoneDeDisponibilité et la valeursur us-east-2a.

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

2.    Créez une autre pile CloudFormation (StackB) basée sur le 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"
        }
      }
    }
  }
}

Ce modèle utilise le paramètre SSM 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, remplacez le paramètre AvailabilityZone par us-east-2apar us-east-2b.

4.    Lancez l'instance depuis StackA dans la même zone de disponibilité mise à jour que StackB. L'instance est remplacée puis lancée dans la zone de disponibilité us-east-2b.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an