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.
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?
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.
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.
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.
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? ..
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 avec Zappa init
$ zappa init
En exécutant cette commande, un fichier appelé zappa_settings.js sera créé.
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é
}
}
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. .. ..
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