Kotless adalah singkatan dari Kotlin Serverless Framework.
Fokusnya terletak pada mengurangi rutin pembuatan penempatan tanpa server dengan menghasilkannya langsung dari kode aplikasi itu sendiri.
Jadi, cukup berbicara, Kotless memberi Anda satu tombol ajaib untuk menggunakan aplikasi web Anda sebagai aplikasi tanpa server di AWS dan Azure!
Kotless terdiri dari dua bagian utama:
Salah satu fitur utama Kotless adalah kemampuannya untuk menanamkan aplikasi yang ada. Kotless membuat penyebaran super mudah dari aplikasi Spring dan Ktor yang ada ke AWS dan Microsoft Azure Serverless Platforms.
Kotless menggunakan Gradle untuk membungkus proses bangunan yang ada dan memasukkan penyebaran ke dalamnya.
Pertimbangkan untuk menggunakan salah satu versi lulusan terbaru, dimulai dengan versi 7.2 .
Pada dasarnya, jika Anda sudah menggunakan Gradle, Anda hanya perlu melakukan dua hal.
Pertama, atur plugin Gradle Kotless.
Anda harus memberi tahu Gradle di mana menemukan plugin dengan mengedit 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()
}
}Dan terapkan plugin:
// 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
}Kedua, tambahkan Kotless DSL (atau Ktor, atau Spring Boot) sebagai pustaka ke aplikasi Anda:
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")
} Harap dicatat bahwa jika Anda menggunakan Ktor atau Spring Boot, Anda perlu mengganti yang ada dalam ketergantungan proyek Anda dengan ketergantungan Kotless *-lang khusus. Juga, setelah itu Anda perlu menyelaraskan versi perpustakaan dependen (seperti keamanan musim semi) dengan versi yang dibundel dalam *-lang (lihat paragraf ini)
Ini memberi Anda akses ke antarmuka DSL di kode Anda dan mengatur operator lambda di dalam aplikasi Anda.
Bergantung pada kasus penggunaan, Anda mungkin ingin menggunakan aplikasi baik di AWS atau Microsoft Azure.
Perhatikan, bahwa jika Anda bahkan tidak memiliki akun cloud, Anda masih dapat menggunakan Kotless secara lokal untuk menjalankan dan men -debug aplikasi Anda - cukup gunakan tugas lulusan local .
Jika Anda tidak memiliki akun AWS, Anda dapat membuatnya mengikuti instruksi sederhana oleh Hadi Hariri.
Jika Anda memiliki akun AWS dan ingin melakukan penyebaran yang sebenarnya - mari kita atur semuanya untuk itu! Itu agak sederhana:
kotless {
config {
aws {
storage {
bucket = " kotless.s3.example.com "
}
profile = " example "
region = " eu-west-1 "
}
}
webapp {
dns( " kotless " , " example.com " )
}
}Di sini kami mengatur konfigurasi Kotless itu sendiri:
Kemudian kami mengatur aplikasi tertentu untuk digunakan:
Dan itulah seluruh pengaturan!
Penempatan ke Microsoft Azure juga cukup mudah dan sederhana:
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 " )
}
}
Di sini kami mengatur konfigurasi Kotless itu sendiri:
Kemudian kami mengatur aplikasi tertentu untuk digunakan:
Dan itulah seluruh pengaturan!
Sekarang Anda dapat membuat aplikasi tanpa server pertama Anda dengan Kotless DSL:
@Get( " / " )
fun main () = " Hello world! "Atau dengan Ktor:
class Server : Kotless () {
override fun prepare ( app : Application ) {
app.routing {
get( " / " ) {
call.respondText { " Hello World! " }
}
}
}
}Atau dengan boot musim semi:
@SpringBootApplication
open class Application : Kotless () {
override val bootKlass : KClass < * > = this :: class
}
@RestController
object Pages {
@GetMapping( " / " )
fun main () = " Hello World! "
}Aplikasi berbasis Kotless dapat dimulai secara lokal sebagai server HTTP. Fungsionalitas ini didukung oleh semua DSL.
Selain itu, start lokal Kotless dapat memutar emulasi AWS (diperlukan Docker). Cukup instantiate klien AWS Service Anda menggunakan override untuk Kotless Local Start:
val client = AmazonDynamoDBClientBuilder .standard().withKotlessLocal( AwsResource . DynamoDB ).build()Dan mengaktifkannya di Gradle:
kotless {
// <...>
extensions {
local {
// enables AWS emulation (disabled by default)
useAWSEmulation = true
}
}
}Selama menjalankan lokal, LocalStack akan dimulai dan semua klien akan diarahkan ke titik akhir secara otomatis.
Fungsi start lokal tidak memerlukan akses ke penyedia cloud, jadi Anda dapat memeriksa bagaimana aplikasi Anda berperilaku tanpa akun AWS. Juga, ini memberi Anda kemungkinan untuk men -debug aplikasi Anda secara lokal dari IDE Anda.
Kotless dapat menggunakan aplikasi Spring Boot atau Ktor yang ada ke AWS Serverless Platform. Untuk melakukannya, Anda harus mengatur plugin dan mengganti ketergantungan yang ada dengan DSL Kotless yang sesuai.
Untuk KTOR , Anda harus mengganti mesin yang ada (EG implementation("io.ktor", "ktor-server-netty", "1.5.0") ) dengan implementation("io.kotless", "ktor-lang", "0.1.6") . Perhatikan bahwa ketergantungan ini menggabungkan KTOR dari versi 1.5.0 , jadi Anda mungkin perlu meningkatkan pustaka Ktor lainnya (seperti ktor-html-builder ) ke versi ini.
Untuk boot musim semi, Anda harus mengganti starter yang Anda gunakan (Est implementation("org.springframework.boot", "spring-boot-starter-web", "2.3.0.RELASE) 2.4.2 dengan implementation("io.kotless", "spring-boot-lang", "0.1.6") ini juga.
Setelah selesai, Anda dapat menekan tugas deploy dan membuat aplikasi tanpa server. Perhatikan, bahwa Anda masih dapat menjalankan aplikasi secara lokal melalui tugas lulusan local .
Sementara Kotless dapat digunakan sebagai kerangka kerja untuk pembuatan aplikasi tanpa server yang cepat, ia memiliki lebih banyak fitur yang mencakup berbagai bidang aplikasi.
Termasuk, tetapi tidak terbatas pada:
@Scheduled sesuai jadwal;Kotless sedang dalam pengembangan aktif, jadi saat ini kami sedang berupaya memperluas daftar ini dengan fitur -fitur seperti:
Penjelasan apa pun menjadi jauh lebih baik dengan contoh yang tepat.
Di folder examples Repositori, Anda dapat menemukan contoh proyek yang dibangun dengan Kotless DSL:
kotless/site - Situs tentang Kotless yang ditulis dengan Kotless DSL (Site.kotless.io). Contoh ini menunjukkan penggunaan @StaticGet dan @Get (rute statis dan dinamis), serta Link API.kotless/shortener - Pemendekan URL sederhana yang ditulis dengan Kotless DSL (short.kotless.io). Contoh ini menunjukkan @Get (rute dinamis), @Scheduled (terjadwal lambdas), izin API (untuk akses dinamodb), dan ekstensi terraform.Contoh serupa ada untuk Ktor:
ktor/site - Situs tentang Kotless yang ditulis dengan Ktor (Ktor.site.kotless.io). Contoh ini menunjukkan penggunaan static {...} dan routing {...} .ktor/shortener - Pemendekan URL sederhana yang ditulis dengan Ktor (Ktor.short.kotless.io). Contoh ini menunjukkan routing { ... } (rute dinamis), izin API (untuk akses dinamodb), dan ekstensi terraform.Dan untuk boot musim semi:
spring/site - Situs tentang Kotless yang ditulis dengan Spring Boot (spring.site.kotless.io). Contoh ini menunjukkan penggunaan statika dan @RestController .spring/shortener - Pemendekan URL sederhana yang ditulis dengan Spring Boot (spring.short.kotless.io). Contoh ini menunjukkan penggunaan @RestController (rute dinamis), API izin (untuk akses dinamodb), dan ekstensi terraform. Anda dapat melihat wiki di mana dokumentasi klien di Kotless berada.
Terlepas dari itu, kode Kotless itu sendiri didokumentasikan secara luas, dan Anda dapat melihat antarmuka untuk mengenal Kotless lebih baik.
Anda dapat mengajukan pertanyaan dan berpartisipasi dalam diskusi di saluran #kotless di Kotlinlang Slack.
Terima kasih khusus kepada: