[PYTHON] La première étape de la création d'une application sans serveur avec Zappa

Je serai en charge du 8ème jour du Calendrier de l'Avent de l'Université de Kinki 2019, et Qiita sera le deuxième message depuis le calendrier de l'Avent d'été du CSG. Devenir. Cette fois-ci, vous pouvez facilement exécuter des applications sans serveur basées sur AWS Lambda à l'aide de Zappa. Comme il est écrit pour les étudiants, veuillez comprendre qu'il existe des différences.

Qu'est-ce qu'une application sans serveur?

Jusqu'à il y a dix ans, lors du développement d'une application de type client-serveur telle qu'une application Web, une machine serveur était nécessaire, et pour y exécuter un programme serveur, un serveur Web tel qu'Apache, par exemple, Il était courant de mettre en place un middleware appelé conteneur Java Servlet comme Tomcat (est-ce un peu vieux?). Une application sans serveur (également appelée informatique sans serveur) est une application qui s'exécute sur une plate-forme qui s'exécute immédiatement lorsqu'un programme est lancé, sans se soucier du développement de l'infrastructure d'un tel serveur. Ce n'est pas qu'il n'y a pas de serveur. GAE (Google App Engine) de Google sera-t-il la réponse?

Qu'est-ce que Lambda

Lambda est PaaS (Platform as a Service) qui réalise des applications sans serveur et est l'un des services AWS. Il prend en charge des langages tels que Node.js, Python, Ruby, Java, Go et C #, et peut exécuter du code en réponse à divers déclencheurs. Pour être précis, pour que le code sur Lambda fonctionne comme une application Web, il doit fonctionner avec un service appelé AWS API Gateway. Par conséquent, pour réaliser une application sans serveur avec Lambda, il est nécessaire de comprendre dans une certaine mesure le mécanisme du service fourni par AWS. La tarification de Lambda concerne essentiellement le code que vous exécutez. Si vous ne le déplacez pas, vous ne serez pas facturé (le code est stocké dans S3, vous serez donc facturé), et il existe un niveau gratuit (1000000 demandes / mois), que je recommande personnellement Lambda.

Qu'est-ce que Zappa?

Il existe plusieurs frameworks d'applications Web en Python, dont Flask. Flask est considéré comme un framework léger avec des fonctionnalités minimales, mais Flask convient aux petites applications car il est livré en standard avec un moteur de modèle appelé Jinja2.

Et le sujet principal Zappa est un framework qui réalise des applications sans serveur basées sur Flask en utilisant des services tels que Lambda et API Gateway d'AWS. L'utilisation de Zappa présente l'avantage que vous n'avez pas à vous soucier de la description de la partie qui relie Lambda et API Gateway.

Donc, je voudrais dire que c'est un développement net avec Zappa, mais si vous le faites sans connaissance, il sera difficile d'améliorer l'environnement, donc je vais énumérer les informations minimales et les mots-clés. Essayez de découvrir vous-même les mots-clés inconnus.

Tout d'abord, les paramètres AWS

