Déployer une application Flask sur une instance AWS EC2 - sans aucun stress !

August 05, 2020
Rédigé par
Diane Phan
Twilion
Révisé par

Déployer une application Flask sur une instance AWS EC2 - sans aucun stress !

Donc, vous avez créé votre première application Twilio et elle est devenue un succès, super ! Ce n'est pas surprenant avec la magie de Twilio. Mais attendez une minute ! Puisque Twilio est si populaire, pourquoi ne pas déployer l'application sur un site en ligne pour qu'elle puisse être active sans que vous ayez à l'exécuter en permanence sur votre ordinateur local ?

Suivez ce tutoriel pour apprendre à déployer rapidement votre application Flask fonctionnelle sur Amazon Web Services(AWS). Préparez-vous à impressionner les utilisateurs avec une application Twilio et Flask en ligne gratuitement !

Configuration requise pour le didacticiel

  • Un référentiel GitHub avec des fichiers pour votre application Flask de travail. Assurez-vous que l'application que vous souhaitez déployer dans AWS dispose de variables d'environnement requises sûres et qu'elle est prête à être déployée. Vous pouvez consulter le tutoriel sur l'application Flask si vous avez besoin d'aide pour démarrer une application Flask de base.
  • Créez un compte gratuit ou connectez-vous à votre console AWS
  • Une carte de crédit pour AWS au cas où vous dépasseriez les options d'admissibilité au niveau gratuit. Il est important de noter que vous devez prendre des précautions supplémentaires si vous déployez une application sur AWS. Veillez à respecter les limites du niveau gratuit pour éviter les frais supplémentaires à la fin du mois. Reportez-vous au guide de tarification EC2 et aux documents appropriés pour éviter les frais futurs.
  • Tmux pour exécuter l'application dans une session de terminal

Créer un compte utilisateur  

Pour un déploiement rapide et facile, créez un compte AWS. Lorsque vous vous reconnectez à votre compte, vous avez la possibilité de vous connecter en tant qu'utilisateur root ou en tant qu'utilisateur IAM.

Je vous recommande de vous connecter en tant que compte utilisateur root pour effectuer des tâches nécessitant un accès illimité ou de créer un compte utilisateur IAM qui détient toutes les autorisations dont dispose un utilisateur root. Les utilisateurs IAM peuvent travailler sur le tableau de bord AWS avec un accès de contrôle sécurisé qui peut être modifié.  

Dans le cadre de cet article, je me connecte en tant qu'utilisateur root pour accomplir les tâches nécessaires.

Cliquez sur l'onglet Services en haut de la page Web. Cliquez sur « EC2 » sous l'onglet Compute (Calcul) ou saisissez le nom dans la barre de recherche pour accéder au tableau de bord EC2.

Option EC2 sur le tableau de bord AWS Services

EC2 est un serveur virtuel dans le cloud où l'application Web Twilio sera active.

Lancer une instance Amazon EC2

Recherchez la section Launch instance (Lancer l'instance) de la page Web. Il doit y avoir un bouton orange intitulé Launch instance (Lancer l'instance), comme illustré ci-dessous. Dans la remarque, la section indique que vos instances seront lancées dans la région Est des États-Unis (Ohio). Cela peut varier pour votre tableau de bord EC2, car vous souhaitez vous assurer que vos instances se trouvent dans les États américains si vous êtes développeur aux États-Unis.

Lancer un bouton d'instance sur le tableau de bord EC2

Sélectionner des instances de niveau gratuit pour l'image de machine

Sélectionnez l'option Free Tier Only (Niveau gratuit uniquement) sur le côté gauche, en dessous de Quick Start (Démarrage rapide). Il existe une liste d'AMI (Amazon Machine Images, ou images de machine Amazon) disponibles à la sélection, mais nous allons choisir le serveur Ubuntu avec l'option Free tier eligible (Éligible au niveau gratuit).

choisir le serveur Ubuntu à la première étape de la création d'une instance EC2

Choisir le type d'instance

Sélectionnez l'instance assortie de l'option Free tier eligible (Éligible au niveau gratuit). Après avoir sélectionné l'instance à utiliser, cliquez sur Next: Configure Instance Details (Suivant : configurer les détails de l'instance).

capture d'écran de l'étape 2 : choisir un type d'instance

Configurer les détails de l'instance

