[PYTHON] [Azure] Essayez d'utiliser Azure Functions

introduction

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)

Que préparer

python est fait avec 3.7.3. Étant donné qu'Azure est un service Microsoft (??), nous le créerons à l'aide de VScode.

procédure

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. スクリーンショット (400).png

① Travaux précédents: installer azure-functions-core-tools

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

② Créer une fonction

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. スクリーンショット (423).png

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 ".

(③) Tester localement

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.

④ Déployez sur le cloud

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.

<2> Entrez le nom de l'application de fonction

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>

<3> Sélection de la langue

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>

<4> Sélection du plan de facturation

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.

<5> Sélectionnez un groupe de ressources

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.

<6> Sélectionnez un compte de stockage

Stockage des données. Cela utilise également l'original.

<7> Sélectionnez Application Insights

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. スクリーンショット (420).png

⑤ Essayez d'utiliser la fonction créée

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. スクリーンショット (421).png 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

à la fin

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

[Azure] Essayez d'utiliser Azure Functions
Essayez d'utiliser Azure Logic Apps
Azure Functions: essayez des fonctions durables pour Python
Essayez d'utiliser Tkinter
Essayez d'utiliser docker-py
Essayez d'utiliser Cookiecutter
Essayez d'utiliser des géopandas
Essayez d'utiliser Selenium
Essayez d'utiliser scipy
Essayez d'utiliser pandas.DataFrame
Essayez d'utiliser django-swiftbrowser
Essayez d'utiliser matplotlib
Essayez d'utiliser tf.metrics
Essayez d'utiliser PyODE
Essayez d'utiliser Python avec Google Cloud Functions
Essayez d'utiliser virtualenv (virtualenvwrapper)
Essayez d'utiliser virtualenv maintenant
Essayez d'utiliser W & B
Essayez d'utiliser Django templates.html
[Kaggle] Essayez d'utiliser LGBM
Essayez d'utiliser l'analyseur de flux de Python.
Essayez d'utiliser Tkinter de Python
Notes utilisant des fonctions triangulaires
Essayez d'utiliser Tweepy [Python2.7]
Essayez d'utiliser le bloc-notes Jupyter à partir d'Azure Machine Learning
Essayez d'utiliser collate_fn de Pytorch
Essayez d'utiliser PythonTex avec Texpad.
[Python] Essayez d'utiliser le canevas de Tkinter
Essayez d'utiliser l'image Docker de Jupyter
Essayez d'utiliser scikit-learn (1) - Clustering K par méthode moyenne
Essayez d'utiliser matplotlib avec PyCharm
Essayez d'utiliser Kubernetes Client -Python-
Essayez d'utiliser l'API Twitter
Essayez d'utiliser OpenCV sur Windows
Essayez d'utiliser Jupyter Notebook de manière dynamique
Essayez d'utiliser AWS SageMaker Studio
Essayez de tweeter automatiquement en utilisant Selenium.
Essayez d'utiliser SQLAlchemy + MySQL (partie 1)
Essayez d'utiliser l'API Twitter
Essayez d'utiliser SQLAlchemy + MySQL (partie 2)
Essayez d'utiliser la fonction de modèle de Django
Essayez d'utiliser l'API PeeringDB 2.0
Essayez d'utiliser la fonction de brouillon de Pelican
Essayez d'utiliser pytest-Overview and Samples-
Essayez d'utiliser le folium avec anaconda
Essayez d'utiliser l'API Admin de la passerelle Janus
Essayez d'utiliser Spyder inclus dans Anaconda
Essayez d'utiliser des modèles de conception (édition exportateur)
Essayez d'utiliser Pillow sur iPython (partie 1)
Essayez d'utiliser Pillow sur iPython (partie 2)
Essayez d'utiliser l'API de Pleasant (python / FastAPI)
Essayez d'utiliser LevelDB avec Python (plyvel)
Essayez d'utiliser pynag pour configurer Nagios
Essayez d'utiliser la fonction de débogage à distance de PyCharm
Essayez d'utiliser ArUco avec Raspberry Pi
Essayez d'utiliser LiDAR bon marché (Camsense X1)
Utilisation de variables globales dans les fonctions python
[Serveur de location Sakura] Essayez d'utiliser flask.
Essayez d'utiliser Pillow sur iPython (partie 3)
Renforcer l'apprentissage 8 Essayez d'utiliser l'interface utilisateur de Chainer
Essayez d'obtenir des statistiques en utilisant e-Stat