Déployez des applications sur Amazon EC2 - 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.

Déployez des applications sur Amazon EC2

Vous pouvez l'utiliser CloudFormation pour installer, configurer et démarrer automatiquement des applications sur des EC2 instances Amazon. Cette approche vous permet de dupliquer facilement les déploiements et de mettre à jour les installations existantes sans avoir à vous connecter directement à l'instance. Vous évitez ainsi de perdre du temps et de l'énergie.

CloudFormation inclut un ensemble de scripts d'assistance (cfn-initcfn-signal,cfn-get-metadata, etcfn-hup) basés surcloud-init. Vous appelez ces scripts d'assistance depuis vos CloudFormation modèles pour installer, configurer et mettre à jour des applications sur des EC2 instances Amazon qui se trouvent dans le même modèle. Pour plus d'informations, consultez la référence aux scripts CloudFormation d'assistance dans le Guide de référence des AWS CloudFormation modèles.

Dans le didacticiel de démarrage, vous avez créé un serveur Web simple à l'UserDataaide d'un script bash de base. Bien que cela ait fonctionné pour une simple page « Bonjour tout le monde », les applications réelles nécessitent souvent une configuration plus sophistiquée, notamment :

  • Plusieurs progiciels sont installés dans le bon ordre.

  • Fichiers de configuration complexes créés avec un contenu spécifique.

  • Les services ont démarré et sont configurés pour s'exécuter automatiquement.

  • Gestion des erreurs et validation du processus de configuration.

CloudFormationles scripts d'assistance fournissent un moyen plus robuste et plus facile à maintenir de configurer les EC2 instances par rapport aux scripts bash de base dans. UserData Le script d'cfn-initassistance lit les données de configuration à partir des métadonnées de votre modèle et les applique systématiquement à votre instance.

Dans ce didacticiel, vous allez apprendre à utiliser le script d'cfn-initassistance et à surveiller le processus de démarrage.

Note

CloudFormation est gratuit, mais les EC2 ressources Amazon que vous créez vous seront facturées. Toutefois, si vous êtes nouveau AWS, vous pouvez profiter du niveau gratuit pour minimiser ou éliminer les coûts au cours de ce processus d'apprentissage.

Prérequis

  • Vous devez avoir suivi le Création de votre première pile didacticiel ou avoir une expérience équivalente des CloudFormation notions de base.

  • Vous devez avoir accès à un utilisateur ou Compte AWS à un rôle IAM autorisé à utiliser Amazon EC2 et/ou à accéder à un utilisateur administratif. CloudFormation

  • Vous devez disposer d'un Virtual Private Cloud (VPC) ayant accès à Internet. Ce modèle de didacticiel nécessite un VPC par défaut, qui est automatiquement fourni avec les versions plus récentes. Comptes AWS Si vous n'avez pas de VPC par défaut ou s'il a été supprimé, consultez la section de résolution des problèmes du Création de votre première pile didacticiel pour découvrir d'autres solutions.

Comprendre les concepts du bootstrap

Découvrons les concepts clés qui permettent au bootstrap de fonctionner avant de créer le modèle.

le script d'assistant cfn-init.

CloudFormation fournit des scripts d'assistance Python que vous pouvez utiliser pour installer des logiciels et démarrer des services sur une EC2 instance Amazon. Le cfn-init script lit les métadonnées des ressources à partir de votre modèle et applique la configuration à votre instance.

Le processus fonctionne comme suit :

  1. Vous définissez la configuration dans la Metadata section de votre EC2 ressource.

  2. Vous appelez cfn-init depuis le UserData script.

  3. cfn-initlit les métadonnées et applique la configuration.

  4. Votre instance est configurée conformément à vos spécifications.

Structure des métadonnées

La configuration est définie dans une structure spécifique au sein de votre EC2 instance.

Resources: EC2Instance: Type: AWS::EC2::Instance Metadata: # Metadata section for the resource AWS::CloudFormation::Init: # Required key that cfn-init looks for config: # Configuration name (you can have multiple) packages: # Install packages files: # Create files commands: # Run commands services: # Start/stop services

Le cfn-init script traite ces sections dans un ordre spécifique : packages, groupes, utilisateurs, sources, fichiers, commandes, puis services.

Commencez par un exemple de bootstrap simple

Commençons par un exemple de bootstrap minimal qui installe et démarre simplement Apache.

Resources: EC2Instance: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: packages: # Install Apache web server yum: httpd: [] services: # Start Apache and enable it to start on boot sysvinit: httpd: enabled: true ensureRunning: true Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType UserData: !Base64 # Script that runs when instance starts Fn::Sub: | #!/bin/bash yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource EC2Instance --region ${AWS::Region}

