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 CloudFormation modèles.
Dans le tutoriel de démarrage, vous avez créé un simple serveur web en utilisant UserData avec un script bash de base. Bien que cela fonctionne pour une simple page « Hello World », les applications réelles exigent souvent une configuration plus sophistiquée, incluant :
-
Installation de plusieurs packages logiciels dans le bon ordre.
-
Création de fichiers de configuration complexes avec un contenu précis.
-
Démarrage de services et configuration pour une exécution automatique.
-
Gestion des erreurs et validation du processus d’installation.
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’assistance cfn-init lit les données de configuration dans les métadonnées de votre modèle et les applique de manière systématique à votre instance.
Dans ce tutoriel, vous apprendrez à utiliser le script d’assistance cfn-init et à surveiller le processus d’amorçage.
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
Rubriques
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 cloud privé virtuel (VPC) ayant accès à Internet. Ce modèle de tutoriel nécessite un VPC par défaut, qui est automatiquement fourni avec les environnements Comptes AWS plus récents. Si vous ne disposez pas d’un VPC par défaut ou s’il a été supprimé, consultez la section de résolution des problèmes dans le tutoriel Création de votre première pile pour trouver d’autres solutions.
Concepts fondamentaux de l’amorçage
Avant de créer le modèle, examinons les concepts clés qui permettent le fonctionnement de l’amorçage.
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 script cfn-init lit les métadonnées de ressource dans votre modèle et applique la configuration à votre instance.
Le processus fonctionne comme suit :
-
Vous définissez la configuration dans la
Metadatasection de votre EC2 ressource. -
Vous appelez
cfn-initdepuis le scriptUserData. -
cfn-initlit les métadonnées et applique la configuration. -
Votre instance est configurée selon 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 script cfn-init traite ces sections dans un ordre précis : packages, groupes, utilisateurs, sources, fichiers, commandes, puis services.
Exemple d’amorçage simple
Commençons par un exemple minimal d’amorçage qui installe et démarre 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 systemd: 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 :
-
La section
packagesinstalle le packagehttpdà l’aide de yum. Cela fonctionne sur Amazon Linux et sur d’autres distributions Linux utilisant yum. -
La section
servicess’assure quehttpddémarre et s’exécute automatiquement. -
UserDatainstalle les outils d’amorçage les plus récents et appellecfn-init.
Ajout de fichiers et de 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 section files vous permet de créer des fichiers sur l’instance avec un contenu précis. Le caractère vertical (|) permet de transmettre un bloc de texte littéral (le 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
La section commands permet d’exécuter des commandes shell pendant le processus d’amorçage. 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"
Ajout de la sécurité 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
Modèle complet d’amorçage
Maintenant, assemblons toutes les pièces. Voici le modèle complet qui combine tous les concepts que nous avons abordés.
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: systemd: 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éation de 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)
-
Connectez-vous à la CloudFormation console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/cloudformation.
-
Sélectionnez Créer une pile, Avec de nouvelles ressources (standard).
-
Dans Spécifier le modèle, choisissez Charger un fichier de modèle, puis Choisir un fichier pour charger le fichier
samplelinux2stack.template. -
Choisissez Suivant.
-
Sur la page Spécifier les détails de la pile, saisissez
BootstrapTutorialStackcomme nom de pile. -
Pour 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 : saisissez votre adresse IP publique avec un suffixe
/32.
-
-
Choisissez Suivant deux fois, puis Soumettre pour créer la pile.
Surveillance du processus d’amorçage
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.
Surveillance de la progression de l’amorçage
-
Dans la CloudFormation console, sélectionnez votre stack et ouvrez l'onglet Events.
-
Surveillez l’événement
WebServer CREATE_IN_PROGRESS. Le processus d’amorçage commence après le lancement de l’instance. -
Le processus d’amorçage dure généralement quelques minutes. Vous verrez
WebServer CREATE_COMPLETElorsqu’il sera terminé.
Si vous souhaitez voir ce qui se passe pendant le processus d’amorçage, vous pouvez consulter les journaux de l’instance.
Consultation des journaux d’amorçage (facultatif)
-
Ouvrez la EC2 console
et recherchez votre instance. -
Sélectionnez l’instance, puis choisissez Actions, Surveiller et résoudre les problèmes, Obtenir le journal du système afin d’afficher la progression de l’amorçage.
-
Si les journaux ne s’affichent pas immédiatement, attendez un moment, puis actualisez la page.
Test du serveur web amorcé
Lorsque votre pile indique CREATE_COMPLETE, testez votre serveur web.
Pour tester le serveur Web
-
Dans la CloudFormation console, accédez à l'onglet Sorties de votre stack.
-
Cliquez sur la valeur WebsiteURL pour ouvrir votre serveur web dans un nouvel onglet.
-
Vous devriez voir votre page web personnalisée affichant le message
Congratulations, 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 d’amorçage peut encore être en cours même si la pile indique CREATE_COMPLETE.
Résolution des problèmes d’amorçage
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
-
Échec de la création de la pile : consultez l’onglet Événements pour voir les messages d’erreur précis.
-
Serveur web inaccessiblee : vérifiez que votre adresse IP est correcte dans le paramètre
MyIP. N’oubliez pas d’ajouter/32à la fin. -
Échec du processus d’amorçage : l’instance peut être lancée, mais
cfn-initéchoue. Consultez les journaux du système comme décrit dans la section sur la surveillance.
nettoyer les ressources ;
Pour éviter les frais continus, vous pouvez effectuer un nettoyage en supprimant la pile et ses ressources.
Pour supprimer la pile et ses ressources
-
Ouvrez la CloudFormation console
. -
Sur la page Piles, sélectionnez l’option à côté du nom de la pile que vous avez créée (
BootstrapTutorialStack), puis choisissez Supprimer. -
Lorsque vous êtes invité à confirmer l’opération, choisissez Supprimer.
-
Surveillez la progression du processus de suppression de la pile dans l’onglet Événement. L'état de
BootstrapTutorialStackest remplacé parDELETE_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 d’assistance
cfn-init -
Comment structurer les métadonnées pour l’amorçage
-
Comment installer des packages, créer des fichiers, exécuter des commandes et gérer des services
-
Comment surveiller les problèmes d’amorçage
Pour continuer à apprendre :
-
Apprenez à mettre à jour une pile en cours d'exécution et à utiliser le script d'
cfn-hupassistance. Pour de plus amples informations, veuillez consulter Mettre à jour une CloudFormation pile. -
Apprenez à amorcer une pile Windows. Pour de plus amples informations, veuillez consulter Amorçage des piles CloudFormation basées sur Windows.
-
Explorez des scénarios d’amorçage plus complexes avec plusieurs ensembles de configuration. Pour plus d'informations, consultez cfn-init et le guide de AWS::CloudFormation::Initréférence des CloudFormation modèles.
-
Découvrez comment utiliser
cfn-signalpour le rapport d’état d’achèvement de l’amorçage. Pour plus d’informations, consultez cfn-signal dans le Guide de référence des modèles CloudFormation .