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-init
cfn-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'UserData
aide 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-init
assistance 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-init
assistance 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
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 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 :
-
Vous définissez la configuration dans la
Metadata
section de votre EC2 ressource. -
Vous appelez
cfn-init
depuis leUserData
script. -
cfn-init
lit les métadonnées et applique la configuration. -
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 :
-
packages
section installe lehttpd
package à l'aide yum de. Cela fonctionne sur Amazon Linux et les autres distributions Linux qui l'utilisentyum. -
services
la section garantithttpd
le démarrage et l'exécution automatiques. -
UserData
installe 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)
-
Connectez-vous à la AWS 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).
-
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
. -
Choisissez Suivant.
-
Sur la page Spécifier les détails de la pile, saisissez le
BootstrapTutorialStack
nom de la pile. -
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.
-
-
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
-
Dans la CloudFormation console, sélectionnez votre stack et ouvrez l'onglet Events.
-
Surveillez l'
WebServer CREATE_IN_PROGRESS
événement. Le processus de démarrage commence après le lancement de l'instance. -
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)
-
Ouvrez la EC2 console
et recherchez votre instance. -
Sélectionnez l'instance, puis choisissez Actions, Surveiller et dépanner, Obtenir le journal du système pour voir la progression du bootstrap.
-
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
-
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 avec 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 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
-
Ouvrez la CloudFormation console
. -
Sur la page Stacks, 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 Evénement. L'état de
BootstrapTutorialStack
est 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
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.