Déploiement d'une application Flask sur Elastic Beanstalk - AWS Elastic Beanstalk

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éploiement d'une application Flask sur Elastic Beanstalk

Ce didacticiel vous explique le processus de génération d'une application Flask et de son déploiement dans un AWS Elastic Beanstalk environnement. Flask est une infrastructure d'application web open source pour Python.

Dans le cadre de ce didacticiel, vous effectuerez les tâches suivantes :

Prérequis

Ce tutoriel suppose que vous connaissez les opérations de base Elastic Beanstalk et la console Elastic Beanstalk. Si ce n'est pas déjà fait, suivez les instructions dans Commencer à utiliser Elastic Beanstalk pour lancer votre premier environnement Elastic Beanstalk.

Pour suivre les procédures décrites dans ce guide, vous aurez besoin d'un shell ou d'un terminal de ligne de commande pour exécuter des commandes. Dans les listes, les commandes sont précédées d'un symbole d'invite ($) et du nom du répertoire actuel, le cas échéant.

~/eb-project$ this is a command this is output

Sous Linux et macOS, vous pouvez utiliser le shell et le gestionnaire de package de votre choix. Sur Windows, vous pouvez installer le sous-système Windows pour Linux afin d'obtenir une version intégrée à Windows d'Ubuntu et de Bash.

Flask nécessite Python 3.7 ou version ultérieure. Dans ce tutoriel, nous utilisons Python 3.7 et la version correspondante de la plateforme Elastic Beanstalk. Installez Python en suivant les instructions à l'adresse Configuration de votre environnement de développement Python pour Elastic Beanstalk.

L'infrastructure Flask sera installée dans le cadre de ce didacticiel.

Ce didacticiel utilise également l'interface de ligne de commande (EB) d'Elastic Beanstalk. CLI Pour plus de détails sur l'installation et la configuration de l'EBCLI, reportez-vous Installation de l'interface de ligne de commande Elastic Beanstalk aux sections etConfiguration de l'interface de ligne de commande EB.

Configuration d'un environnement virtuel Python avec Flask

Créez un répertoire de projet et un environnement virtuel pour votre application, puis installez Flask.

Pour configurer votre environnement de projet
  1. Créez un répertoire de projet.

    ~$ mkdir eb-flask ~$ cd eb-flask
  2. Créez et activez un environnement virtuel nommé virt :

    ~/eb-flask$ virtualenv virt ~$ source virt/bin/activate (virt) ~/eb-flask$

    Vous verrez (virt) ajouté à votre invite de commande, ce qui indique que vous êtes dans un environnement virtuel. Utilisez l'environnement virtuel pour le reste du didacticiel.

  3. Installez Flask avec pip install :

    (virt)~/eb-flask$ pip install flask==2.0.3
  4. Affichez les bibliothèques installées avec pip freeze :

    (virt)~/eb-flask$ pip freeze click==8.1.1 Flask==2.0.3 itsdangerous==2.1.2 Jinja2==3.1.1 MarkupSafe==2.1.1 Werkzeug==2.1.0

    Cette commande répertorie tous les packages installés dans votre environnement virtuel. Comme vous vous trouvez dans un environnement virtuel, les packages installés globalement, tels que l'EB, ne CLI sont pas affichés.

  5. Enregistrez la sortie de pip freeze dans un fichier nommé requirements.txt.

    (virt)~/eb-flask$ pip freeze > requirements.txt

    Ce fichier indique à Elastic Beanstalk d'installer les bibliothèques pendant le déploiement. Pour de plus amples informations, veuillez consulter Spécification des dépendances à l'aide d'un fichier d'exigences sur Elastic Beanstalk.

Création d'une application Flask

Créez ensuite une application qui vous allez déployer à l'aide d'Elastic Beanstalk. Nous allons créer un service RESTful Web « Hello World ».

Créez un nouveau fichier texte dans ce répertoire nommé application.py avec le contenu suivant :

Exemple ~/eb-flask/application.py
from flask import Flask # print a nice greeting. def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # some bits of text for the page. header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # EB looks for an 'application' callable by default. application = Flask(__name__) # add a rule for the index page. application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # add a rule when the page is accessed with a name appended to the site # URL. application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # run the app. if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production app. application.debug = True application.run()

Cet exemple affiche un message d'accueil personnalisé qui varie selon le chemin d'accès utilisé pour accéder au service.

Note

