[PYTHON] [Azure] Versuchen Sie, Azure-Funktionen zu verwenden

Einführung

Dies ist ein Memo, als ich FaaS (Function as a Service), ein Vertreter von Serverless Computing, unter Azure ausprobierte.

Azure verfügt über eine Funktion zum Bereitstellen von Funktionen namens "Azure-Funktionen" (Funktions-App). In AWS ist dies eine Funktion, die "AWS Lambda" entspricht.

Vorerst werde ich es aufschreiben, damit ich nicht vergesse, wie eine lokal erstellte Funktion bereitgestellt wird.

(Es gibt verschiedene andere Möglichkeiten)

Was vorzubereiten?

Python wird mit 3.7.3 erstellt. Da Azure ein Microsoft-Dienst (??) ist, erstellen wir ihn mit VScode.

Verfahren

Was wir erstellen werden, ist eine "Funktion, die den Tag zurückgibt, an dem das Jahr / der Monat / der Tag eingegeben wird".

Erstellen Sie einen leeren Ordner auf Ihrem Desktop, um die Material- "Beispielfunktionen" zu speichern und darin zu arbeiten. スクリーンショット (400).png

① Frühere Arbeiten: Installieren Sie die Azure-Funktionen-Core-Tools

Azure Functions Core Tools scheint ein Modul zum lokalen Entwickeln und Testen von Funktionen über ein Terminal oder eine Eingabeaufforderung zu sein. Ich werde es vorerst zuerst einfügen.

Öffnen Sie einfach das VScode-Terminal und geben Sie den Befehl ein.

npm install -g azure-functions-core-tools

② Erstellen Sie eine Funktion

Dann am Terminal

func init

Art. Ein Bildschirm wie "Bitte wählen Sie die zu verwendende Sprache aus" wird angezeigt. Wählen Sie also "Python".

Anschließend werden einige Dateien im Ordner generiert. Dies sind die Dateien, die für die Bereitstellung benötigt werden. Wenn Sie zusätzliche Bibliotheken benötigen, fügen Sie diese zu "require.txt" hinzu.

Dann am Terminal

func new

Art. Daraufhin wird ein Bildschirm wie "Bitte wählen Sie die zu verwendende Vorlage aus" angezeigt. Dieses Mal möchte ich eine Funktion erstellen, die beim Auslösen einer Abfrage einen Wert zurückgibt. Wählen Sie also "HTTP-Trigger". Sie werden gefragt, ob Sie den Namen der Funktion angeben möchten. Diesmal setze ich ihn auf "WhatDayOfWeek".

Ein Ordner mit dem Namen "WhatDayOfWeek" wird im Ordner "sample function" erstellt und enthält die Vorlage. スクリーンショット (423).png

Dieses "__init __. Py" beschreibt die Verarbeitung, die auf der Cloud-Seite ausgeführt werden soll. Wenn in der Vorlage eine Zeichenfolge in einer HTTP-Anforderung ausgelöst wird, gibt diese Funktion "Hallo [eingegebener Name]!" Zurück. Die Protokollierung ist ein Standard-Python-Modul für die Arbeit mit Protokollen. Es ist nicht in "require.txt" geschrieben, kann aber verwendet werden. (Im Gegenteil, wenn Sie es schlecht hinzufügen, können Sie es nicht bereitstellen.)

Nur dieses __init __. Py kann verarbeitet werden.

__init__.py


import logging

import azure.functions as func

#Eine Funktion, die nur bestimmt, ob es ein feuchtes Jahr ist
def LeapOrNot(Y):
    if (Y % 4 != 0):
        return False
    elif (Y % 100 != 0):
        return True
    elif (Y % 400 != 0):
        return False
    else:
        return True

#Die Beurteilung der Anzahl der Nebenjahre basiert auf dem Donnerstag, dem 1. Januar 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('Nicht vor 1970 unterstützt',status_code=400)
    elif M > 12:
        return func.HttpResponse('Das Datum ist falsch',status_code=400)
    elif LeapOrNot(Y):
        if M == 2:
            if day_num[M-1] + 1 < D:
                return func.HttpResponse('Das Datum ist falsch',status_code=400)
        elif day_num[M-1] < D:
            return func.HttpResponse('Das Datum ist falsch',status_code=400)
    else: 
        if day_num[M-1] < D:
            return func.HttpResponse('Das Datum ist falsch',status_code=400)
    
    #Berechnen Sie die Anzahl der verstrichenen Tage
    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]))

Die Funktion selbst ist jetzt abgeschlossen. Sie können auch eine andere Funktion erstellen, indem Sie "func new" in den Ordner "sample function" eingeben.

