Blog

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

Dennis Vriend

Aktualisiert Oktober 21, 2025
3 Minuten

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

Contact

Let’s discuss how we can support your journey.