Ceci est un mémo lorsque j'ai essayé FaaS (Function as a Service), qui est un représentant de l'informatique sans serveur, sur Azure.
Azure dispose d'une fonctionnalité de déploiement de fonctions appelée «Azure Functions» (application de fonction). Dans AWS, il s'agit d'une fonction correspondant à "AWS Lambda".
Pour le moment, je vais l'écrire afin de ne pas oublier comment déployer une fonction créée localement.
(Il existe plusieurs autres façons)
python est fait avec 3.7.3. Étant donné qu'Azure est un service Microsoft (??), nous le créerons à l'aide de VScode.
Ce que nous allons créer est une "fonction qui renvoie le jour où l'année / le mois / le jour est entré".
Créez un dossier vide sur votre bureau pour stocker les «exemples de fonctions» et y travailler.
Azure Functions Core Tools semble être un module pour développer et tester des fonctions localement à partir d'un terminal ou d'une invite de commandes. Je vais le mettre en premier pour le moment.
Ouvrez simplement le terminal VScode et tapez la commande.
npm install -g azure-functions-core-tools
Puis au terminal
func init
Type. Un écran comme "Veuillez sélectionner la langue à utiliser" apparaîtra, alors sélectionnez "python".
Ensuite, certains fichiers seront générés dans le dossier.
Voici les fichiers nécessaires au déploiement. Si vous avez besoin de bibliothèques supplémentaires, ajoutez-les à requirements.txt
.
Puis au terminal
func new
Type.
Ensuite, un écran comme "Veuillez sélectionner le modèle à utiliser" apparaîtra.
Cette fois, je veux créer une fonction qui renvoie une valeur lorsque je lance une requête, alors sélectionnez Http trigger
.
On vous demandera "Dites-moi le nom de la fonction", donc cette fois je vais le régler sur "WhatDayOfWeek".
Un dossier nommé «WhatDayOfWeek» est créé dans le dossier «exemple de fonction» et contient le modèle.
Ce «__init __. Py» décrit le traitement à effectuer côté cloud.
Dans le modèle, lorsqu'une chaîne de caractères est lancée dans une requête HTTP, c'est une fonction qui renvoie "Hello [nom entré]!".
logging est un module python standard pour travailler avec les journaux. Il n'est pas écrit dans requirements.txt
, mais il peut être utilisé. (Au contraire, si vous l'ajoutez mal, vous ne pourrez pas le déployer.)
Seul ce «__init __. Py» peut être traité.
__init__.py
import logging
import azure.functions as func
#Une fonction qui détermine uniquement si c'est une année humide
def LeapOrNot(Y):
if (Y % 4 != 0):
return False
elif (Y % 100 != 0):
return True
elif (Y % 400 != 0):
return False
else:
return True
#Le jugement du nombre d'années hors-année est basé sur le jeudi 1er janvier 1970
def HowManyLeap(Y):
mul4 = Y // 4 - 492 #492 = 1970 // 4
mul100 = Y // 100 - 19 # 19 = 1970 // 100
mul400 = Y // 400 - 4 # 4 = 1970 // 400
return mul4 - mul100 + mul400
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
days = ['Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue', 'Wed']
day_num = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
Year = req.params.get('Year')
Month = req.params.get('Month')
Date = req.params.get('Date')
if not (Year and Month and Date):
try:
req_body = req.get_json()
except ValueError:
pass
else:
Year = req_body.get('Year')
Month = req_body.get('Month')
Date = req_body.get('Date')
Y = int(Year)
M = int(Month)
D = int(Date)
#edit validation
if Y < 1970:
return func.HttpResponse('Non pris en charge avant 1970',status_code=400)
elif M > 12:
return func.HttpResponse('La date est fausse',status_code=400)
elif LeapOrNot(Y):
if M == 2:
if day_num[M-1] + 1 < D:
return func.HttpResponse('La date est fausse',status_code=400)
elif day_num[M-1] < D:
return func.HttpResponse('La date est fausse',status_code=400)
else:
if day_num[M-1] < D:
return func.HttpResponse('La date est fausse',status_code=400)
#Calculez le nombre de jours écoulés
passed_num = (Y - 1970) * 365 + sum(day_num[:M-1]) + D - 1
if LeapOrNot(Y) and M > 2:
leap_num = HowManyLeap(Y)
elif LeapOrNot(Y):
leap_num = HowManyLeap(Y-1)
else:
leap_num = HowManyLeap(Y)
return func.HttpResponse('{}'.format(days[(passed_num + leap_num) % 7]))
La fonction elle-même est maintenant terminée.
Vous pouvez également créer une autre fonction en tapant func new
dans le dossier" sample function ".
Si vous voulez tester si cela fonctionne comme prévu
func start
Pour toutes les fonctions du dossier
WhatDayOfWeek: [GET,POST] http://localhost:7071/api/WhatDayOfWeek
Vous pouvez obtenir une URL comme celle-ci.
Avec ça,
http://localhost:7071/api/WhatDayOfWeek?Year=2020&Month=3&Day=26
Vous pouvez faire un test tel que lancer un paramètre et renvoyer Thu
.
Une fois que vous avez terminé la fonction localement, déployez-la. Si vous incluez des extensions basées sur Azure, vous pourrez utiliser des fonctions basées sur Azure à partir de la barre d'activité VScode. Vous devriez voir "FONCTIONS" dans la barre latérale, à partir de laquelle vous devriez voir les fonctions créées localement dans "Projet local" -> "Fonctions".
Vous pouvez déployer à partir de la pièce indiquée dans le cadre rouge ici. (Si vous ne vous êtes pas connecté à votre compte Azure, vous devrez vous connecter ici.) Avec juste ce bouton, vous pouvez déployer toutes les fonctions contenues dans "Projet Local".
À partir de là, vous pouvez effectuer le travail de déploiement sur Azure à partir de VScode. (Si vous créez toutes les ressources dans le portail Azure, vous pouvez simplement les déployer dans les ressources Azure Functions d'origine telles quelles.)
Je vais le faire à partir de zéro. <1> +Create new Function App in Azure (Advanced) Il vous sera demandé si vous souhaitez créer une nouvelle application de fonction. L'application de fonction créée par l'abonnement souscrit sera affichée, donc si vous la créez à l'avance, vous pouvez simplement la sélectionner ici. Certaines personnes ne disent pas «Avancé», mais il y a moins de paramètres.
Il vous sera demandé le nom de l'application de fonction que vous allez créer sur Azure, alors entrez-le. Ici, définissez-le comme "exemples de fonctions".
Il semble que ce nom doive être "unique au monde", mais est-ce la théorie selon laquelle il n'y a pas beaucoup d'utilisateurs pour pouvoir le faire avec ce nom? ?? </ del>
Sélectionnez la langue à utiliser dans l'application de fonction. Vous pouvez sélectionner node.js, java, etc., mais ici nous utiliserons python. On m'a demandé quand je l'ai fait localement, mais est-ce également demandé ici? Je pense </ del>
Il dit "Sélectionnez un plan d'hébergement". Il s'agit d'un plan de facturation, détaillé dans la Documentation Azure officielle. Grosso modo
Il y a 3 choix. Le paiement à l'utilisation est-il le plus proche de FaaS? Impression que. Cette fois, définissons-le sur Consommation.
Sélectionnez le groupe de ressources auquel appartient l'application de fonction. Si vous en créez un nouveau, on vous demandera probablement quelle région vous voulez créer, mais ici nous utiliserons l'original.
Stockage des données. Cela utilise également l'original.
Application Insights est comme un moniteur de surveillance des fonctions. Il semble que vous puissiez voir le journal et l'état des performances. (Document officiel)
S'il a été créé à l'origine avec un autre App Service, il semble que vous puissiez le sélectionner et l'intégrer. Cela peut être ignoré, vous n'en aurez peut-être pas besoin si vous souhaitez simplement créer une fonction pour le moment.
À ce stade, le déploiement commencera. Vous pouvez également voir le journal lors du déploiement à partir de la "sortie" de VScode.
Le déploiement est terminé lorsque «Déploiement vers ~~ terminé» s'affiche. À ce stade, vous pouvez également voir la page de fonction à partir du portail Azure. Si vous cliquez sur "URL" sur cet écran, vous devriez voir un écran comme "Votre fonction fonctionne!".
L'URL de la fonction peut être obtenue à partir de VScode en cliquant avec le bouton droit sur [Nom de l'abonnement] -> [Nom de la fonction créée] -> "Fonctions" -> [Nom de la fonction] et en sélectionnant "Copier l'URL de la fonction".
Créons du code python localement et expérimentons.
python
import requests
url = "[URL obtenue]"
param = {'Year':2020,'Month':3,'Date':26}
res = requests.get(url, params = param)
print(res.text)
☟ Résultat
Thu
Lorsque vous utilisez FaaS sur Azure, il semble y avoir un moyen de tout faire avec CLI. Je n'en suis pas tout à fait sûr. J'ai essayé et j'ai fait une erreur en regardant le document officiel, mais j'ai eu du mal. Si vous voulez juste "créer une fonction et la déployer pour le moment", je pense que c'est comme ça.
Recommended Posts