Puisque nous utilisons AWS, des paramètres d'environnement minimum sont requis. Voici quoi faire. Si vous ne savez pas, cherchez ailleurs. (1) Inscrivez-vous (inscrivez-vous) en tant qu'utilisateur afin de pouvoir utiliser AWS (une grande et grande prémisse) (2) Créez un compte qui utilise Lambda ou API Gateway à l'aide d'IAM. Pour utiliser les services AWS, vous devez créer un compte pour celui-ci à l'aide d'un outil de gestion appelé IAM (accessible depuis l'écran de gestion Web AWS). Après l'avoir créé, notez l'ID de la clé d'accès, la clé d'accès secrète, etc. (3) Installez aws-cli. La configuration des services AWS se fait essentiellement sur le Web, mais il s'agit d'un ensemble d'outils permettant d'exploiter les services AWS à partir de la ligne de commande. Zappa automatise l'intégration entre API Gateway et Lambda, mais en interne, il utilise aws-cli. (4) Exécutez aws configure. Il s'agit du paramètre par défaut pour utiliser aws-cli. En plus de saisir l'ID de clé d'accès et la clé d'accès secrète obtenus ci-dessus, il est nécessaire de définir le nom de la région et le format de sortie.

(Supplément) À propos de la configuration du rôle de compte dans IAM

Il y a très peu d'informations à ce sujet, et je l'ai peut-être mal compris, mais il est nécessaire de définir l'autorité (rôle) pour accéder à Lambda, API Gateway, etc. pour le compte créé par IAM. Des paramètres insuffisants dans cette zone entraîneront une erreur liée aux autorisations lors du déploiement avec zappa. zappa Peut-être que je ne comprends pas bien, mais il est nécessaire de définir l'autorité (rôle) pour accéder à Lambda, API Gateway, etc. pour le compte créé par IAM. Des paramètres insuffisants à ce sujet entraîneront une erreur liée aux autorisations lors du déploiement avec zappa. Je sentais que zappa le définirait automatiquement, mais pour une raison quelconque, cela ne fonctionnait pas, donc dans ce cas, si vous ajoutez le rôle suivant pour le moment, il n'y aura pas d'erreur.

Avec ce qui précède, est-ce que ça va avec AWS? ..

Installez Zappa

Avant cela, zappa semble fonctionner sur le principe de virtualenv, alors créons un environnement virtuel avec python et installez-le dans cet environnement. Dans mon cas, j'ai créé un environnement virtuel avec Anaconda (GUI), mais c'était OK même dans cet environnement. L'installation de zappa est la suivante.

$ pip install flask
$ pip install zappa

Créer un fichier d'initialisation

Créer un fichier d'initialisation avec Zappa init

$ zappa init

En exécutant cette commande, un fichier appelé zappa_settings.js sera créé.

Erreur dans zappa init

J'écrirai ce qu'il faut faire lorsque l'erreur suivante se produit.

"Zappa requires an active virtual environment

```→ Virtuel avec des variables d'environnement_Veuillez définir env.

```Erreur: erreur zappa init'utf8' codec can't decode byte 0x**
```→ Cette erreur semble être juste un problème d'emplacement de répertoire (ou d'autorisation?). Essayez de naviguer vers le dossier du fichier de projet python (que vous êtes sur le point de créer), puis exécutez à nouveau init.

#### À propos du fichier zappa_settings.json
 La commande zappa déploie le projet en fonction des informations contenues dans ce fichier. Modifiez le fichier selon vos besoins. Le point ici est qu'en changeant la variable appelée nom_projet, il sera traité comme un autre projet. En d'autres termes, ce sera une fonction Lambda différente et l'URL dans API Gateway changera également. De plus, il semble que le paramètre de app_function détermine le fichier du programme principal à exécuter.


#### **`zappa_settings.json`**
```json

{
    "dev": {
        "app_function": "test.app", 
        "profile_name": "default",← Profil AWS
        "project_name": "test-app7", 
        "aws_region": "us-east-1",
        "runtime": "python3.7",
        "apigateway_enabled": true,
        "s3_bucket": "*******"← Veuillez changer pour un nom approprié
    }
}

Exemple de code

Fichier HTML à sortir. Veuillez noter que l'emplacement du fichier est sous templete.

template/index.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HELLO</title>
</head>
<body>
    <p>Merry Christmas</p>
</body>
</html>

Code Python

test.py


from flask import Flask, render_template
app = Flask(__name__)
 
@app.route('/')
def hello():
    html = render_template('index.html')
    return html
 
if __name__ == "__main__":
    app.run()

De plus, c'est un échantillon ennuyeux. .. ..

commande zappa (déployer, mettre à jour, supprimer)

Après avoir préparé le fichier ci-dessus, le reste de l'opération se déroulera comme suit.

(Lors du déploiement d'un projet pour la première fois)
$ zappa deploy dev
(Lors de la mise à jour)
$ zappa update dev
(Lors de la suppression)
$zappa undeploy dev

Lorsque vous l'exécutez, l'URL apparaît, vous pouvez donc l'exécuter en y accédant.

Que diriez-vous? Si vous suivez les étapes ci-dessus, tout ce que vous avez à faire est de mettre en œuvre l'application. Vous pouvez facilement le publier, alors essayez-le!

Recommended Posts

La première étape de la création d'une application sans serveur avec Zappa
J'ai essayé de créer un traitement par lots sans serveur pour la première fois avec DynamoDB et Step Functions
[Introduction à Udemy Python3 + Application] 47. Traitez le dictionnaire avec une instruction for
Enregistrer l'objet dans un fichier avec pickle
AWS Step Functions pour apprendre avec un exemple
[Introduction à l'application Udemy Python3 +] 9. Tout d'abord, imprimez avec print
Comment créer un sous-menu avec le plug-in [Blender]
La première étape pour obtenir Blender disponible à partir de Python
Transition vers l'écran de mise à jour avec le Django a tag
Comment convertir un tableau en dictionnaire avec Python [Application]
Trouver une solution au problème N-Queen avec un algorithme génétique (2)
Probablement le moyen le plus simple de créer un pdf avec Python 3
Python> Liste> partitions = [0] * len (all_filepaths) / partitions [: test_set_size] = [1] * Après avoir créé une liste avec test_set_size> 0, définissez la partie avant sur 1.
Une histoire sur la façon de traiter le problème CORS
La façon habituelle d'ajouter un noyau avec Jupyter Notebook
Road to the Wizard: Étape 8 (Interpréter comment devenir un hacker)
Trouver une solution au problème N-Queen avec un algorithme génétique (1)
Une histoire que j'ai eu du mal en essayant de créer une "application qui convertit des images comme des peintures" avec la première application Web
Notez que j'étais accro à accéder à la base de données avec mysql.connector de Python en utilisant une application Web
Transformons le logiciel d'analyse de Wiire en une application WEB! Premier pas!
Création d'un modèle séquentiel Tensorflow avec une image originale ajoutée à MNIST
Précautions lors de la création d'un tableau à deux dimensions avec toutes les mêmes valeurs
TensorFlow 2.X & TensorRT est la première étape pour accélérer l'inférence
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
Comment faire une commande pour lire le fichier de paramètres avec pyramide
Une note à laquelle j'étais accro lors de la création d'une table avec SQL Alchemy
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
Je voulais résoudre le problème ABC164 A ~ D avec Python
Écrivez un script pour calculer la distance avec le système Elasticsearch 5 sans douleur
Raspberry Pi --1 --Première fois (Connectez un capteur de température pour afficher la température)
J'ai essayé de créer une application todo en utilisant une bouteille avec python
Un script qui renvoie 0, 1 attaché au premier Python prime
Il y a un long chemin à parcourir pour développer une application web
Comment envoyer une requête à l'API DMM (FANZA) avec python
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Comment créer une API de machine learning sans serveur avec AWS Lambda
Route vers l'assistant: 4e étape
Étape par étape pour créer un Dockerfile
Créer un arbre déterminé avec scikit-learn
Créer un serveur Flask avec Docker
Web scraping avec Python Première étape
Déployer l'application Django avec Docker
Créer une application Web avec Django
Créer une application Web avec Flask ①
Créer une application Web avec Flask ③
Créer une application Web avec Flask ④
La première étape de Python Matplotlib
Road to the Wizard: 7e étape
Comment exécuter le code pratique du livre "Making Profitable AI with Python" sur Google Colaboratory
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
Réfléchissez à la façon d'écrire un filtre avec les versions Shotgun API-Contact
J'étais accro à la création d'un environnement Python venv avec VS Code
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (théorie)