Spécification de ressources existantes à l’exécution avec les types de paramètres fournis par CloudFormation - AWS CloudFormation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Spécification de ressources existantes à l’exécution avec les types de paramètres fournis par CloudFormation

Lors de la création de votre modèle, vous pouvez définir des paramètres qui obligent les utilisateurs à saisir des identifiants de ressources AWS existantes ou de paramètres Systems Manager grâce à des types spécialisés fournis par CloudFormation.

Présentation

Dans CloudFormation, les paramètres permettent de personnaliser vos piles en fournissant des valeurs d’entrée lors de la création ou de la mise à jour d’une pile. Cette caractéristique rend vos modèles réutilisables et flexibles dans divers scénarios.

Les paramètres sont définis dans la section Parameters d’un modèle CloudFormation. Chaque paramètre possède un nom et un type, et peut comporter des paramètres supplémentaires tels qu’une valeur par défaut et des valeurs autorisées. Pour de plus amples informations, consultez Syntaxe Parameters du modèle CloudFormation.

Le type de paramètre détermine le type de valeur que le paramètre peut accepter. Par exemple, Number accepte uniquement des valeurs numériques, tandis que String accepte des valeurs textuelles.

CloudFormation propose plusieurs types de paramètres supplémentaires à utiliser dans vos modèles pour référencer des ressources AWS existantes ou des paramètres Systems Manager.

Ces types de paramètres appartiennent à deux catégories :

  • Types de paramètres propres à AWS : CloudFormation fournit une série de types de paramètres qui permettent de détecter les valeurs non valides lors de la création ou de la mise à jour d’une pile. Lorsque vous utilisez ces types de paramètres, toute personne utilisant votre modèle doit obligatoirement spécifier des valeurs valides provenant du Compte AWS et de la région où elle crée la pile.

    Si l’utilisateur utilise la AWS Management Console, CloudFormation fournit une liste préremplie de valeurs existantes provenant de son compte et de sa région. Ainsi, l’utilisateur n’a pas besoin de mémoriser ou de saisir correctement un nom ou un ID spécifique. Il lui suffit de sélectionner des valeurs dans une liste déroulante. Dans certains cas, il peut même rechercher des valeurs par ID, par nom ou par valeur d’une balise Name.

  • Types de paramètres Systems Manager : CloudFormation fournit également des types de paramètres correspondant aux paramètres existants dans le magasin de paramètres Systems Manager. Lorsque vous utilisez ces types de paramètres, toute personne utilisant votre modèle doit saisir une clé de magasin de paramètres comme valeur pour le type de paramètre Systems Manager. CloudFormation extrait ensuite la dernière valeur du magasin de paramètres afin de l’utiliser dans la pile. Cela est particulièrement utile lorsque vous devez mettre à jour fréquemment une application avec de nouvelles valeurs, par exemple de nouveaux ID d’Amazon Machine Image (AMI). Pour plus d’informations sur le magasin de paramètres, consultez Magasin de paramètres Systems Manager.

Une fois les paramètres définis dans la section Parameters, vous pouvez référencer leurs valeurs dans tout votre modèle CloudFormation à l’aide de la fonction Ref.

Exemple

L’exemple suivant montre un modèle utilisant les types de paramètres suivants.

  • AWS::EC2::VPC::Id

  • AWS::EC2::Subnet::Id

  • AWS::EC2::KeyPair::KeyName

  • AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>

Pour créer une pile à partir de ce modèle, vous devez spécifier un ID VPC, un ID de sous-réseau et un nom de paire de clés existants dans votre compte. Vous pouvez également spécifier une clé de magasin de paramètres existante qui fait référence à l’ID d’AMI souhaité ou conserver la valeur par défaut de /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2. Ce paramètre public est un alias de l’ID AMI régional le plus récent pour l’AMI Amazon Linux 2. Pour plus d’informations sur les paramètres publics, consultez Découverte des paramètres publics dans le magasin de paramètres dans le Guide de l’utilisateur AWS Systems Manager.

JSON

{ "Parameters": { "VpcId": { "Description": ID of an existing Virtual Private Cloud (VPC)., "Type": AWS::EC2::VPC::Id }, "PublicSubnetId": { "Description": ID of an existing public subnet within the specified VPC., "Type": AWS::EC2::Subnet::Id }, "KeyName": { "Description": Name of an existing EC2 key pair to enable SSH access to the instance., "Type": AWS::EC2::KeyPair::KeyName }, "AMIId": { "Description": Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI)., "Type": AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>, "Default": /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 } }, "Resources": { "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "VpcId": { "Ref": "VpcId" }, "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } }, "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "ImageId": { "Ref": "AMIId" }, "NetworkInterfaces": [ { "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "SubnetId": { "Ref": "PublicSubnetId" }, "GroupSet": [{ "Ref": "InstanceSecurityGroup" }] } ] } } }, "Outputs": { "InstanceId": { "Value": { "Ref": "Ec2Instance" } } } }

