Kotless steht für Kotlin Serverless Framework.
Sein Fokus liegt auf der Reduzierung der Routine der serverlosen Bereitstellungserstellung, indem sie direkt aus dem Code der Anwendung selbst generiert wird.
Kotless gibt Ihnen also einfach eine magische Taste, um Ihre Webanwendung als serverlose Anwendung auf AWS und Azure bereitzustellen!
Kotless besteht aus zwei Hauptteilen:
Eines der Hauptmerkmale von Kotless ist die Fähigkeit, in vorhandene Anwendungen einzubetten. Kotless macht eine super einfache Bereitstellung vorhandener Spring- und KTOR -Anwendungen für AWS- und Microsoft Azure Serverless -Plattformen.
Kotless verwendet Gradle, um den vorhandenen Bauprozess zu wickeln und den Einsatz in ihn einzufügen.
Erwägen Sie, eine der neuesten Versionen von Gradle zu verwenden, beginnend mit der 7.2 -Version.
Wenn Sie bereits Gradle verwenden, müssen Sie nur zwei Dinge tun.
Richten Sie zunächst das kotless Gradle -Plugin ein.
Sie müssen Gradle mitteilen, wo Sie das Plugin finden, indem Sie settings.gradle.kts :
pluginManagement {
resolutionStrategy {
this .eachPlugin {
if (requested.id.id == " io.kotless " ) {
useModule( " io.kotless:gradle: ${ this .requested.version} " )
}
}
}
repositories {
maven(url = uri( " https://packages.jetbrains.team/maven/p/ktls/maven " ))
gradlePluginPortal()
mavenCentral()
}
}Und wenden Sie das Plugin an:
// Imports are necessary, for this example
import io.kotless.plugin.gradle.dsl.Webapp.Route53
import io.kotless.plugin.gradle.dsl.kotless
// Group may be used by Kotless DSL to reduce the number of introspected classes by package
// So, don't forget to set it
group = " org.example "
version = " 0.1.0 "
plugins {
// Version of Kotlin should be 1.3.72+
kotlin( " jvm " ) version " 1.5.31 " apply true
id( " io.kotless " ) version " 0.2.0 " apply true
}Zweitens fügen Sie Ihrer Anwendung Kotless DSL (oder KTOR oder Spring Start) als Bibliothek hinzu:
repositories {
mavenCentral()
// Kotless repository
maven(url = uri( " https://packages.jetbrains.team/maven/p/ktls/maven " ))
}
dependencies {
implementation( " io.kotless " , " kotless-lang " , " 0.2.0 " )
implementation( " io.kotless " , " kotless-lang-aws " , " 0.2.0 " )
// if you want to deploy to Microsoft Azure, just replace -aws with -azure
// implementation("io.kotless", "ktor-lang-azure", "0.2.0")
// or for Ktor (Note, that `ktor-lang` depends on Ktor version 1.5.0)
// implementation("io.kotless", "ktor-lang", "0.2.0")
// implementation("io.kotless", "ktor-lang-aws", "0.2.0")
// implementation("io.kotless", "ktor-lang-azure", "0.2.0")
// or for Spring Boot (Note, that `spring-boot-lang` depends on Spring Boot version 2.3.0.RELEASE)
// implementation("io.kotless", "spring-boot-lang", "0.2.0")
// implementation("io.kotless", "spring-boot-lang-aws", "0.2.0")
// implementation("io.kotless", "spring-boot-lang-azure", "0.2.0")
} Bitte beachten Sie, dass Sie, wenn Sie KTOR- oder Spring-Boot verwenden, die vorhandene in Ihrer Projektabhängigkeit durch eine spezielle Kotless *-lang -Abhängigkeit ersetzen müssen. Danach müssen Sie auch die Version von abhängigen Bibliotheken (wie Spring Security) mit der in *-lang gebündelten Version ausrichten (siehe diesen Absatz)
Auf diese Weise haben Sie Zugriff auf DSL -Schnittstellen in Ihrem Code und richten Sie einen Lambda -Dispatcher in Ihrer Anwendung ein.
Abhängig von einem Anwendungsfall möchten Sie möglicherweise die Anwendung entweder in AWS oder in Microsoft Azure bereitstellen.
Beachten Sie, dass Sie, wenn Sie überhaupt kein Cloud -Konto haben, noch Kotless lokal verwenden können, um Ihre Anwendung auszuführen und zu debuggen. Verwenden Sie einfach die local Gradle -Aufgabe.
Wenn Sie kein AWS -Konto haben, können Sie es nach einfachen Anweisungen von Hadi Hariri erstellen.
Wenn Sie ein AWS -Konto haben und die eigentliche Bereitstellung ausführen möchten, lassen Sie uns alles dafür einrichten! Es ist ziemlich einfach:
kotless {
config {
aws {
storage {
bucket = " kotless.s3.example.com "
}
profile = " example "
region = " eu-west-1 "
}
}
webapp {
dns( " kotless " , " example.com " )
}
}Hier richten wir die Konfiguration von Kotless selbst ein:
Anschließend richten wir eine bestimmte Anwendung zur Bereitstellung ein:
Und das ist das ganze Setup!
Die Bereitstellung für Microsoft Azure ist auch ziemlich unkompliziert und einfach:
kotless {
config {
azure {
storage {
storageAccount = " your-storage-account "
container = " container-which-kotless-would-use "
}
terraform {
backend {
resourceGroup = " your-resource-group "
}
}
}
}
webapp {
dns( " kotless " , " example.com " )
}
}
Hier richten wir die Konfiguration von Kotless selbst ein:
Anschließend richten wir eine bestimmte Anwendung zur Bereitstellung ein:
Und das ist das ganze Setup!
Jetzt können Sie Ihre erste serverlose Anwendung mit kotless DSL erstellen:
@Get( " / " )
fun main () = " Hello world! "Oder mit Ktor:
class Server : Kotless () {
override fun prepare ( app : Application ) {
app.routing {
get( " / " ) {
call.respondText { " Hello World! " }
}
}
}
}Oder mit Spring Stiefel:
@SpringBootApplication
open class Application : Kotless () {
override val bootKlass : KClass < * > = this :: class
}
@RestController
object Pages {
@GetMapping( " / " )
fun main () = " Hello World! "
}Kotless-basierte Anwendungen können lokal als HTTP-Server starten. Diese Funktionalität wird von allen DSLs unterstützt.
Darüber hinaus kann der kotlose lokale Start eine AWS -Emulation (Docker benötigt). Sofortinstantieren Sie Ihren AWS -Service -Client einfach über Override für kotlose lokale Starts:
val client = AmazonDynamoDBClientBuilder .standard().withKotlessLocal( AwsResource . DynamoDB ).build()Und aktivieren Sie es in Gradle:
kotless {
// <...>
extensions {
local {
// enables AWS emulation (disabled by default)
useAWSEmulation = true
}
}
}Während des lokalen Laufs wird LocalStack gestartet und alle Kunden werden automatisch auf den Endpunkt hingewiesen.
Lokale Startfunktionalität erfordert keinen Zugriff auf den Cloud -Anbieter. Sie können daher überprüfen, wie sich Ihre Anwendung ohne AWS -Konto verhält. Außerdem können Sie Ihre Bewerbung lokal aus Ihrer IDE debuggen.
Kotless kann vorhandene Spring -Boot- oder KTOR -Anwendung auf AWS Serverless Platform bereitstellen. Zu diesem Zweck müssen Sie ein Plugin einrichten und die vorhandene Abhängigkeit durch die entsprechende kotlose DSL ersetzen.
Für KTOR sollten Sie die vorhandene Engine (z. B. implementation("io.ktor", "ktor-server-netty", "1.5.0") ) mit implementation("io.kotless", "ktor-lang", "0.1.6") ersetzen. Beachten Sie, dass diese Abhängigkeit KTOR von Version 1.5.0 bündelt. Möglicherweise müssen Sie möglicherweise andere KTOR-Bibliotheken (wie ktor-html-builder ) auf diese Version aktualisieren.
Für Spring Boot sollten Sie den von Ihnen verwendeten Starter implementation("org.springframework.boot", "spring-boot-starter-web", "2.3.0.RELASE) implementation("io.kotless", "spring-boot-lang", "0.1.6") 2.4.2
Sobald dies erledigt ist, können Sie deploy von Aufgaben erfüllen und Ihre Anwendungslust nicht serverend machen. Beachten Sie, dass Sie die Anwendung weiterhin lokal über local Gradle -Aufgabe ausführen können.
Während Kotless als Framework für die schnelle Erstellung serverloser Anwendungen verwendet werden kann, verfügt es über viele weitere Funktionen, die verschiedene Anwendungsbereiche abdecken.
Einschließlich, aber nicht beschränkt auf:
@Scheduled -Jobs im Zeitplan auszuführen.Kotless befindet sich in aktiver Entwicklung, daher arbeiten wir derzeit daran, diese Liste mit solchen Funktionen zu erweitern::
Jede Erklärung wird mit einem richtigen Beispiel viel besser.
Im examples des Repositorys finden Sie Beispielprojekte, die mit kotless DSL erstellt wurden:
kotless/site - eine Seite über kotless geschriebenes Kotless DSL (Site.kotless.io). In diesem Beispiel wird @StaticGet und @Get (statische und dynamische Routen) verwendet, sowie die API Link.kotless/shortener - Ein einfacher URL -Shortener mit kotless DSL (Short.kotless.io). Dieses Beispiel zeigt @Get (dynamische Routen), @Scheduled (geplante Lambdas), Berechtigungs -API (für Dynamodb -Zugriff) und Terraform -Erweiterungen.Ähnliche Beispiele existieren für KTOR:
ktor/site - Eine Site über Kotless, die mit Ktor (ktor.site.kotless.io) geschrieben wurde. Dieses Beispiel zeigt static {...} und routing {...} Verwendung.ktor/shortener - Ein einfacher URL -Shortener, der mit Ktor (ktor.short.kotless.io) geschrieben wurde. Dieses Beispiel zeigt routing { ... } (dynamische Routen), Berechtigungs -API (für DynamoDB -Zugriff) und Terraform -Erweiterungen.Und für Spring Stiefel:
spring/site - eine Website über Kotless mit Spring Boot (Spring.site.kotless.io). Dieses Beispiel zeigt die Verwendung von Statik und @RestController .spring/shortener - Ein einfacher URL -Shortener mit Spring Boot (Spring.Short.kotless.io). Dieses Beispiel zeigt die Verwendung von @RestController (Dynamic Routen), Berechtigungen -API (für DynamoDB -Zugriff) und Terraform -Erweiterungen. Sie können sich Wiki ansehen, in dem sich die Kundendokumentation zu Kotless befindet.
Abgesehen davon ist der kotlose Code selbst weit verbreitet, und Sie können sich seine Schnittstellen ansehen, um Kotless besser kennenzulernen.
Sie können Fragen stellen und an Diskussionen über #kotless Channel in Kotlinang Slack teilnehmen.
Besonderer Dank an: