Procédure pas à pas : utilisez AWS CloudFormation Designer pour modifier le modèle d'une pile - 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.

Procédure pas à pas : utilisez AWS CloudFormation Designer pour modifier le modèle d'une pile

Application Composer en mode CloudFormation console est une amélioration par rapport à AWS CloudFormation Designer. Nous vous recommandons d'utiliser Application Composer au lieu de Designer dans la mesure du possible. Pour plus d’informations, consultez Utilisation d'Application Composer pour créer des modèles de manière visuelle.

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 :

  1. 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 : Procédure pas à pas : utilisez AWS CloudFormation Designer pour créer un serveur Web de base.

  2. Modifier le modèle.

    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'instance EC2 par un groupe Auto Scaling et un équilibreur de charge Elastic Load Balancing.

  3. Mettre à jour la pile.

    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.

  4. Supprimer la pile.

    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 (Amazon VPC), 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 Procédure pas à pas : utilisez 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
  1. Ouvrez la CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation/.

  2. Dans la liste des piles, sélectionnez BasicWebServerStack.

  3. 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-drop interface de AWS CloudFormation Designer et les éditeurs JSON et YAML intégrés pour remplacer l'instance Amazon EC2 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
  1. Supprimez la ressource WebServerInstance.

    1. Cliquez sur la ressource WebServerInstance avec le bouton droit de la souris.

    2. Dans le menu des ressources, choisissez Supprimer ( ).

    3. Choisissez OK pour confirmer.

  2. 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.

  3. Dans le volet Types de ressources de la catégorie EC2, ajoutez la SecurityGroupressource n'importe où dans le VPC, sauf dans le sous-réseau.

    Ce groupe de sécurité contrôlera le trafic entrant et sortant de l'équilibreur de charge.

  4. 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

  5. Créez des associations pour les ressources que vous avez ajoutées.

    1. 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 connexion AWS::EC2::Subnet (Property: Subnets) vers la ressource PublicSubnet.

      • A partir de la ressource WebServerFleet, faites glisser la connexion AWS::EC2::Subnet (Property: VPCZoneIdentifier) vers la ressource PublicSubnet.

    2. Associez l'équilibreur de charge à ce groupe de sécurité :

      • A partir de la ressource PublicElasticLoadBalancer, faites glisser la connexion AWS::EC2::SecurityGroup (Property: SecurityGroups) vers la ressource PublicLoadBalancerSecurityGroup.

    3. Associez le groupe Auto Scaling à l'équilibreur de charge et à la configuration de lancement :

      • A partir de la ressource WebServerFleet, faites glisser la connexion AWS::ElasticLoadBalancing::LoadBalancer (Property: LoadBalancerNames) vers la ressource PublicElasticLoadBalancer.

      • A partir de la ressource WebServerFleet, faites glisser la connexion AWS::ElasticLoadBalancing::LaunchConfiguration (Property: LaunchConfigurationName) vers la ressource WebServerLaunchConfig.

    4. Associez la configuration de lancement au groupe de sécurité :

      • A partir de la ressource WebServerLaunchConfig, faites glisser la connexion AWS::EC2::SecurityGroup (Property: SecurityGroups) vers la ressource WebServerSecurityGroup.

    5. Définissez une dépendance pour le groupe Auto Scaling au routage public :

      • A partir de la ressource WebServerFleet, faites glisser la connexion DependsOn vers la ressource PublicRoute.

      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.

  6. Spécifiez les propriétés des ressources que vous avez ajoutées.

    1. Sur le canevas AWS CloudFormation Designer, choisissez la PublicElasticLoadBalancer ressource.

    2. 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és Listeners 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
    3. Répétez ce processus pour les ressources suivantes :

      WebServerFleet

      Ajoutez les propriétés MaxSize, MinSize et DesiredCapacity. 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. Ces règles autorisent l'ensemble du trafic HTTP à atteindre et à 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 et ImageId 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 valeur ImageId 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
  7. 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.

    1. Choisissez la ressource WebServerLaunchConfig, puis l'onglet Metadata (Métadonnées) dans l'un éditeur intégré.

    2. Si vous créez votre modèle au format JSON : entre les accolades Metadata ({}), après l'accolade de fermeture AWS::CloudFormation::Designer, ajoutez une virgule (,).

    3. 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'
  8. 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.

    1. Sélectionnez dans une zone ouverte du canevas AWS CloudFormation Designer.

    2. Dans le volet de l'un éditeur intégré, choisissez l'onglet Paramètres.

    3. Ajoutez le paramètre suivant dans le volet de l'un éditeur intégré. Si vous créez votre modèle au format JSON, 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'
  9. Modifiez la sortie du modèle pour afficher le nom DNS de l'équilibreur de charge.

    1. Dans le volet de l'un éditeur intégré, choisissez l'onglet Sorties.

    2. Modifiez le code JSON pour utiliser le nom DNS de l'équilibreur de charge, comme illustré dans l'extrait suivant.

      JSON

      { "Outputs": { "URL": { "Value": { "Fn::GetAtt": [ "PublicElasticLoadBalancer", "DNSName" ] }, "Description": "Newly created application URL" } } }

      Si vous créez votre modèle au format YAML, utilisez l'extrait suivant.

      Outputs: URL: Value: !GetAtt - PublicElasticLoadBalancer - DNSName Description: Newly created application URL
  10. Dans la barre d'outils du AWS CloudFormation concepteur, choisissez Valider le modèle ( ) 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.

  11. Dans la barre d'outils de AWS CloudFormation Designer, enregistrez le modèle localement en choisissant 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
  1. Dans la barre d'outils de AWS CloudFormation Designer, choisissez Create Stack ( ).

    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.

  2. CloudFormation renseigne automatiquement l'URL du modèle ; choisissez Next.

  3. Dans le champ Name (Nom) de la section Stack (Pile), vérifiez que le nom de la pile est BasicWebServerStack.

  4. Dans la section Parameters (Paramètres), utilisez les valeurs existantes, puis choisissez Suivant.

  5. 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.

  6. 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 plus d’informations, consultez Affichage des données et des ressources de la AWS CloudFormation pile sur AWS Management Console. Une fois que la pile est mise à jour, affichez-en les sorties et accédez à l'URL de site web pour vérifier que le site web fonctionne. Pour plus d’informations, consultez Affichage des données et des ressources de la AWS CloudFormation pile sur AWS Management 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
  1. Dans la CloudFormation console, choisissez la BasicWebServerStackpile.

  2. Choisissez Supprimer pile.

  3. 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.