(③) Lokal testen

Wenn Sie testen möchten, ob es wie erwartet funktioniert

func start

Für alle Funktionen im Ordner WhatDayOfWeek: [GET,POST] http://localhost:7071/api/WhatDayOfWeek Sie können eine URL wie diese erhalten. Mit diesem, http://localhost:7071/api/WhatDayOfWeek?Year=2020&Month=3&Day=26 Sie können einen Test durchführen, z. B. einen Parameter auslösen und "Do" zurückgeben.

④ In der Cloud bereitstellen

Wenn Sie die Funktion lokal abgeschlossen haben, stellen Sie sie bereit. Wenn Sie Azure-basierte Erweiterungen einschließen, können Sie Azure-basierte Funktionen in der VScode-Aktivitätsleiste verwenden. Sie sollten "FUNCTIONS" in der Seitenleiste sehen, von der aus Sie die lokal erstellten Funktionen unter "Local Project" -> "Functions" sehen sollten.

Sie können von dem im roten Rahmen gezeigten Teil hier bereitstellen. (Wenn Sie sich nicht bei Ihrem Azure-Konto angemeldet haben, müssen Sie sich hier anmelden.) Mit nur dieser Schaltfläche können Sie alle Funktionen in "Lokales Projekt" bereitstellen.

Von hier aus können Sie die Bereitstellungsarbeiten in Azure über VScode ausführen. (Wenn Sie alle Ressourcen im Azure-Portal erstellen, können Sie sie einfach so wie sie sind auf den ursprünglichen Azure-Funktionsressourcen bereitstellen.)

Ich werde es von Grund auf neu machen. <1> +Create new Function App in Azure (Advanced) Sie werden gefragt, ob Sie eine neue Funktions-App erstellen möchten. Die Funktions-App, die von dem Abonnement erstellt wurde, bei dem Sie angemeldet sind, wird angezeigt. Wenn Sie sie also im Voraus erstellen, können Sie sie einfach hier auswählen. Einige Leute sagen nicht "Erweitert", aber es gibt weniger Einstellungen.

<2> Geben Sie den Namen der Funktions-App ein

Sie werden nach dem Namen der Funktions-App gefragt, die Sie in Azure erstellen. Geben Sie sie ein. Stellen Sie hier "Beispielfunktionen" ein. Es scheint, dass dieser Name "global eindeutig" sein muss, aber ist es die Theorie, dass es nicht viele Benutzer gibt, die ihn mit diesem Namen erstellen können? ?? </ del>

<3> Sprachauswahl

Wählen Sie die Sprache aus, die in der Funktions-App verwendet werden soll. Sie können node.js, java usw. auswählen, aber hier verwenden wir Python. Ich wurde gefragt, wann ich es vor Ort gemacht habe, aber wird es auch hier gefragt? Ich denke </ del>

<4> Auswahl des Abrechnungsplans

Es heißt "Wählen Sie einen Hosting-Plan". Dies ist ein Abrechnungsplan, der ausführlich in Offizielle Azure-Dokumentation beschrieben wird. Grob gesagt

Es gibt 3 Möglichkeiten. Ist Pay-as-you-go das FaaS-artigste? Eindruck das. Dieses Mal setzen wir es auf Verbrauch.

<5> Wählen Sie eine Ressourcengruppe aus

Wählen Sie die Ressourcengruppe aus, zu der die Funktions-App gehört. Wenn Sie eine neue erstellen, werden Sie wahrscheinlich gefragt, welche Region Sie erstellen möchten, aber hier verwenden wir die ursprüngliche.

<6> Wählen Sie ein Speicherkonto aus

Speicherung von Daten. Dies verwendet auch das Original.

<7> Wählen Sie Application Insights

Application Insights ist wie ein Überwachungsmonitor für Funktionen. Es scheint, dass Sie das Protokoll und den Leistungsstatus sehen können. (Offizielles Dokument)

Wenn es ursprünglich mit einem anderen App Service erstellt wurde, können Sie es anscheinend auswählen und integrieren. Dies kann übersprungen werden, sodass Sie es möglicherweise nicht benötigen, wenn Sie vorerst nur eine Funktion erstellen möchten.

Zu diesem Zeitpunkt wird die Bereitstellung gestartet. Sie können das Protokoll auch während der Bereitstellung über die "Ausgabe" von VScode anzeigen. スクリーンショット (420).png

⑤ Verwenden Sie die erstellte Funktion

Die Bereitstellung ist abgeschlossen, wenn "Bereitstellung bis ~~ abgeschlossen" angezeigt wird. Zu diesem Zeitpunkt können Sie auch die Funktionsseite des Azure-Portals anzeigen. スクリーンショット (421).png Wenn Sie auf diesem Bildschirm auf "URL" klicken, sollte ein Bildschirm wie "Ihre Funktion funktioniert!" Angezeigt werden.

