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
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.
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
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.
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 "
$ 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.
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.
[](https://www.slideshare.net / AmazonWebServicesJapan / serverlessjava-199195000) Über Java in der Ära ohne Server
Recommended Posts