[PYTHON] AWS Lambda-Entwicklung Meine Best Practices

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

Dienst-Konfiguration

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.

Sprachauswahl

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.

Integrierte Entwicklungsumgebung (IDE)

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.

Lokale Ausführungsumgebung

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:

Platzieren Sie das installierte boto3 über Path, damit zur Laufzeit auf es verwiesen werden kann. python path.png

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. us-east-1.png

Ä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

AWS Lambda-Entwicklung Meine Best Practices
Best Practices für selbsternannte Raspeye-Remote-Entwicklungseinstellungen
Die Lambda-Funktion bietet Best Practice mit CircleCI + Lamvery
Mein bestes hier Dokument
Persönliche Best Practices für die Python-Entwicklungsumgebung mit VS-Code
Probieren Sie AWS Lambda Destinations aus
[Python] Scraping in AWS Lambda
Die einfachste AWS Lambda-Implementierung
Lernen Sie Best Practices von Cookiecutter-Django
__version__ Fallen und Best Practices
Web Scraping mit AWS Lambda
Best Practice für die Anmeldung im JSON-Format unter AWS Lambda / Python
Ich habe eine Instanz zu einem bestimmten Zeitpunkt mit AWS Lambda gestoppt