Ich werde die Best Practices der AWS Lambda-Entwicklung schreiben, die meiner Meinung nach mit JavaEE (Java Web Application Development) als Hauptkompetenz verbunden sind, sowie Tipps zum Erstellen einer Entwicklungsumgebung.
Ich habe eine JavaEE-Qualifikation, daher denke ich, dass ich einige Programmierkenntnisse habe, aber ich arbeite seit ungefähr einem Monat an AWS Lambda. Für andere Sprachen als Java lautet die Stufe "Wenn Sie die Referenz lesen, können Sie sie so schreiben".
Ich habe mich für die serverlose Architektur von API Gateway + Lambda + DynamoDB entschieden, abhängig von der zu realisierenden Anwendung. Ich habe versucht, mich nicht um den Server zu kümmern.
Verwenden Sie für die Quellcodeverwaltung CodeCommit (git) und fassen Sie es in AWS zusammen.
Ab Mai 2017 sind für AWS Lambda die Sprachen C #, Node.js (JavaScript), Java und Python verfügbar. Darüber hinaus ist der Unterschied in der Version nicht in den Optionen enthalten, da erkannt wird, dass der Unterschied in den Sprachspezifikationen nicht so groß ist.
Die Auswahlkriterien basieren auf der Entwicklungsproduktivität und der einfachen Bereitstellung. (Meiner Meinung nach)
Komprimieren Sie für C # und Java die Binärdateien (es gibt auch ein JAR für Java) und laden Sie sie hoch oder platzieren Sie sie in S3. Darüber hinaus können Node.js und Python direkt über die Verwaltungskonsole bearbeitet werden. (Es kann gemacht werden, weil die Sprache ein Dolmetscher ist) Wenn jedoch sowohl Node.js als auch Python modularisiert sind (Dateidivision), werden sie konsolidiert und mit Zip hochgeladen.
Ich denke, Node.js und Python sind überlegen, weil es einfach ist, die Funktion des codierten sofort zu überprüfen.
Für mich als Java-Shop kostet die asynchrone Verarbeitung von Node.js viel Lernen. Sobald ich anfing zu programmieren, blieb ich in der Callback-Hölle stecken und konnte keine Geschäftslogik schreiben. Es war sehr stressig, weil ich den einfachen Prozess der Rückgabe des Verarbeitungsergebnisses in der Funktion als Rückgabewert und der Fortsetzung der Verarbeitung des Anrufers nicht einfach schreiben konnte.
Nach einem Monat ist Python eine gute Sprache in Bezug auf Produktivität und Bereitstellung.
Eclipse ist für mich als Java-Shop die Wahl
Es gibt ein Paket, das das Plugin für Python auf der Pleiades-Website einführt, dem ich immer verpflichtet bin, also werde ich es verwenden. Wenn Sie die IDE verwenden, ist es praktisch, dass Sie die Syntax auch in der Interpretersprache überprüfen und das Programm über die IDE ausführen können.
Sie können auch das AWS Toolkit für Eclipse mit Eclipse verwenden. CodeCommit kann auch von Eclipse's EGit verwendet werden, sodass Sie sich die Mühe ersparen können, andere Tools vorbereiten zu müssen.
Wenn Sie es im freien Rahmen von AWS verwenden, müssen Sie sich keine Sorgen machen. Ich denke, Sie können auch eine lokale Ausführungsumgebung erstellen und ohne zu zögern entwickeln.
Die folgenden Arbeiten sind erforderlich, um die Umgebung zu erstellen.
~~ -Pleiades (für Python) Installation ~~ ~~ ⇒ Von hier aus installieren (http://mergedoc.osdn.jp/) ~~
~~ -Einführung des AWS Toolkit für Eclipse ~~ ~~ ⇒ Referenz (http://docs.aws.amazon.com/ja_jp/toolkit-for-eclipse/v1/user-guide/setup-install.html) ~~
Korrigieren Sie das obige Installationsverfahren für Eclipse und AWS Toolkit für Eclipse. Wenn Sie für Python angepasste Plejaden verwenden, können Sie das Haupt-Plugin von AWS Toolkit für Eclipse nicht installieren, da kein JDT (Eclipse Java Development Tools) vorhanden ist.
Hier sind die Schritte, die ich tatsächlich unternommen habe:
Installation von Pleiades (für Eclipse 4.6 Neon 3 Java) ⇒ Von hier aus installieren (http://mergedoc.osdn.jp/)
Einführung des AWS Toolkit für Eclipse ⇒ Referenz (http://docs.aws.amazon.com/ja_jp/toolkit-for-eclipse/v1/user-guide/setup-install.html)
Pydev-Installation ⇒ Installieren Sie Pydev vom Eclipse Marketplace
Installieren Sie Python 3.6 für Windows ⇒ Von hier aus installieren (https://www.python.org/)
Installieren Sie boto3 mit pip ⇒Verwenden Sie pip.exe im Python-Installationsverzeichnis. Führen Sie den folgenden Befehl an der DOS-Eingabeaufforderung aus
>pip install boto3
Platzieren Sie das installierte boto3 über Path, damit zur Laufzeit auf es verwiesen werden kann.
Als Einschränkung scheint Dynamo DB Local eine feste Region von us-east-1 zu haben, daher ist es notwendig, das Dynamodb-Verbindungsziel auf der Programmseite abzugleichen.
Sie können verstehen, dass us-east-1 behoben ist, da beim Erstellen einer Tabelle dem Dateinamen Region hinzugefügt wird.
Ändern Sie also den Quellcode für die lokale Umgebung. ~~ ~~ * Dies ist ein Problem, wenn es in einer AWS-Umgebung platziert wird. Daher möchte ich etwas dagegen tun. ~~ Dies wurde mithilfe von Umgebungsvariablen gelöst. (Danke für deinen Kommentar, Wukann)
env.py
#Datei, die umgebungsabhängige Einstellungen beschreibt
import os
import boto3
if os.environ.get('EXEC_ENV') == 'TEST':
#Ändern Sie den Port für die Verbindung für DynamoDB Local
print('Environment is TEST')
dynamodb = boto3.resource('dynamodb', region_name='us-east-1', endpoint_url="http://localhost:8001")
else:
#Verbindung bei Ausführung unter AWS
dynamodb = boto3.resource('dynamodb')
Danach erstellen wir einen Treiber zum Ausführen der AWS Lambda-Funktion. Da die Eingabe vom API-Gateway jedoch im JSON-Format erfolgt, schreiben Sie einen Treiber, der die Eingabeparameter im JSON-Format übergibt.
Handler-Fahrer
#In der Umgebungsvariablen, um die DynamoDB-Verbindung zurückzugeben'TEST'Der Satz
import os
os.environ['EXEC_ENV'] = 'TEST'
#Getestete Funktion
from xxx_function import xxx_function_handler
if __name__ == '__main__':
event = {
"body": "{\"param1\":\"aaaa\",\"param2\":\"bbbb\",\"param3\":\"cccc\"}"
}
result = xxx_function_handler(event ,None)
logger.debug('result{}'.format(result))
Dies vervollständigt die Entwicklungsumgebung und die Ausführungsumgebung, in der der Unit-Test lokal durchgeführt werden kann.
Recommended Posts