Déployer une application web sur Amazon EC2

GUIDE DE DÉMARRAGE

Module 2 : configuration automatique

Dans ce module, vous apprendrez à utiliser les données de l'utilisateur pour configurer une instance EC2 et installer des logiciels sur l'instance EC2

Introduction

Dès le lancement d'une instance dans Amazon EC2, vous avez la possibilité de lui transmettre des données utilisateur qui peuvent être utilisées pour effectuer des tâches de configuration automatisées courantes et même exécuter des scripts après le démarrage de l'instance. Cette fonction vous permettra de simplifier le déploiement de votre application en spécifiant les logiciels à installer et à configurer lors du premier lancement, et de copier l'application type sur l'instance. Ce module explique comment créer les données utilisateur et les ajouter à l'instance EC2 créée dans le module précédent.

Ce que vous apprendrez

  • Comment les données utilisateur sont ajoutées à l'instance EC2
  • Créer les données utilisateur pour installer et configurer tous les packages requis sur le système d'exploitation
  • Déployer votre application web en la copiant sur l'instance

 Durée

5 minutes

 Prérequis du module

  • Compte AWS avec accès administrateur**
  • Dernière version de Chrome ou de Firefox (recommandé)

[**] Les comptes créés dans les dernières 24 heures sont susceptibles de ne pas encore avoir accès aux services nécessaires pour ce didacticiel.

Implémentation

Ajout de données utilisateur à votre instance EC2

L'application web d'exemple hébergée dans le dossier SampleApp est une application Python que vous allez déployer. Pour fonctionner, elle a besoin des serveurs Nginx et uWSGI. Pour installer ces applications, il convient de suivre un certain nombre d'étapes. Tout d'abord, vous devez installer tous les packages du système d'exploitation, configurer nginx et uwsgi, vous assurer qu'ils sont en cours d'exécution, et copier l'application d'exemple dans l'instance. Un fichier script qui configure toutes ces étapes de configuration est fourni dans SampleApp/configure_amz_linux_sample_app.sh – veuillez consulter les étapes de ce fichier si vous souhaitez en savoir plus sur la configuration de l'instance.

Pour déployer l'application web, vous devez ajouter un code à au kit CDK qui copiera les fichiers de configuration et les scripts, ainsi que l'application d'exemple vers S3. Vous définirez les scripts de configuration. Pour cela, ajoutez le code suivant dans ec2-cdk-stack.ts, sous le code précédent :

// Use an asset to allow uploading files to S3, and then download it to the EC2 instance as part of the user data

    // --- Sample App ---
    // Upload the sample app  to S3
    const sampleAppAsset = new s3assets.Asset(this, "SampleAppAsset", {
      path: path.join(__dirname, "../../SampleApp"),
    });

    // Allow EC2 instance to read the file
    sampleAppAsset.grantRead(role);

    // Download the file from S3, and store the full location and filename as a variable
    const sampleAppFilePath = ec2Instance.userData.addS3DownloadCommand({
      bucket: sampleAppAsset.bucket,
      bucketKey: sampleAppAsset.s3ObjectKey,
    });

    // --- Sample App ---

    // --- Configuration Script ---
    // Upload the configuration file to S3
    const configScriptAsset = new s3assets.Asset(this, "ConfigScriptAsset", {
      path: path.join(__dirname, "../../SampleApp/configure_amz_linux_sample_app.sh"),
    });

    // Allow EC2 instance to read the file
    configScriptAsset.grantRead(ec2Instance.role);

    // Download the file from S3, and store the full location and filename as a variable
    const configScriptFilePath = ec2Instance.userData.addS3DownloadCommand({
      bucket: configScriptAsset.bucket,
      bucketKey: configScriptAsset.s3ObjectKey,
    });

    // Add a line to the user data to executy the downloaded file
    ec2Instance.userData.addExecuteFileCommand({
      filePath: configScriptFilePath,
      arguments: sampleAppFilePath,
    });

    // --- Configuration Script ---

Toutes les étapes seront intégrées au script de données utilisateur de votre instance et s'exécuteront lors du premier démarrage. Il reste encore une étape avant de pouvoir tout déployer : l'ajout de la sortie à la pile CDK pour faciliter l'ajout SSH à l'instance. Dans l'infrastructure ci-dessus, vous avez créé une clé SSH, stockée dans AWS Secret Manager. Pour le télécharger sur votre poste de travail, vous devez le récupérer. Vous aurez par ailleurs besoin de l'IP publique de l'instance, et de la commande SSH à exécuter. 

Insérez le code suivant dans la pile du bas :

// Create outputs for connecting

    // Output the public IP address of the EC2 instance
    new cdk.CfnOutput(this, "IP Address", {
      value: ec2Instance.instancePublicIp,
    });

    // Command to download the SSH key
    new cdk.CfnOutput(this, "Download Key Command", {
      value:
        "aws secretsmanager get-secret-value --secret-id ec2-ssh-key/cdk-keypair/private --query SecretString --output text > cdk-key.pem && chmod 400 cdk-key.pem",
    });

    // Command to access the EC2 instance using SSH
    new cdk.CfnOutput(this, "ssh command", {
      value:
        "ssh -i cdk-key.pem -o IdentitiesOnly=yes ec2-user@" +
        ec2Instance.instancePublicIp,
    });

Ces trois sorties vous indiqueront ce qui suit :

  • Comment télécharger la clé SSH pour accéder à l'instance ?
  • L'IP publique de l'instance
  • Une commande SSH pour accéder à l'instance.

Vous êtes désormais prêt à déployer la pile.

Conclusion

Vous avez appris dans ce module à ajouter des données utilisateur à une instance EC2 pour autoriser sa configuration lors du premier démarrage. Vous l'avez utilisé pour installer toutes les dépendances, configurer nginx et uwsgi, et déployer l'exemple d'application. Dans le module suivant, vous déploierez la pile et l'application d'exemple.

À suivre : déployer la pile CDK

Dites-nous si nous avons répondu à vos attentes.

Nous vous remercions pour votre commentaire
Nous sommes ravis que cette page vous ait été utile. Souhaitez-vous partager des détails supplémentaires pour nous aider à continuer à nous améliorer ?
Fermer
Nous vous remercions pour votre commentaire
Nous sommes désolés que cette page ne vous ait pas été utile. Souhaitez-vous partager des détails supplémentaires pour nous aider à continuer à nous améliorer ?
Fermer