Cet exemple simple illustre les concepts de base :

  • packagessection installe le httpd package à l'aide yum de. Cela fonctionne sur Amazon Linux et les autres distributions Linux qui l'utilisentyum.

  • servicesla section garantit httpd le démarrage et l'exécution automatiques.

  • UserDatainstalle les derniers outils et appels Bootstrap. cfn-init

Ajouter des fichiers et des commandes

Améliorons maintenant notre exemple en ajoutant une page Web personnalisée et un fichier journal dans le /var/log répertoire de l' EC2 instance.

Création de fichiers

La files section vous permet de créer des fichiers sur l'instance avec un contenu spécifique. Le tube vertical (|) vous permet de transmettre un bloc de texte littéral (code HTML) comme contenu du fichier (/var/www/html/index.html).

files: /var/www/html/index.html: content: | <body> <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> </body>

Exécution des commandes

Cette commands section vous permet d'exécuter des commandes shell pendant le processus de démarrage. Cette commande crée un fichier journal /var/log/welcome.txt sur l' EC2 instance. Pour le consulter, vous avez besoin d'une paire de EC2 clés Amazon à utiliser pour l'accès SSH et d'une plage d'adresses IP pouvant être utilisée pour accéder à l'instance en SSH (ce n'est pas traité ici).

commands: createWelcomeLog: command: "echo 'cfn-init ran successfully!' > /var/log/welcome.txt"

Ajouter la sécurité du réseau

Puisque nous configurons un serveur Web, nous devons autoriser le trafic Web (HTTP) à atteindre notre EC2 instance. Pour ce faire, nous allons créer un groupe de sécurité qui autorise le trafic entrant sur le port 80 à partir de votre adresse IP. EC2 les instances doivent également envoyer du trafic vers Internet, par exemple pour installer des mises à jour de packages. Par défaut, les groupes de sécurité autorisent tout le trafic sortant. Nous associerons ensuite ce groupe de sécurité à notre EC2 instance à l'aide de la SecurityGroupIds propriété.

WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow HTTP access from my IP address SecurityGroupIngress: - IpProtocol: tcp Description: HTTP FromPort: 80 ToPort: 80 CidrIp: !Ref MyIP

Le modèle bootstrap complet

Maintenant, assemblons toutes les pièces. Voici le modèle complet qui combine tous les concepts dont nous avons discuté.

AWSTemplateFormatVersion: 2010-09-09 Description: Bootstrap an EC2 instance with Apache web server using cfn-init Parameters: LatestAmiId: Description: The latest Amazon Linux 2 AMI from the Parameter Store Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' InstanceType: Description: EC2 instance type Type: String Default: t2.micro AllowedValues: - t3.micro - t2.micro ConstraintDescription: must be a valid EC2 instance type. MyIP: Description: Your IP address in CIDR format (e.g. 203.0.113.1/32) Type: String MinLength: 9 MaxLength: 18 Default: 0.0.0.0/0 AllowedPattern: '^(\d{1,3}\.){3}\d{1,3}\/\d{1,2}$' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x. Resources: WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow HTTP access from my IP address SecurityGroupIngress: - IpProtocol: tcp Description: HTTP FromPort: 80 ToPort: 80 CidrIp: !Ref MyIP WebServer: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: packages: yum: httpd: [] files: /var/www/html/index.html: content: | <body> <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> </body> commands: createWelcomeLog: command: "echo 'cfn-init ran successfully!' > /var/log/welcome.txt" services: sysvinit: httpd: enabled: true ensureRunning: true Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType SecurityGroupIds: - !Ref WebServerSecurityGroup UserData: !Base64 Fn::Sub: | #!/bin/bash yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource WebServer --region ${AWS::Region} Tags: - Key: Name Value: Bootstrap Tutorial Web Server Outputs: WebsiteURL: Value: !Sub 'http://${WebServer.PublicDnsName}' Description: EC2 instance public DNS name

Créez la pile à l'aide de la console

La procédure suivante implique le téléchargement du modèle de pile d'échantillons à partir d'un fichier. Ouvrez un éditeur de texte sur votre ordinateur local et ajoutez le modèle. Enregistrez le fichier sous le nom samplelinux2stack.template.

