Verwendung des Java-Frameworks mit AWS Lambda! ??

TL;DR

Wollten Sie schon immer ein Java-Framework wie Spring Boot mit AWS Lambda verwenden?

Zusammenfassend lässt sich sagen, dass es relativ einfach ist, ein Proxy-Framework namens aws-serverless-java-container auf AWS Lambda zu setzen. Ist machbar.

Heute möchte ich darüber schreiben und diesen AWS-Blog leicht übersetzen.

AWS Open Source Blog Running APIs Written in Java on AWS Lambda

Hintergrund

Java-Entwickler entwickeln häufig mit bekannten Frameworks wie Spring und Spring Boot, Jersey und Spark.

Diese Frameworks können verwendet werden, um erstellte Wars and Jars mithilfe eines Servlet-Containers wie Tomcat bereitzustellen, oder um als ausführbares Jar mit einer Anwendung verwendet zu werden.

Mit AWS Serverless können Sie ein Web-Backend mit AWS Lambda und Amazon API Gateway erstellen. Lambda ist jedoch für die Datenverarbeitung und API Gateway für die Verwaltung von REST verantwortlich.

In diesem Artikel werde ich das Framework aws-serverless-java-container vorstellen, das mit Lambda verwendet werden kann.

Wie es funktioniert

Einfach ausgedrückt wird aws-serverless-java-container mit Frameworks wie Spring, Spring Boot, Jersey und Spark erstellt. Es macht es Ihnen einfach, Ihre Anwendung in AWS Lambda mit minimalen Codeänderungen auszuführen.

フレームワーク間のプロキシ

aws-serverless-java-container fungiert als Proxy zwischen der Lambda-Laufzeit und dem ausgewählten Framework und gibt vor, eine Servlet-Engine zu sein. Konvertiert das Ereignis vom API-Gateway in ein Anforderungsobjekt, das das Framework verstehen kann, und das Antwortobjekt von der Anwendung in ein Format, das das API-Gateway verstehen kann.

Wenn Sie Ihre eigene App mit Spring Boot 2 auf Lambda erstellen möchten, finden Sie hier die detaillierte Installationsmethode. Quick start Spring Boot2

Beispiel-App herunterladen

Lassen Sie uns aws-serverless-java-container von awslab klonen. Es enthält Proxys und Beispielcode für verschiedene Java-Frameworks.

$ git clone https://github.com/awslabs/aws-serverless-java-container.git

Klicken Sie hier, um einen Proxy für Ihre eigene Anwendung zu erhalten

Sie können diese verwenden, um Ihre eigene App zu erstellen. Der Einfachheit halber möchte ich jedoch das Spring Boot 2-Beispiel in diesem Artikel verwenden.

Einführung von Spring Boot 2 in Lambda

Beispiele für Spring Boot2 Pet Shop

Lassen Sie uns zunächst die folgenden Voraussetzungen erfüllen.

Lassen Sie uns zunächst eine Java-Anwendung mit dem Befehl mvn erstellen.

$ cd aws-serverless-java-container/samples/springboot2/pet-store/
$ mvn package

Wenn der Befehl mvn erfolgreich ist, sollte sich im Verzeichnis "target" eine "serverless-spring-boot-example-1.0-SNAPSHOT.jar" befinden.

Verwenden Sie als Nächstes AWS SAM, um ein Paket für die Bereitstellung auf Lambda zu erstellen. Geben Sie für "" einen geeigneten S3-Eimernamen an.

$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket <YOUR S3 BUCKET NAME>

Sobald Sie ein Paket für die Bereitstellung haben, ist es Zeit, es für Lambda bereitzustellen. Diese Bereitstellung stellt AWS Lambda bereit, das die Logik verwaltet, und API Gateway, das HTTPS-Anforderungen empfängt und Lambda aufruft.

$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringBootSample --capabilities CAPABILITY_IAM

Wenn die Bereitstellung erfolgreich ist, können Sie den Endpunkt der API ermitteln, die tatsächlich mit dem folgenden Befehl erstellt wurde.

