Blog
Eine schnelle und einfache Methode zur Bereitstellung von Scala-basierten Lambdas in AWS mit sbt

Der Entwicklungszyklus von AWS-Lambdas in Scala ist die Hölle. Es gibt so viele Paketierungs- und Konfigurationsschritte, dass
mir die Produktivität raubt. Um dieses Problem zu lösen, haben wir ein Scala Build Tool Plugin namens sbt-sam entwickelt.
Das Plugin macht die Bereitstellung von serverlosen Anwendungen so einfach wie das Kompilieren Ihres Codes.
In diesem Blog zeigen wir Ihnen, wie einfach es ist, einen REST-Service mit Scala, AWS API Gateway und AWS Lambda zu erstellen.
Wir gehen von folgenden Voraussetzungen aus:
- Sie verwenden OSX
- Sie haben SBT installiert
- Sie haben ein AWS-Konto
-
das AWS-Konto über ausreichende Berechtigungen für die Bereitstellung von serverlosen Anwendungen verfügt Sie können eine serverlose Anwendung in Scala mit AWS Lambda in 3 einfachen Schritten erstellen:
-
Erstellen Sie ein SBT-Projekt
- Stellen Sie die Anwendung bereit
- Rufen Sie die Anwendung auf
Erstellen Sie ein SBT-Projekt
Um ein neues serverloses Anwendungsprojekt zu erstellen, geben Sie ein:
sbt new dnvriend/sam-seed.g8
Das Projekt stellt einige Fragen. Drücken Sie die Eingabetaste, um die Standardeinstellungen zu übernehmen:
name [sam-seed]:
package [com.github.dnvriend]:
organization [com.github.dnvriend]:
author_name [dnvriend]:
stage [dev]:
Template applied in ./sam-seed
Zu sbt in dem erstellten Projekttyp:
$ cd sam-seed
$ sbt
Das Plugin fügt die folgenden Befehle zu SBT hinzu:
- samInfo - zum Abrufen von Informationen aus Ihrer serverlosen Anwendung
- samValidate - um die generierte CloudFormation-Vorlage anzuzeigen
- samDeploy - zur Bereitstellung der serverlosen Anwendung
- samRemove - zum Entfernen der serverlosen Anwendung Die Implementierung der Lambda-Vorlage ist unten dargestellt:
package com.github.dnvriend
import com.github.dnvriend.lambda.annotation.HttpHandler
import com.github.dnvriend.lambda._
import play.api.libs.json._
@HttpHandler(path = "/hello", method = "get")
class HelloLambda extends ApiGatewayHandler {
override def handle(
request: HttpRequest,
ctx: SamContext
): HttpResponse = {
HttpResponse
.ok
.withBody(Json.toJson("Hello world"))
}
}
Die Klasse HelloLambda erweitert ApiGatewayHandler, was sie zu einem AWS Lambda macht. Der Lambda ist
mit HttpHandler mit dem Pfad '/hello' und der Methode 'get' annotiert. Das bedeutet, dass der Lambda über API Gateway zugänglich ist.
Stellen Sie die Anwendung bereit
Stellen Sie die Anwendung bereit, indem Sie samDeploy eingeben:
sbt:sam-seed> samDeploy
[info] Creating cloud formation stack
[info] CREATE_IN_PROGRESS - AWS::S3::Bucket - SbtSamDeploymentBucket - CREATE_IN_PROGRESS -
[info] CREATE_IN_PROGRESS - AWS::S3::Bucket - SbtSamDeploymentBucket - CREATE_IN_PROGRESS - Resource creation Initiated
...
[success] Total time: 102 s, completed Apr 11, 2018 7:04:00 PM
Nachdem der Dienst bereitgestellt wurde, verwenden Sie samInfo, um die URL zum Aufrufen des Dienstes zu erhalten:
sbt:sam-seed> samInfo
[info] ====================
[info] Name: com-github-dnvriend-dnv-sam-seed
[info] content: com-github-dnvriend-dnv-sam-seed
[info] Status: UPDATE_COMPLETE
...
[info] Endpoints:
[info] GET - https://uu0vpzo9f0.execute-api.eu-west-1.amazonaws.com/Prod/hello
Rufen Sie die Anwendung auf
Rufen Sie den Endpunkt auf, indem Sie eingeben:
$ curl https://uu0vpzo9f0.execute-api.eu-west-1.amazonaws.com/Prod/hello
"Hello world"
Ändern Sie den Text 'Hello World' in 'Goodbye World' und geben Sie samDeploy ein. Der neue Code wird auf AWS
bereitgestellt und ruft denselben Endpunkt erneut auf:
$ curl https://uu0vpzo9f0.execute-api.eu-west-1.amazonaws.com/Prod/hello
"Goodbye World"
Fazit
Mit dem SAM-Plugin für SBT ist die Entwicklung von serverlosen Anwendungen so einfach wie das Kompilieren von Code.
Eine schnelle Möglichkeit, serverlose Anwendungen zu erstellen, ist die Verwendung von Vorlagenprojekten. Aber das ist noch nicht alles.
Das Plugin unterstützt viele weitere AWS-Services und -Funktionen. Wir werden Ihnen in zukünftigen Blogs zeigen, wie Sie diese nutzen können.
Das nächste Mal werden wir uns ansehen, wie Sie den Webservice mit Amazon Cognito User Pools sichern können. Wir werden eine Scala-Anwendung erstellen, die
mit Cognito authentifiziert und den Webservice aufruft.
Wenn Sie Fragen haben, zögern Sie nicht, mich zu kontaktieren.
Verfasst von
Dennis Vriend
Unsere Ideen
Weitere Blogs
Contact