YAML

Parameters: VpcId: Description: ID of an existing Virtual Private Cloud (VPC). Type: AWS::EC2::VPC::Id PublicSubnetId: Description: ID of an existing public subnet within the specified VPC. Type: AWS::EC2::Subnet::Id KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instance. Type: AWS::EC2::KeyPair::KeyName AMIId: Description: Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI). Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 Resources: InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 VpcId: !Ref VpcId SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 Ec2Instance: Type: AWS::EC2::Instance Properties: KeyName: !Ref KeyName ImageId: !Ref AMIId NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !Ref PublicSubnetId GroupSet: - !Ref InstanceSecurityGroup Outputs: InstanceId: Value: !Ref Ec2Instance

Commande AWS CLI pour créer la pile

La commande create-stack suivante crée une pile basée sur l’exemple de modèle.

aws cloudformation create-stack --stack-name MyStack \ --template-body file://sampletemplate.json \ --parameters \ ParameterKey="VpcId",ParameterValue="vpc-a123baa3" \ ParameterKey="PublicSubnetId",ParameterValue="subnet-123a351e" \ ParameterKey="KeyName",ParameterValue="MyKeyName" \ ParameterKey="AMIId",ParameterValue="MyParameterKey"

Pour utiliser un type de paramètre qui accepte une liste de chaînes, par exemple List<AWS::EC2::Subnet::Id>, vous devez échapper les virgules dans la ParameterValue à l’aide d’une double barre oblique inversée, comme illustré dans l’exemple suivant.

--parameters ParameterKey="SubnetIDs",ParameterValue="subnet-5ea0c127\\,subnet-6194ea3b\\,subnet-c87f2be0"

Considérations

Il est fortement recommandé d’utiliser des références dynamiques afin de restreindre l’accès aux définitions de configuration sensibles, comme les informations d’identification tierces. Pour de plus amples informations, consultez Obtenir les valeurs stockées dans d’autres services à l’aide de références dynamiques.

Si vous souhaitez permettre aux utilisateurs du modèle de spécifier des valeurs provenant de différents Comptes AWS, n’utilisez pas les types de paramètres propres à AWS. Définissez plutôt des paramètres de type String ou CommaDelimitedList.

Voici quelques éléments à garder à l’esprit sur les types de paramètres Systems Manager :

  • Vous pouvez voir les valeurs résolues des paramètres dans l’onglet Paramètres de la pile dans la console, ou en exécutant describe-stacks ou describe-change-set. Notez que ces valeurs sont définies lorsque la pile est créée ou mise à jour, elles peuvent donc différer des valeurs actuellement stockées dans le magasin de paramètres.

  • Pour les mises à jour de piles, lorsque vous utilisez l’option Utiliser la valeur existante (ou définissez UsePreviousValue sur « true »), cela signifie que vous souhaitez continuer à utiliser la même clé de magasin de paramètres, et non la même valeur. CloudFormation extrait toujours la valeur la plus récente.

  • Si vous spécifiez des valeurs autorisées ou d’autres contraintes, CloudFormation les valide uniquement par rapport aux clés que vous spécifiez, pas leurs valeurs. Vous devez valider les valeurs directement dans le magasin de paramètres.

  • Lorsque vous créez ou mettez à jour des piles et créez des jeux de modifications, CloudFormation utilise la valeur existant dans le magasin de paramètres au moment exact de l’opération. Si un paramètre spécifié n’existe pas dans le magasin de paramètres sous le Compte AWS de l’appelant, CloudFormation renvoie une erreur de validation.

  • Lorsque vous exécutez un jeu de modifications, CloudFormation utilise les valeurs spécifiées dans ce jeu. Vous devriez consulter ces valeurs avant d'exécuter le jeu de modifications, car celles-ci peuvent changer dans Parameter Store entre la création du jeu de modifications et son exécution.

  • Pour les paramètres du magasin de paramètres stockés dans le même Compte AWS, vous devez fournir le nom du paramètre. Pour les paramètres du magasin de paramètres partagés par un autre Compte AWS, vous devez fournir l’ARN complet des paramètres.

Prise en charge de types de paramètres spécifiques à AWS

CloudFormation prend en charge les types propres à AWS suivants :

AWS::EC2::AvailabilityZone::Name

Zone de disponibilité (, par exemple) us-west-2a.

AWS::EC2::Image::Id