$ aws cloudformation describe-stacks --stack-name ServerlessSpringBootSample
{
    "Stacks": [
        {
            "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/JerseySample/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", 
            "Description": "Example Pet Store API written with spark with the aws-serverless-java-container library", 
            "Tags": [], 
            "Outputs": [
                {
                    "Description": "URL for application", 
                    "OutputKey": "SpringBootPetStoreApi", 
                    "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets"
                }
            ], 
            "CreationTime": "2016-12-13T22:59:31.552Z", 
            "Capabilities": [
                "CAPABILITY_IAM"
            ], 
            "StackName": "JerseySample", 
            "NotificationARNs": [], 
            "StackStatus": "UPDATE_COMPLETE"
        }
    ]
}

Der in "OutputValue" angegebene API-Endpunkt ist der URI der API, die dieses Mal bereitgestellt und gestartet wird.

Lassen Sie uns die Operation überprüfen.

$ curl https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets

Wenn der resultierende JSON zurückgegeben wird, sind Sie erfolgreich!

Wie war das? Es war so einfach, die Beispiel-App zu installieren.


Wie mache ich den nächsten Schritt?

Spring Boot 2 ist ein großartiges Framework, das einfach auf Lambda ausgeführt werden kann, indem Sie die obigen Schritte ausführen. Wenn Sie jedoch ein kleineres Framework mit einer kleineren Umdrehung einführen möchten, können Sie auch "Spark" oder "Micronaut" verwenden. Versuch es bitte.

Darüber hinaus ist für Workloads, bei denen die Latenz beim ersten Start von Lambda ein Problem darstellt, auch die native Ausführung mit GraalVM von Oracle möglich.

Klicken Sie hier, um ein Beispiel für die native Konvertierung mit Micronaut und GraalVM anzuzeigen Micronaut X Graal VM-Beispiel-Tierhandlung

Weitere Informationen zu diesem Artikel finden Sie in den Präsentationsmaterialien des JJUG CCC 2019 Herbst.

[Über Java in der Ära ohne Server](https://www.slideshare.net / AmazonWebServicesJapan / serverlessjava-199195000) Über Java in der Ära ohne Server

Recommended Posts

Verwendung des Java-Frameworks mit AWS Lambda! ??
Verwendung der Java-API mit Lambda-Ausdrücken
Verwendung von Java-Lambda-Ausdrücken
Verwendung von BootStrap mit Play Framework
Verwenden Sie Lambda-Ebenen mit Java
[Java] Verwendung von Map
Verwendung von Java Optional
Verwendung der Java-Klasse
[Java] Verwendung von removeAll ()
Verwendung von Java Map
Verwendung von Java-Variablen
Verwendung von HttpClient (Get) von Java
[Java] Verwendung der Join-Methode
[Verarbeitung × Java] Verwendung von Variablen
Wie man mssql-tools mit alpine benutzt
[JavaFX] [Java8] Verwendung von GridPane
Verwendung von Klassenmethoden [Java]
[Java] Verwendung von List [ArrayList]
Wie verwende ich Klassen in Java?
[Verarbeitung × Java] Verwendung von Arrays
[Java] Verwendung der Math-Klasse
Verwendung des Java-Aufzählungstyps
Verwendung des mit Tensorflow 2.0 trainierten Modells mit Kotlin / Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
[Java] Verwendung der File-Klasse
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Verwendung der Submit-Methode (Java Silver)
[Leicht verständliche Erklärung! ] Verwendung der Java-Instanz
[Java] Verwendung der toString () -Methode
Studieren der Verwendung des Konstruktors (Java)
[Verarbeitung × Java] Verwendung der Schleife
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
Verwendung und Definition von Java-Klassen, Importieren
[Leicht verständliche Erklärung! ] Verwendung des Java-Polymorphismus
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
[Verarbeitung × Java] Verwendung der Klasse
Verwendung der Java Scanner-Klasse (Hinweis)
[Verarbeitung × Java] Verwendung der Funktion
[Leicht verständliche Erklärung! ] Verwendung von ArrayList [Java]
[Java] Verwendung der Calendar-Klasse
[Java] Erfahren Sie, wie Sie Optional richtig verwenden
[Leicht verständliche Erklärung! ] Verwendung von Java-Überladung
try-catch-finally Ausnahmebehandlung Verwendung von Java
[Leicht verständliche Erklärung! ] Verwendung der Java-Kapselung
[Java] So testen Sie, ob es in JUnit null ist
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for