Affichez les paramètres par défaut et passez à Next: Add Storage (Suivant : ajouter de l'espace de stockage).

capture d'écran de l'étape 3 : configurer les détails de l'instance

Ajouter de l'espace de stockage

Sélectionnez la quantité d'espace de stockage nécessaire pour exécuter votre application. Les clients éligibles au niveau gratuit peuvent obtenir jusqu'à 30 Go. L'espace de stockage utilisé dépend de votre application. Par exemple, si votre application nécessite de stocker des fichiers images, du rendu graphique lourd ou des données utilisateur, elle utilisera davantage d'espace de stockage. Dans ce cas, vous devrez faire preuve de prudence et vous assurer que votre application ne dépasse pas l'allocation de Go gratuite. Si vous dépassez votre limite pour le mois, vous serez facturé.

Après avoir sélectionné la taille souhaitée, cliquez sur Next: Add Tags (Suivant : ajouter des balises).

capture d'écran de l'étape 4 : ajouter de l'espace de stockage

Ajouter des balises

Les balises sont utilisées pour classer vos ressources AWS en fonction de différents cas d'utilisation et faciliter ainsi leur suivi. Cela s'appliquerait si vous travailliez sur des projets à grande échelle et que vous deviez organiser les coûts de facturation d'AWS dans une structure privilégiée. Par conséquent, ce n'est peut-être pas nécessaire d'ajouter des balises à votre machine, surtout si vous prévoyez d'utiliser AWS une seule fois pour cette application spécifique. Continuez et cliquez sur Next: Configure Security Group (Suivant : configurer le groupe de sécurité).

capture d'écran de l'étape 5 : ajouter des balises

Groupe de sécurité

La configuration de la sécurité est la dernière étape avant le lancement de l'instance AWS EC2. Si c'est la première fois que vous créez un groupe de sécurité, sélectionnez SSH dans la liste déroulante sous Type. Tout le reste de cette section doit être défini par défaut sur TCP au port 22.

capture d'écran de l'étape 6 : configurer le groupe de sécurité

Voici un exemple des types et ports de sécurité que vous pouvez utiliser dans votre application Web. Puisque nous voulons que les internautes du monde entier accèdent au site, réglez la Source vers ces protocoles sur « 0.0.0.0/0 ».

Voici la liste des types et protocoles de sécurité que vous devez utiliser. Vous pouvez également ajouter des règles supplémentaires à la liste suivante :

Définissez Type HTTPProtocol (Protocole) TCPPort range (Plage de ports) 80 et Source sur « 0.0.0.0/0 ».

Définissez Type HTTPProtocol (Protocole) TCPPort range (Plage de ports) 80 et Source sur « ::/0 ».

Définissez Type Custom TCP (TCP personnalisé), Protocol (Protocole) TCPPort range (Plage de ports) 8080 et Source sur « 0.0.0.0/0 ».

Définissez Type SSHProtocol (Protocole) TCPPort range (Plage de ports) 22 et Source sur « 0.0.0.0/0 ».

Définissez Type HTTPSProtocol (Protocole) TCPPort range (Plage de ports) 443 et Source sur « 0.0.0.0/0 ».

Lancer et créer une paire de clés

Cliquez sur « Review and Launch » (Vérifier et lancer) afin de confirmer votre groupe de sécurité pour votre projet. Après avoir vérifié vos paramètres et cliqué sur « Launch » (Lancer), vous serez invité à sélectionner une paire de clés existante ou à créer une nouvelle paire de clés.

Cliquez sur le menu déroulant et sélectionnez Create a new key pair (Créer une nouvelle paire de clés). Cette étape est essentielle pour accéder à votre instance AWS en toute sécurité par le biais de votre machine. Donnez à votre paire de clés un nom dont vous vous souviendrez. Dans le cadre de cet article, le nom de la paire de clés est « diane-twilio-test ».

Cliquez sur Download Key Pair (Télécharger la paire de clés) après avoir créé votre paire de clés. Ceci va télécharger le fichier de clé privée (en savoir plus sur les fichiers .pem ou sur la cryptographie de clé publique). Faites glisser le fichier .pem vers un emplacement sécurisé. Il est absolument crucial que vous conserviez ce fichier .pem en sécurité, car c'est la SEULE façon d'accéder à votre application Web.

capture d'écran illustrant la sélection ou la création d'une paire de clés

Voici une capture d'écran du fichier de clé privée également appelé fichier .pem sur un ordinateur MacOS :

fichier d'icône diane-twilio-test.pem

Vérifier et lancer l'instance

Donnez à votre tableau de bord AWS le temps de lancer l'instance. Votre adresse IP publique IPv4 est l'adresse dont vous avez besoin pour accéder à votre application Web. Dans cet article, l'adresse IP publique de l'instance est « 52.15.127.3 ».

L'instance a été lancée lorsque l'onglet Instance State (État de l'instance) indique running avec un cercle vert.

capture d'écran de l'onglet d'instance sur le tableau de bord EC2

SSH dans la machine virtuelle

Il est temps d'accéder à la machine virtuelle créée via AWS. Ouvrez votre terminal et localisez le répertoire contenant le fichier .pem.

Saisissez chmod 600 ./<NOM_VOTRE_PEM>.pem sur la ligne de commande de votre répertoire de projet pour limiter les autorisations de lecture et d'écriture au fichier de clé privée.

Ensuite, configurez l'environnement ssh en saisissant ssh-add ./<NOM_VOTRE_PEM>.pem. Cette commande ajoute des clés privées SSH à l'agent d'authentification SSH afin d'avoir des options d'authentification unique.

Le texte suivant s'affiche sur votre terminal :

Identity added: ./diane-twilio-test.pem (./diane-twilio-test.pem)

Prenez l'adresse IP publique IPv4 dans le tableau de bord des instances EC2 et saisissez la commande ssh ubuntu@<VOTRE_ADRESSE_IP>afin d'accéder en SSH à votre machine virtuelle.

The authenticity of host '52.15.127.3 (52.15.127.3)' can't be established.
ECDSA key fingerprint is SHA256:q2kuBPkd8i7BuYrwtfzmnCXB6PWNJaVcaQ85RSN9cD8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Transférer vos fichiers de projet vers l'hôte à distance

Dans le shell Ubuntu dans lequel vous utilisez SSH, créez un répertoire pour l'application que vous souhaitez déployer.

$ mkdir deployedapp

Créez un nouvel onglet ou une nouvelle fenêtre sur votre terminal de sorte que vous ayez un onglet utilisant le shell Ubuntu, tandis que l'autre onglet utilise les zsh ou bash de votre machine.

Localisez le répertoire dans lequel se trouve votre application. Si votre application ne dispose pas directement d'un fichier requirements.txt, créez-en un en saisissant pip freeze > requirements.txt dans le terminal.

Copiez le chemin complet de ce répertoire dans la commande à la fin de cette sous-section pour transférer le dossier de l'hôte local vers l'hôte distant.

Le <CHEMIN_COMPLET> de votre application peut ressembler à /Users/<VOTRE_NOM>/documents/<VOTRE_DOSSIER_APP>/.

Le deployedapp à la fin de la commande fait référence au dossier créé précédemment dans le shell Ubuntu.

$ sudo rsync -rv <FULL_PATH>/ ubuntu@<YOUR_IP_ADDRESS>:/home/ubuntu/deployedapp

Cela peut prendre quelques minutes selon la taille du projet.

Déployer l'application sur l'instance EC2

Revenez au shell Ubuntu dans l'autre onglet ou fenêtre. Si vous saisissez la commande cd deployedapp dans le terminal et que vous voyez les fichiers de projet familiers dans le dossier, vous êtes sur la bonne voie.  

Utilisez les commandes tmux pour créer une nouvelle session. C'est là que votre application sera exécutée en direct. Dans la commande ci-dessous, j'ai utilisé « mytestapp » pour nommer la session tmux, mais vous pouvez la nommer comme vous le souhaitez.

tmux new -s mytestapp

Après avoir exécuté cette commande, vous serez redirigé vers la session tmux « mytestapp ». Maintenant que votre application est installée sur le serveur EC2, installez la configuration requise pour votre application.

$ pip3 install -r requirements.txt

Si votre application Flask est exécutée régulièrement dans un environnement virtuel, démarrez l'environnement virtuel à l'aide de la commande source venv/bin/activate. Sinon, il est temps d'exécuter votre application comme vous le feriez habituellement au sein de votre machine locale.

(venv) ubuntu@ip-172-31-31-102:~/deployedapp$ flask run --host=0.0.0.0 --port=8080
 * Serving Flask app "app" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 199-963-168

Appuyez sur Ctrl B et sur D sur votre clavier pour laisser la session tmux en cours d'exécution en arrière-plan. La sortie suivante s'affiche sur votre terminal :

detached (from session mytestapp)]

Si vous devez apporter des modifications à votre application pour une raison quelconque ou arrêter la session, entrez la commande ci-dessous pour revenir à la session « mytestapp ».

tmux attach -t mytestapp

Une fois de plus, lorsque vous êtes prêt à laisser la session tmux faire son travail, appuyez sur Ctrl B et sur D sur votre clavier. Si, pour une raison quelconque, vous souhaitez arrêter la session, appuyez sur Ctrl D au sein de la session tmux.

Vous pouvez vérifier si l'application est en cours d'exécution dans la session tmux. Le résultat ci-dessous s'affiche si vous n'avez pas fermé la session plus tôt.

$ tmux ls
mytestapp: 1 windows (created Wed Jul 29 03:40:00 2020) [112x70]

Vous pouvez afficher votre application active en ajoutant 8080 à votre adresse IP publique IPv4public. Dans l'exemple de cet article, l'URL serait « http://52.15.127.3:8080/ ».

Vous pouvez maintenant appuyer sur Ctrl C pour vous déconnecter de la machine virtuelle et partager l'application nouvellement déployée avec le lien URL.

Quelle est la prochaine étape du déploiement de projets sur AWS ?

Félicitations pour le déploiement de votre application Flask sur AWS ! Montrez votre projet en direct en configurant une URL personnalisée pour votre projet. Voici un tutoriel sur la façon de modifier le nom de votre URL.

Ce n'est pas évident de naviguer dans AWS, alors félicitez-vous d'être arrivé au bout de ce tutoriel. Si vous recherchez un nouveau projet à déployer dans AWS, consultez ces idées :

Parlez-moi de l'application que vous avez déployée. J'aimerais en savoir plus !

Diane Phan est développeuse réseau stagiaire au sein de l'équipe Developer Voices. Elle aime aider les programmeurs à relever des défis difficiles qui pourraient les empêcher de donner vie à leurs projets. Elle est joignable à dphan [at] twilio.com ou sur LinkedIn.

Nous remercions ses amis en dehors du travail qui lui ont enseigné les instances AWS EC2.