ID d'image Amazon EC2 tel que ami-0ff8a91507f77f867. Notez que la console CloudFormation n’affiche pas de liste déroulante de valeurs pour ce type de paramètre.

AWS::EC2::Instance::Id

ID d'instance Amazon EC2, tel que i-1e731a32.

AWS::EC2::KeyPair::KeyName

Nom de paire de clés Amazon EC2.

AWS::EC2::SecurityGroup::GroupName

Nom d’un groupe de sécurité VPC par défaut, par exemple my-sg-abc.

AWS::EC2::SecurityGroup::Id

ID de groupe de sécurité (, par exemple) sg-a123fd85.

AWS::EC2::Subnet::Id

ID de sous-réseau (, par exemple) subnet-123a351e.

AWS::EC2::Volume::Id

ID de volume Amazon EBS, tel que vol-3cdd3f56.

AWS::EC2::VPC::Id

ID d'un VPC (, par exemple) vpc-a123baa3.

AWS::Route53::HostedZone::Id

ID de zone hébergée Amazon Route 53, tel que Z23YXV4OVPL04A.

List<AWS::EC2::AvailabilityZone::Name>

Tableau de zones de disponibilité d'une région (, par exemple) us-west-2a, us-west-2b.

List<AWS::EC2::Image::Id>

Tableau d'ID d'images Amazon EC2, tel que ami-0ff8a91507f77f867, ami-0a584ac55a7631c0c. Notez que la console CloudFormation n’affiche pas de liste déroulante de valeurs pour ce type de paramètre.

List<AWS::EC2::Instance::Id>

Tableau d'ID d'instances Amazon EC2, tel que i-1e731a32, i-1e731a34.

List<AWS::EC2::SecurityGroup::GroupName>

Tableau de noms de groupes de sécurité VPC par défaut, comme my-sg-abc, my-sg-def.

List<AWS::EC2::SecurityGroup::Id>

Tableau d'ID de groupe de sécurité (, par exemple) sg-a123fd85, sg-b456fd85.

List<AWS::EC2::Subnet::Id>

Tableau d'ID de sous-réseau (, par exemple) subnet-123a351e, subnet-456b351e.

List<AWS::EC2::Volume::Id>

Tableau d'ID de volumes Amazon EBS, tel que vol-3cdd3f56, vol-4cdd3f56.

List<AWS::EC2::VPC::Id>

Tableau d'ID de VPC (, par exemple) vpc-a123baa3, vpc-b456baa3.

List<AWS::Route53::HostedZone::Id>

Tableau d'ID de zones hébergées Amazon Route 53, tel que Z23YXV4OVPL04A, Z23YXV4OVPL04B.

Types de paramètres Systems Manager pris en charge

CloudFormation prend en charge les types de paramètres Systems Manager suivants :

AWS::SSM::Parameter::Name

Nom d'une clé de paramètre Systems Manager. Utilisez ce type de paramètre uniquement pour vérifier l’existence d’un paramètre obligatoire. CloudFormation ne cherchera pas la valeur réelle associée au paramètre.

AWS::SSM::Parameter::Value<String>

Un paramètre Systems Manager dont la valeur est une chaîne. C'est le type de paramètre String dans Parameter Store.

AWS::SSM::Parameter::Value<List<String>> or AWS::SSM::Parameter::Value<CommaDelimitedList>

Un paramètre Systems Manager dont la valeur est une liste de chaînes. C'est le type de paramètre StringList dans Parameter Store.

AWS::SSM::Parameter::Value<AWS-specific parameter type>

Paramètre Systems Manager dont la valeur est un type de paramètre propre à AWS.

L'exemple suivant spécifie le type AWS::EC2::KeyPair::KeyName :

  • AWS::SSM::Parameter::Value<AWS::EC2::KeyPair::KeyName>

AWS::SSM::Parameter::Value<List<AWS-specific parameter type>>

Paramètre Systems Manager dont la valeur est la liste des types de paramètres propres à AWS.

L'exemple suivant spécifie une liste de types AWS::EC2::KeyPair::KeyName :

  • AWS::SSM::Parameter::Value<List<AWS::EC2::KeyPair::KeyName>>

Types de paramètres Systems Manager non pris en charge

CloudFormation ne prend pas en charge les types de paramètres Systems Manager suivants :

  • Listes des types de paramètres Systems Manager, par exemple : List<AWS::SSM::Parameter::Value<String>>

En outre, CloudFormation ne prend pas en charge la définition des paramètres de modèle en tant que types de paramètres Systems Manager SecureString. Cependant, vous pouvez spécifier des chaînes sécurisées comme valeurs de paramètres pour certaines ressources. Pour de plus amples informations, consultez Obtenir les valeurs stockées dans d’autres services à l’aide de références dynamiques.