En ajoutant application.debug = True avant d'exécuter l'application, la sortie de débogage est activée pour parer à une éventuelle défaillance. C'est une bonne pratique pour le développement, mais vous devez supprimer les instructions de débogage dans le code de production, car la sortie de débogage peut révéler des aspects internes de votre application.

Utiliser application.py comme nom de fichier et fournir un objet application joignable (dans ce cas, l'objet Flask) permet à Elastic Beanstalk de trouver facilement le code de votre application.

Exécutez application.py avec Python :

(virt) ~/eb-flask$ python application.py * Serving Flask app "application" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 313-155-123

Ouvrez http://127.0.0.1:5000/ dans votre navigateur web. Vous devriez voir l'application en cours d'exécution, affichant la page d'index :

Web browser displaying "Hello World!" message and a hint about RESTful web service usage.

Consultez le journal du serveur pour voir le résultat de votre demande. Vous pouvez arrêter le serveur web et revenir à votre environnement virtuel en appuyant sur Ctrl+C.

Si vous avez obtenu la sortie de débogage à la place, corrigez les erreurs et veillez à ce que l'application s'exécute localement avant de procéder à la configuration pour Elastic Beanstalk.

Déployez votre site avec l'EB CLI

Vous avez ajouté tout ce dont vous avez besoin pour déployer votre application sur Elastic Beanstalk. Votre répertoire de projet devrait maintenant ressembler à ceci :

~/eb-flask/ |-- virt |-- application.py `-- requirements.txt

Le dossier virt, toutefois, n'est pas requis pour que l'application s'exécute sur Elastic Beanstalk. Au moment du déploiement, Elastic Beanstalk crée un environnement virtuel sur les instances de serveur et installe les bibliothèques répertoriées dans requirements.txt. Pour réduire la taille du bundle source que vous chargez pendant le déploiement, ajoutez un fichier .ebignore qui indique CLI à l'EB de ne pas inclure le virt dossier.

Exemple ~/eb-flask/.ebignore
virt

Ensuite, vous allez créer votre environnement d'applications et déployer votre application configurée avec Elastic Beanstalk.

Pour créer un environnement et déployer votre application Flask
  1. Initialisez votre CLI référentiel EB à l'aide de la eb init commande :

    ~/eb-flask$ eb init -p python-3.7 flask-tutorial --region us-east-2 Application flask-tutorial has been created.

    Cette commande crée une application appelée flask-tutorial et configure votre référentiel local afin de créer des environnements avec la dernière version de plateforme Python 3.7.

  2. (facultatif) Exécutez à eb init nouveau pour configurer une paire de clés par défaut afin de pouvoir vous connecter à l'EC2instance qui exécute votre application avec : SSH

    ~/eb-flask$ eb init Do you want to set up SSH for your instances? (y/n): y Select a keypair. 1) my-keypair 2) [ Create new KeyPair ]

    Sélectionnez une paire de clés si vous en avez déjà une, ou suivez les invites pour en créer une. Si vous ne voyez pas l'invite ou que vous avez besoin de modifier vos paramètres ultérieurement, exécutez eb init -i.

  3. Créez un environnement et déployez-y votre application avec eb create :

    ~/eb-flask$ eb create flask-env

La création d'un environnement prend environ 5 minutes et crée les ressources suivantes :

  • EC2instance — Une machine virtuelle Amazon Elastic Compute Cloud (AmazonEC2) configurée pour exécuter des applications Web sur la plateforme de votre choix.

    Chaque plateforme exécute un ensemble spécifique de logiciels, de fichiers de configuration et de scripts pour prendre en charge une version de langage, une infrastructure ou un conteneur web spécifiques, ou une combinaison de ces éléments. La plupart des plateformes utilisent Apache ou NGINX un proxy inverse qui se trouve devant votre application Web, lui transmet les demandes, fournit des ressources statiques et génère des journaux d'accès et d'erreurs.

  • Groupe de sécurité d'instance : groupe EC2 de sécurité Amazon configuré pour autoriser le trafic entrant sur le port 80. Cette ressource permet au HTTP trafic provenant de l'équilibreur de charge d'atteindre l'EC2instance qui exécute votre application Web. Par défaut, le trafic n'est pas autorisé sur les autres ports.

  • Équilibreur de charge – Équilibreur de charge Elastic Load Balancing configuré pour répartir les demandes vers les instances exécutant votre application. De plus, l'équilibreur de charge vous évite d'exposer directement vos instances sur Internet.

  • Groupe de sécurité d'équilibrage de charge : groupe EC2 de sécurité Amazon configuré pour autoriser le trafic entrant sur le port 80. Cette ressource permet au HTTP trafic provenant d'Internet d'atteindre l'équilibreur de charge. Par défaut, le trafic n'est pas autorisé sur les autres ports.

  • Groupe Auto Scaling – Groupe Auto Scaling configuré pour remplacer une instance si elle est résiliée ou devient indisponible.

  • Compartiment Amazon S3 – Emplacement de stockage pour votre code source, les journaux et autres artefacts qui sont créés lorsque vous utilisez Elastic Beanstalk.

  • CloudWatch Alarmes Amazon : deux CloudWatch alarmes qui surveillent la charge sur les instances de votre environnement et qui sont déclenchées si la charge est trop élevée ou trop faible. Lorsqu'une alarme est déclenchée, votre groupe Auto Scaling s'adapte en fonction, à la hausse ou à la baisse.

  • AWS CloudFormation stack : Elastic AWS CloudFormation Beanstalk utilise pour lancer les ressources de votre environnement et propager les modifications de configuration. Les ressources sont définies dans un modèle, que vous pouvez afficher dans la console AWS CloudFormation.

  • Nom de domaine : nom de domaine qui mène à votre application Web sous la forme subdomain.region.elasticbeanstalk.com.

    Sécurité du domaine

    Pour renforcer la sécurité de vos applications Elastic Beanstalk, le domaine elasticbeanstalk.com est enregistré dans la liste des suffixes publics (). PSL

    Si vous devez définir des cookies sensibles dans le nom de domaine par défaut de vos applications Elastic Beanstalk, nous vous recommandons d'utiliser des cookies __Host- avec un préfixe pour une sécurité accrue. Cette pratique protège votre domaine contre les tentatives de falsification de requêtes intersites (). CSRF Pour plus d'informations, consultez la page Set-Cookie du Mozilla Developer Network.

Toutes ces ressources sont gérées par Elastic Beanstalk. Lorsque vous arrêtez votre environnement, Elastic Beanstalk arrête toutes les ressources qu'il contient.

Note

Le compartiment Amazon S3 créé par Elastic Beanstalk est partagé entre les environnements et n'est pas supprimé lors de l'arrêt de l'environnement. Pour de plus amples informations, veuillez consulter Utilisation d'Elastic Beanstalk avec Amazon S3.

Lorsque le processus de création de l'environnement est terminé, ouvrez votre site web avec eb open :

~/eb-flask$ eb open

Cela ouvre une fenêtre de navigateur à l'aide du nom de domaine créé pour votre application. Vous devez voir le même site web Flask que celui que vous avez créé et testé localement.

Browser window displaying a Flask web application with a "Hello World!" message and usage hint.

Si vous ne voyez pas votre application en cours d'exécution ou si vous obtenez un message d'erreur, consultez Déploiements afin d'obtenir de l'aide concernant la façon de déterminer la cause de l'erreur.

Si vous voyez effectivement votre application en cours d'exécution, alors félicitations, vous avez déployé votre première application Flask avec Elastic Beanstalk !

Nettoyage

Lorsque vous avez fini d'utiliser Elastic Beanstalk, vous pouvez arrêter votre environnement. Elastic Beanstalk AWS met fin à toutes les ressources associées à votre environnement, telles que les instances EC2 Amazon, les instances de base de données, les équilibreurs de charge,les groupes de sécurité et les alarmes.

Pour mettre fin à votre environnement Elastic Beanstalk depuis la console
  1. Ouvrez la console Elastic Beanstalk, puis dans la liste des régions, sélectionnez votre. Région AWS

  2. Dans le panneau de navigation, choisissez Environments (Environnements), puis choisissez le nom de votre environnement dans la liste.

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  3. Choisissez Actions (Actions), puis Terminate Environment (Résilier l’environnement).

  4. Utilisez la boîte de dialogue à l'écran pour confirmer la résiliation de l'environnement.

Avec Elastic Beanstalk, vous pouvez facilement créer un nouvel environnement pour votre application à tout moment.

Ou, avec l'EB CLI :

~/eb-flask$ eb terminate flask-env

Étapes suivantes

Pour plus d'informations sur Flask, visitez flask.pocoo.org.

Si vous souhaitez essayer un autre cadre web Python, veuillez consulter Déploiement d'une application Django sur Elastic Beanstalk.