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.
Utiliser AWS CloudFormation Designer pour modifier le modèle d'une pile
Note
Infrastructure Composer en mode CloudFormation console est une amélioration par rapport à AWS CloudFormation Designer. Nous vous recommandons d'utiliser Infrastructure Composer au lieu de Designer dans la mesure du possible. Pour de plus amples informations, veuillez consulter Créez des modèles visuellement avec Infrastructure Composer.
Vous pouvez utiliser AWS CloudFormation Designer pour modifier le modèle d'une pile, puis le soumettre pour mettre AWS CloudFormation à jour la pile. Généralement, lorsque vous modifiez une pile, vous devez obtenir une copie de son modèle, le modifier dans un éditeur de texte, puis l'utiliser CloudFormation pour mettre à jour la pile. Avec AWS CloudFormation Designer, vous pouvez rapidement obtenir une copie du modèle de n'importe quelle pile en cours d'exécution, le modifier, puis mettre à jour la pile sans jamais quitter la console.
Dans cette procédure détaillée, nous allons commencer avec une pile de serveur web base que nous modifierons pour que le serveur web soit évolutif et durable.
Dans cette procédure, nous effectuerons les étapes suivantes :
-
Récupérer le modèle d'une pile.
Nous allons récupérer une copie du modèle d'une pile en cours d'exécution, soit la même pile de serveur web de base que celle de la procédure suivante : Utiliser AWS CloudFormation Designer pour créer un serveur Web de base.
-
Nous utiliserons AWS CloudFormation Designer pour modifier le modèle de la pile afin de rendre votre site Web évolutif et durable en remplaçant l'EC2instance par un groupe Auto Scaling et un équilibreur de charge Elastic Load Balancing.
-
Après avoir enregistré les modifications, nous allons mettre à jour la pile de serveur web de base avec le modèle modifié.
Note
CloudFormation est un service gratuit ; toutefois, les AWS ressources que vous incluez dans vos piles vous sont facturées au taux en vigueur pour chacune d'entre elles. Pour plus d'informations sur la tarification AWS , veuillez consulter la page de détails de chaque produit sur http://aws.amazon.com
. -
Nous supprimerons la pile pour nettoyer toutes les ressources.
Prérequis
Cette procédure pas à pas suppose que vous avez une connaissance pratique d'Amazon Virtual Private Cloud (AmazonVPC), d'Auto Scaling, d'Elastic Load Balancing et CloudFormation. Chaque procédure fournit quelques informations contextuelles de base sur chaque ressource.
En outre, vous devez avoir suivi la procédure Utiliser AWS CloudFormation Designer pour créer un serveur Web de base au préalable. Si tel est le cas, vous devriez avoir une pile en cours d'exécution dénommée BasicWebServerStack
.
Étape 1 : Récupération du modèle de la pile
Dans cette étape, nous allons utiliser AWS CloudFormation Designer pour obtenir et ouvrir une copie du modèle d'une pile en cours d'exécution.
Pour obtenir une copie du modèle d'une pile en cours d'exécution
-
Ouvrez la CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation/
. -
Dans la liste des piles, sélectionnez
BasicWebServerStack
. -
Choisissez Actions puis Afficher/Modifier un modèle dans Designer.
CloudFormation obtient une copie du modèle de la BasicWebServerStack
pile et l'affiche dans AWS CloudFormation Designer, où vous pouvez consulter les ressources du modèle et leurs relations. Dans l'étape suivante, nous utiliserons AWS CloudFormation Designer pour modifier le modèle.
Étape 2 : Modification d'un modèle
Nous modifierons le modèle de serveur Web de base en utilisant l' drag-and-dropinterface et l'YAMLéditeur intégrés JSON de AWS CloudFormation Designer pour remplacer l'EC2instance Amazon unique par un groupe Auto Scaling et un équilibreur de charge afin de rendre le site Web évolutif. Si le trafic vers le site web augmente soudainement, utilisez Auto Scaling pour accroître rapidement le nombre de serveurs web. L'équilibreur de charges répartira le trafic de manière uniforme entre les instances.
Pour modifier le modèle d'une pile
-
Supprimez la ressource
WebServerInstance
.-
Cliquez sur la ressource
WebServerInstance
avec le bouton droit de la souris. -
Dans le menu des ressources, choisissez Supprimer (icône de corbeille).
-
Choisissez OK pour confirmer.
-
-
Dans le volet Types de ressources, ajoutez les ressources suivantes à la
PublicSubnet
ressource : AutoScalingGroupLaunchConfiguration, et LoadBalancer. Avant d'ajouter ces ressources, vous devrez peut-être développer le sous-réseau pour inclure toutes les ressources.Les ressources sont organisées en catégories. Le groupe Auto Scaling et la configuration de lancement appartiennent à la AutoScalingcatégorie, et l'équilibreur de charge appartient à la ElasticLoadBalancingcatégorie.
Note
Ces ressources ne suivent pas le modèle de conteneur. AWS CloudFormation Designer ne les associe donc pas automatiquement au sous-réseau. Nous créerons des connexions plus loin dans cette étape.
-
Dans le volet Types de ressources de la EC2catégorie, ajoutez la SecurityGroupressource n'importe où dans le sous-réseau, VPC sauf dans le sous-réseau.
Ce groupe de sécurité contrôlera le trafic entrant et sortant de l'équilibreur de charge.
-
Renommez les ressources afin qu'elles soient plus faciles à identifier :
-
Renommez AutoScalingGroup en
WebServerFleet
-
Renommez LaunchConfiguration en
WebServerLaunchConfig
-
Renommez LoadBalancer en
PublicElasticLoadBalancer
-
Renommez SecurityGroup en
PublicLoadBalancerSecurityGroup
-
-
Créez des associations pour les ressources que vous avez ajoutées.
-
Associez l'équilibreur de charge et les ressources du groupe Auto Scaling au sous-réseau public :
-
A partir de la ressource
PublicElasticLoadBalancer
, faites glisser la connexionAWS::EC2::Subnet (Property: Subnets)
vers la ressourcePublicSubnet
. -
A partir de la ressource
WebServerFleet
, faites glisser la connexionAWS::EC2::Subnet (Property: VPCZoneIdentifier)
vers la ressourcePublicSubnet
.
-
-
Associez l'équilibreur de charge à ce groupe de sécurité :
-
A partir de la ressource
PublicElasticLoadBalancer
, faites glisser la connexionAWS::EC2::SecurityGroup (Property: SecurityGroups)
vers la ressourcePublicLoadBalancerSecurityGroup
.
-
-
Associez le groupe Auto Scaling à l'équilibreur de charge et à la configuration de lancement :
-
A partir de la ressource
WebServerFleet
, faites glisser la connexionAWS::ElasticLoadBalancing::LoadBalancer (Property: LoadBalancerNames)
vers la ressourcePublicElasticLoadBalancer
. -
A partir de la ressource
WebServerFleet
, faites glisser la connexionAWS::ElasticLoadBalancing::LaunchConfiguration (Property: LaunchConfigurationName)
vers la ressourceWebServerLaunchConfig
.
-
-
Associez la configuration de lancement au groupe de sécurité :
-
A partir de la ressource
WebServerLaunchConfig
, faites glisser la connexionAWS::EC2::SecurityGroup (Property: SecurityGroups)
vers la ressourceWebServerSecurityGroup
.
-
-
Définissez une dépendance pour le groupe Auto Scaling au routage public :
-
A partir de la ressource
WebServerFleet
, faites glisser la connexionDependsOn
vers la ressourcePublicRoute
.
Cette dépendance signifie que la
WebServerFleet
ressource CloudFormation ne sera pas créée tant que la route publique ne sera pas terminée. Sinon, si la route publique n'est pas disponible au démarrage des instances du serveur Web, elles ne seront pas en mesure d'envoyer des signaux (à l'aide du script d'assistance cfn-signal) pour avertir CloudFormation lorsque leurs configurations et leurs déploiements d'applications seront terminés. -
-
-
Spécifiez les propriétés des ressources que vous avez ajoutées.
-
Sur le canevas AWS CloudFormation Designer, choisissez la
PublicElasticLoadBalancer
ressource. -
Dans le volet de l'un éditeur intégré, choisissez l'onglet Properties (Propriétés), puis copiez l'extrait suivant et collez-le entre les accolades de la section Properties (Propriétés) (
{}
).AWS CloudFormation Designer a automatiquement ajouté le groupe de sécurité et l'association de sous-réseaux. Vous devez donc ajouter uniquement les
HealthCheck
propriétésListeners
et. La propriétéListeners
spécifie quel type de trafic écouter et à quel endroit, tandis que la propriétéHealthCheck
décrit les paramètres permettant de déterminer l'état de l'équilibreur de charge.JSON
"Listeners": [ { "LoadBalancerPort": "80", "InstancePort": "80", "Protocol": "HTTP" } ], "HealthCheck": { "Target": "HTTP:80/", "HealthyThreshold": "3", "UnhealthyThreshold": "5", "Interval": "90", "Timeout": "60" }, "SecurityGroups": [ { "Ref": "PublicLoadBalancerSecurityGroup" } ], "Subnets": [ { "Ref": "PublicSubnet" } ]
YAML
Listeners: - LoadBalancerPort: '80' InstancePort: '80' Protocol: HTTP HealthCheck: Target: 'HTTP:80/' HealthyThreshold: '3' UnhealthyThreshold: '5' Interval: '90' Timeout: '60' SecurityGroups: - !Ref PublicLoadBalancerSecurityGroup Subnets: - !Ref PublicSubnet
-
Répétez ce processus pour les ressources suivantes :
WebServerFleet
-
Ajoutez les propriétés
MaxSize
,MinSize
etDesiredCapacity
. Ces propriétés spécifient le nombre maximal et minimal d'instances que vous pouvez lancer dans le groupe Auto Scaling et le nombre initial d'instances avec lesquelles commencer. La valeur correspondant à la capacité souhaitée fait référence à un nouveau paramètre, que nous ajouterons ultérieurement dans cette procédure.JSON
"MinSize": "1", "MaxSize": "10", "DesiredCapacity": { "Ref": "WebServerCount" }, "VPCZoneIdentifier": [ { "Ref": "PublicSubnet" } ], "LaunchConfigurationName": { "Ref": "WebServerLaunchConfig" }, "LoadBalancerNames": [ { "Ref": "PublicElasticLoadBalancer" } ]
YAML
MinSize: '1' MaxSize: '10' DesiredCapacity: !Ref WebServerCount VPCZoneIdentifier: - !Ref PublicSubnet LaunchConfigurationName: !Ref WebServerLaunchConfig LoadBalancerNames: - !Ref PublicElasticLoadBalancer
PublicLoadBalancerSecurityGroup
-
Ajoutez les règles entrantes et sortantes suivantes pour déterminer le trafic qui peut atteindre et quitter l'équilibreur de charge. Les règles permettent à tout le HTTP trafic d'atteindre et de quitter l'équilibreur de charge.
JSON
"GroupDescription": "Public Elastic Load Balancing security group with HTTP access on port 80 from the Internet", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "CidrIp": "0.0.0.0/0" } ], "SecurityGroupEgress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "CidrIp": "0.0.0.0/0" } ], "VpcId": { "Ref": "VPC" }
YAML
GroupDescription: >- Public Elastic Load Balancing security group with HTTP access on port 80 from the Internet SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 SecurityGroupEgress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 VpcId: !Ref VPC
WebServerSecurityGroup
-
Modifiez la règle HTTP entrante pour autoriser uniquement le trafic provenant de l'équilibreur de charge.
JSON
"GroupDescription": "Allow access from load balancer and SSH traffic", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "SourceSecurityGroupId": { "Ref": "PublicLoadBalancerSecurityGroup" } }, { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": { "Ref": "SSHLocation" } } ], "VpcId": { "Ref": "VPC" }
YAML
VpcId: !Ref VPC GroupDescription: Allow access from load balancer and SSH traffic SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 SourceSecurityGroupId: !Ref PublicLoadBalancerSecurityGroup - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: !Ref SSHLocation
WebServerLaunchConfig
-
La configuration de lancement inclut différentes propriétés que vous devez spécifier. Nous mettrons uniquement l'accent sur quelques-unes d'entre elles. Les propriétés
InstanceType
etImageId
utilisent les valeurs de paramètre et de mappage qui étaient déjà spécifiées dans le modèle. Vous spécifiez le type d'instance comme valeur de paramètre lorsque vous créez une pile. La valeurImageId
est un mappage qui s'appuie sur la région de la pile et le type d'instance que vous avez spécifié.Dans la propriété
UserData
, nous spécifions des scripts de configuration qui s'exécutent une fois que l'instance est opérationnelle. Les informations de configuration sont définies dans les métadonnées de l'instance, que nous ajouterons à l'étape suivante.JSON
"InstanceType": { "Ref": "InstanceType" }, "ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ] } ] }, "KeyName": { "Ref": "KeyName" }, "AssociatePublicIpAddress": "true", "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "# Install the files and packages from the metadata\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerLaunchConfig ", " --configsets All ", " --region ", { "Ref": "AWS::Region" }, "\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerFleet ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } }, "SecurityGroups": [ { "Ref": "WebServerSecurityGroup" } ]
YAML
InstanceType: !Ref InstanceType ImageId: !FindInMap - AWSRegionArch2AMI - !Ref 'AWS::Region' - !FindInMap - AWSInstanceType2Arch - !Ref InstanceType - Arch KeyName: !Ref KeyName AssociatePublicIpAddress: 'true' UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -xe - | yum install -y aws-cfn-bootstrap - | # Install the files and packages from the metadata - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerLaunchConfig ' - ' --configsets All ' - ' --region ' - !Ref 'AWS::Region' - |+ - | # Signal the status from cfn-init - '/opt/aws/bin/cfn-signal -e $? ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerFleet ' - ' --region ' - !Ref 'AWS::Region' - |+ SecurityGroups: - !Ref WebServerSecurityGroup
-
-
Ajoutez les métadonnées de la configuration de lancement à la ressource
WebServerLaunchConfig
, qui indique au script d'assistant cfn-init de démarrer le serveur web et de créer une page web de base.-
Choisissez la ressource
WebServerLaunchConfig
, puis l'onglet Metadata (Métadonnées) dans l'un éditeur intégré. -
Si vous créez votre modèle dans JSON : entre
Metadata
accolades ({}
), après l'accoladeAWS::CloudFormation::Designer
fermante, ajoutez une virgule ().,
-
Ajoutez l'extrait suivant, qui indique au script d'assistant cfn-init de démarrer le serveur web et de créer une page web de base, après la propriété
AWS::CloudFormation::Designer
.JSON
"AWS::CloudFormation::Init" : { "configSets" : { "All" : [ "ConfigureSampleApp" ] }, "ConfigureSampleApp" : { "packages" : { "yum" : { "httpd" : [] } }, "files" : { "/var/www/html/index.html" : { "content" : { "Fn::Join" : ["\n", [ "<h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1>" ]]}, "mode" : "000644", "owner" : "root", "group" : "root" } }, "services" : { "sysvinit" : { "httpd" : { "enabled" : "true", "ensureRunning" : "true" } } } } }
YAML
'AWS::CloudFormation::Init': configSets: All: - ConfigureSampleApp ConfigureSampleApp: packages: yum: httpd: [] files: /var/www/html/index.html: content: !Join - |+ - - >- <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> mode: '000644' owner: root group: root services: sysvinit: httpd: enabled: 'true' ensureRunning: 'true'
-
-
Ajoutez le paramètre
WebServerCount
. Ce paramètre indique le nombre d'instances à CloudFormation créer lors de la création du groupe Auto Scaling.-
Sélectionnez dans une zone ouverte du canevas AWS CloudFormation Designer.
-
Dans le volet de l'un éditeur intégré, choisissez l'onglet Paramètres.
-
Ajoutez le paramètre suivant dans le volet de l'un éditeur intégré. Si vous créez le modèle dansJSON, ajoutez une virgule si nécessaire.
JSON
"WebServerCount": { "Description": "Number of Amazon EC2 instances to launch for the WebServer server", "Type": "Number", "Default": "1" }
YAML
WebServerCount: Description: Number of Amazon EC2 instances to launch for the WebServer server Type: Number Default: '1'
-
-
Modifiez la sortie du modèle pour afficher le DNS nom de l'équilibreur de charge.
-
Dans le volet de l'un éditeur intégré, choisissez l'onglet Sorties.
-
Modifiez le JSON pour utiliser le DNS nom de l'équilibreur de charge, comme indiqué dans l'extrait de code suivant.
JSON
{ "Outputs": { "URL": { "Value": { "Fn::GetAtt": [ "PublicElasticLoadBalancer", "DNSName" ] }, "Description": "Newly created application URL" } } }
Si vous créez votre modèle dansYAML, utilisez l'extrait de code suivant.
Outputs: URL: Value: !GetAtt - PublicElasticLoadBalancer - DNSName Description: Newly created application URL
-
-
Dans la barre d'outils AWS CloudFormation Designer, choisissez Valider le modèle (icône de case à cocher) pour vérifier les erreurs de syntaxe dans votre modèle.
Affichez et corrigez les erreurs dans le panneau Messages, puis validez le modèle à nouveau. Si vous ne voyez pas d'erreur, le modèle est valide du point de vue syntaxique.
-
Dans la barre d'outils de AWS CloudFormation Designer, enregistrez le modèle localement en choisissant le menu Fichier (icône du fichier), puis Enregistrer.
Vous disposez désormais d'un CloudFormation modèle modifié que vous pouvez utiliser pour mettre à jour la pile de serveurs Web de base. A l'étape suivante, nous utiliserons ce modèle pour mettre à jour la pile du serveur web de base.
Étape 3 : Mise à jour la pile
Pour mettre en œuvre les modifications du modèle, nous devons mettre à jour la pile du serveur web de base. Vous pouvez lancer l'assistant CloudFormation Update Stack directement depuis AWS CloudFormation Designer.
Pour mettre à jour la pile
-
Dans la barre d'outils de AWS CloudFormation Designer, choisissez Create Stack (icône en forme de nuage avec flèche vers le haut).
AWS CloudFormation Designer enregistre le modèle ouvert dans un compartiment S3, puis lance l'assistant CloudFormation Update Stack. Comme nous avons modifié le modèle de la
BasicWebServerStack
pile, CloudFormation lance l'assistant de mise à jour de la pile pour cette pile. -
CloudFormation remplit automatiquement le modèle URL ; choisissez Next.
-
Dans le champ Name (Nom) de la section Stack (Pile), vérifiez que le nom de la pile est
BasicWebServerStack
. -
Dans la section Parameters (Paramètres), utilisez les valeurs existantes, puis choisissez Suivant.
-
Dans cette procédure détaillée, vous n'avez pas besoin d'ajouter des balises ni de spécifier des paramètres avancés. Dès lors, cliquez sur Suivant.
-
Assurez-vous que le nom de la pile est correct, puis choisissez Mettre à jour.
La mise à jour de CloudFormation votre stack peut prendre plusieurs minutes. Pour surveiller la progression, affichez les événements de la pile. Pour de plus amples informations, veuillez consulter Afficher les informations relatives à la pile depuis la CloudFormation console. Une fois la pile mise à jour, consultez les sorties de la pile et rendez-vous sur le site Web URL pour vérifier que le site Web fonctionne. Pour de plus amples informations, veuillez consulter Afficher les informations relatives à la pile depuis la CloudFormation console. Vous avez correctement mis à jour un modèle et une pile à l'aide de AWS CloudFormation Designer.
Pour vous assurer que des services inutilisés ne vous sont pas facturés, vous pouvez supprimer cette pile.
Étape 4 : Nettoyer les ressources
Pour vous assurer que des services inutilisés ne vous sont pas facturés, supprimez la pile et ses ressources.
Pour supprimer la pile
-
Dans la CloudFormation console, choisissez la BasicWebServerStackpile.
-
Choisissez Supprimer pile.
-
Dans le message de confirmation, choisissez Oui, supprimer.
La suppression de votre pile peut prendre plusieurs minutes. CloudFormation Pour surveiller la progression, affichez les événements de la pile. Une fois que la pile a été supprimée, toutes les ressources que vous avez créées sont supprimées. Maintenant que vous savez comment utiliser AWS CloudFormation Designer, vous pouvez l'utiliser pour créer et modifier vos propres modèles.