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)
Python wird mit 3.7.3 erstellt. Da Azure ein Microsoft-Dienst (??) ist, erstellen wir ihn mit VScode.
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.
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
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.
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.
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.
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.
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>
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>
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.
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.
Speicherung von Daten. Dies verwendet auch das Original.
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.
Die Bereitstellung ist abgeschlossen, wenn "Bereitstellung bis ~~ abgeschlossen" angezeigt wird. Zu diesem Zeitpunkt können Sie auch die Funktionsseite des Azure-Portals anzeigen. 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
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