Pour lancer la pile (modèle)
  1. Connectez-vous à la AWS CloudFormation console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/cloudformation.

  2. Sélectionnez Créer une pile, Avec de nouvelles ressources (standard).

  3. Pour Spécifier un modèle, choisissez Télécharger un fichier de modèle, puis Choisir un fichier pour télécharger le fichier samplelinux2stack.template.

  4. Choisissez Suivant.

  5. Sur la page Spécifier les détails de la pile, saisissez le BootstrapTutorialStack nom de la pile.

  6. Sous Paramètres, procédez comme suit.

    • LatestAmiId: conservez la valeur par défaut.

    • InstanceType: Choisissez t2.micro ou t3.micro pour le type d'instance. EC2

    • MyIP : Entrez votre adresse IP publique avec un /32 suffixe.

  7. Choisissez Suivant deux fois, puis Soumettre pour créer la pile.

Surveiller le processus de bootstrap

Les processus Bootstrap prennent plus de temps que les simples EC2 lancements car des logiciels supplémentaires sont en cours d'installation et de configuration.

Pour suivre la progression du bootstrap
  1. Dans la CloudFormation console, sélectionnez votre stack et ouvrez l'onglet Events.

  2. Surveillez l'WebServer CREATE_IN_PROGRESSévénement. Le processus de démarrage commence après le lancement de l'instance.

  3. Le processus d'amorçage prend généralement quelques minutes. Tu verras WebServer CREATE_COMPLETE quand ce sera fini.

Si vous souhaitez voir ce qui se passe pendant le processus de démarrage, vous pouvez consulter les journaux de l'instance.

Pour afficher les journaux de démarrage (facultatif)
  1. Ouvrez la EC2 console et recherchez votre instance.

  2. Sélectionnez l'instance, puis choisissez Actions, Surveiller et dépanner, Obtenir le journal du système pour voir la progression du bootstrap.

  3. Si les journaux ne s'affichent pas immédiatement, attendez et actualisez la page.

Testez le serveur Web amorcé

Lorsque votre stack apparaîtCREATE_COMPLETE, testez votre serveur Web.

Pour tester le serveur Web
  1. Dans la CloudFormation console, accédez à l'onglet Sorties de votre stack.

  2. Cliquez sur la valeur WebsiteURL pour ouvrir votre serveur Web dans un nouvel onglet.

  3. Vous devriez voir votre page Web personnalisée avec le messageCongratulations, you have successfully launched the AWS CloudFormation sample.

Note

Si la page ne se charge pas immédiatement, attendez une minute et réessayez. Le processus de démarrage peut toujours être terminé même après l'affichage de la pile. CREATE_COMPLETE

Résolution des problèmes liés au bootstrap

Si votre processus d'amorçage échoue ou si votre serveur Web ne fonctionne pas, voici les problèmes courants et leurs solutions.

Problèmes courants

  • La création de la pile échoue : consultez l'onglet Événements pour voir s'afficher des messages d'erreur spécifiques.

  • Serveur Web non accessible : vérifiez que votre adresse IP est correcte dans le MyIP paramètre. N'oubliez pas d'inclure /32 à la fin.

  • Le processus Bootstrap échoue : l'instance peut être lancée mais cfn-init échoue. Consultez les journaux du système comme décrit dans la section de surveillance.

Nettoyage des ressources

Pour éviter des frais récurrents, vous pouvez faire le ménage en supprimant la pile et ses ressources.

Pour supprimer la pile et ses ressources
  1. Ouvrez la CloudFormation console.

  2. Sur la page Stacks, sélectionnez l'option à côté du nom de la pile que vous avez créée (BootstrapTutorialStack), puis choisissez Supprimer.

  3. Lorsque vous êtes invité à confirmer l’opération, choisissez Supprimer.

  4. Surveillez la progression du processus de suppression de la pile dans l'onglet Evénement. L'état de BootstrapTutorialStack est remplacé par DELETE_IN_PROGRESS. Lorsque la suppression de la pile est CloudFormation terminée, elle supprime la pile de la liste.

Étapes suivantes

Félicitations ! Vous avez appris avec succès à démarrer des EC2 instances avec CloudFormation. Vous comprenez maintenant :

  • Comment utiliser les scripts cfn-init d'assistance

  • Comment structurer les métadonnées pour le démarrage

  • Comment installer des packages, créer des fichiers, exécuter des commandes et gérer des services

  • Comment surveiller les problèmes de bootstrap

Pour continuer à apprendre :

  • Apprenez à démarrer une Windows pile. Pour de plus amples informations, veuillez consulter Stacks basés sur le bootstrap Windows CloudFormation .

  • Explorez des scénarios de bootstrap plus complexes avec plusieurs ensembles de configuration. Pour plus d'informations, consultez cfn-init et le guide de AWS::CloudFormation::Initréférence des AWS CloudFormation modèles.

  • Découvrez comment signaler cfn-signal l'état d'achèvement du bootstrap. Pour plus d'informations, consultez cfn-signal dans le guide de référence des AWS CloudFormation modèles.