Die URL der Funktion erhalten Sie von VScode, indem Sie mit der rechten Maustaste auf [Abonnementname] -> [Name der erstellten Funktion] -> "Funktionen" -> [Funktionsname] klicken und "Funktions-URL kopieren" auswählen.

Lassen Sie uns lokal Python-Code erstellen und experimentieren.

python


import requests

url = "[Erhaltene URL]"

param = {'Year':2020,'Month':3,'Date':26}

res = requests.get(url, params = param)

print(res.text)

☟ Ergebnis

Thu

schließlich

Wenn Sie FaaS unter Azure verwenden, scheint es eine Möglichkeit zu geben, alles mit CLI zu tun. Da bin ich mir nicht ganz sicher. Ich habe es versucht und versucht, während ich mir das offizielle Dokument angesehen habe, aber es fiel mir schwer. Wenn Sie nur "eine Funktion erstellen und vorerst bereitstellen" möchten, ist das meiner Meinung nach so.

Recommended Posts

[Azure] Versuchen Sie, Azure-Funktionen zu verwenden
Versuchen Sie es mit Azure Logic Apps
Azure-Funktionen: Probieren Sie dauerhafte Funktionen für Python aus
Versuchen Sie es mit Tkinter
Versuchen Sie es mit Docker-Py
Versuchen Sie es mit einem Ausstecher
Versuchen Sie es mit Geopandas
Versuchen Sie es mit Selen
Versuchen Sie es mit scipy
Versuchen Sie es mit pandas.DataFrame
Versuchen Sie es mit Django-Swiftbrowser
Versuchen Sie es mit matplotlib
Versuchen Sie es mit tf.metrics
Versuchen Sie es mit PyODE
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
Versuchen Sie es mit virtualenv (virtualenvwrapper)
Versuchen Sie es jetzt mit virtualenv
Versuchen Sie es mit W & B.
Versuchen Sie es mit Django templates.html
[Kaggle] Versuchen Sie es mit LGBM
Versuchen Sie es mit dem Feed-Parser von Python.
Versuchen Sie es mit Pythons Tkinter
Notizen mit Dreiecksfunktionen
Versuchen Sie es mit Tweepy [Python2.7]
Versuchen Sie es mit dem Jupyter Notebook von Azure Machine Learning
Versuchen Sie es mit Pytorchs collate_fn
Versuchen Sie, PythonTex mit Texpad zu verwenden.
[Python] Versuchen Sie, Tkinters Leinwand zu verwenden
Versuchen Sie es mit Jupyters Docker-Image
Versuchen Sie es mit Scikit-Learn (1) - K-Clustering nach Durchschnittsmethode
Versuchen Sie es mit matplotlib mit PyCharm
Versuchen Sie es mit Kubernetes Client -Python-
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit OpenCV unter Windows
Versuchen Sie, Jupyter Notebook dynamisch zu verwenden
Versuchen Sie es mit AWS SageMaker Studio
Versuchen Sie, automatisch mit Selen zu twittern.
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 1)
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 2)
Versuchen Sie es mit der Vorlagenfunktion von Django
Versuchen Sie es mit der PeeringDB 2.0-API
Versuchen Sie es mit der Entwurfsfunktion von Pelican
Versuchen Sie es mit pytest-Overview und Samples-
Versuchen Sie es mit Folium mit Anakonda
Versuchen Sie es mit der Admin-API von Janus Gateway
Versuchen Sie es mit Spyder, das in Anaconda enthalten ist
Versuchen Sie es mit Designmustern (Exporter Edition)
Versuchen Sie es mit Pillow auf iPython (Teil 1)
Versuchen Sie es mit Pillow auf iPython (Teil 2)
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
Versuchen Sie es mit LevelDB mit Python (plyvel)
Versuchen Sie, Nagios mit pynag zu konfigurieren
Versuchen Sie, die Remote-Debugging-Funktion von PyCharm zu verwenden
Versuchen Sie es mit ArUco mit Raspberry Pi
Versuchen Sie es mit billigem LiDAR (Camsense X1)
Verwendung globaler Variablen in Python-Funktionen
[Sakura-Mietserver] Versuchen Sie es mit einer Flasche.
Versuchen Sie es mit Pillow auf iPython (Teil 3).
Stärkung des Lernens 8 Versuchen Sie, die Chainer-Benutzeroberfläche zu verwenden
Versuchen Sie, Statistiken mit e-Stat abzurufen