Kotless обозначает Kotlin Server Framework.
Его сосредоточено на сокращении подпрограммы создания без сервера путем создания его прямо из кода самого приложения.
Итак, просто говоря, Kotless дает вам одну волшебную кнопку для развертывания вашего веб -приложения в качестве приложения без сервера на AWS и Azure!
Котлесс состоит из двух основных частей:
Одной из ключевых особенностей Kotless является его способность внедрять существующие приложения. Kotless делает супер простое развертывание существующих приложений Spring и KTOR на платформы AWS и Microsoft Azure, не имеющие серверов.
Kotless использует Gradle, чтобы обернуться вокруг существующего строительного процесса и вставить в него развертывание.
Подумайте об использовании одной из последних версий Gradle, начиная с версии 7.2 .
По сути, если вы уже используете Gradle, вам нужно делать только две вещи.
Во -первых, настройте плагин Kotless Gradle.
Вам придется сообщить Грэдл, где найти плагин, редактируя 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()
}
}И применить плагин:
// 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
}Во -вторых, добавьте в ваше приложение Kotless DSL (или KTOR, или Spring Boot) в качестве библиотеки:
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")
} Обратите внимание, что если вы используете KTOR или Spring Boot, вам нужно будет заменить существующее в зависимости от проекта на специальную зависимость kotless *-lang . Кроме того, после этого вам нужно будет выравнивать версию зависимых библиотек (например, Spring Security) с версией, связанной с *-lang (см. Этот абзац)
Это дает вам доступ к интерфейсам DSL в вашем коде и устанавливает диспетчер Lambda в вашем приложении.
В зависимости от варианта использования, вы можете развернуть приложение либо в AWS, либо Microsoft Azure.
Обратите внимание, что если у вас даже нет облачной учетной записи, вы все равно можете использовать Kotless Locally для запуска и отладки вашего приложения - просто используйте local задачу Gradle.
Если у вас нет учетной записи AWS, вы можете создать ее после простой инструкции Хади Харири.
Если у вас есть учетная запись AWS и вы хотите выполнить реальное развертывание - давайте настроем все для этого! Это довольно просто:
kotless {
config {
aws {
storage {
bucket = " kotless.s3.example.com "
}
profile = " example "
region = " eu-west-1 "
}
}
webapp {
dns( " kotless " , " example.com " )
}
}Здесь мы настроили конфигурацию самого Kotless:
Затем мы настроили конкретное приложение для развертывания:
И это вся настройка!
Развертывание в Microsoft Azure также довольно простое и простое:
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 " )
}
}
Здесь мы настроили конфигурацию самого Kotless:
Затем мы настроили конкретное приложение для развертывания:
И это вся настройка!
Теперь вы можете создать свое первое без серверного приложения с Kotless DSL:
@Get( " / " )
fun main () = " Hello world! "Или с KTOR:
class Server : Kotless () {
override fun prepare ( app : Application ) {
app.routing {
get( " / " ) {
call.respondText { " Hello World! " }
}
}
}
}Или с пружинными ботинками:
@SpringBootApplication
open class Application : Kotless () {
override val bootKlass : KClass < * > = this :: class
}
@RestController
object Pages {
@GetMapping( " / " )
fun main () = " Hello World! "
}Приложения на основе Kotless могут запускаться локально как HTTP-сервер. Эта функциональность поддерживается всеми DSL.
Кроме того, местный старт Kotless может раскрутить эмуляцию AWS (Docker требуется). Просто создайте экземпляр вашего клиента AWS, используя переопределение для локальных стартов Kotless:
val client = AmazonDynamoDBClientBuilder .standard().withKotlessLocal( AwsResource . DynamoDB ).build()И включить это в Градл:
kotless {
// <...>
extensions {
local {
// enables AWS emulation (disabled by default)
useAWSEmulation = true
}
}
}Во время локального запуска будет запущена LocalStack, и все клиенты будут автоматически указаны на свою конечную точку.
Функциональность Local Start не требует никакого доступа к облачным провайдеру, поэтому вы можете проверить, как ведется ваше приложение без учетной записи AWS. Кроме того, это дает вам возможность отлаживать ваше приложение локально от вашей IDE.
Kotless может развернуть существующую Spring Boot или приложение KTOR на платформу без серверов AWS. Чтобы сделать это, вам нужно настроить плагин и заменить существующую зависимость на соответствующую DSL Kotless.
Для KTOR вы должны заменить существующий двигатель (например, implementation("io.ktor", "ktor-server-netty", "1.5.0") ) с implementation("io.kotless", "ktor-lang", "0.1.6") . Обратите внимание, что эта зависимость связывает KTOR версии 1.5.0 , поэтому вам может потребоваться обновить другие библиотеки KTOR (например, ktor-html-builder ) до этой версии.
Для Spring Boot вы должны заменить стартер, который вы используете (например, implementation("org.springframework.boot", "spring-boot-starter-web", "2.3.0.RELASE) ) с implementation("io.kotless", "spring-boot-lang", "0.1.6") . Обратите внимание на то, что эта Bundles Bundles Spring Spring of Spring of версии 2.4.2 , так и для того, чтобы это так же, как и вам, так и для того, чтобы они так и для того, чтобы они могли так же, подойдет, так и для того, чтобы это так же, как и вам, так и для того, чтобы это так же, как и вам.
Как только это будет сделано, вы можете достичь задачи deploy и сделать свое приложение без сервера. Обратите внимание, что вы по -прежнему сможете запускать приложение локально с помощью local Gradle Task.
В то время как Kotless может использоваться в качестве основы для быстрого создания приложений без серверов, он имеет гораздо больше функций, охватывающих различные области приложения.
В том числе, но не ограничивается:
@Scheduled Jobs по графику;Kotless находится в активной разработке, поэтому в настоящее время мы работаем над расширением этого списка с такими функциями, как:
Любое объяснение становится намного лучше с правильным примером.
В папке examples репозитория вы можете найти примеры проектов, построенных с Kotless DSL:
kotless/site - сайт о Kotless, написанный с Kotless DSL (site.kotless.io). Этот пример демонстрирует использование @StaticGet и @Get (статические и динамические маршруты), а также API Link.kotless/shortener - простой укороченность URL, написанный с Kotless DSL (short.kotless.io). Этот пример демонстрирует @Get (динамические маршруты), @Scheduled (запланированные Lambdas), API разрешений (для доступа DynamoDB) и расширения Terraform.Подобные примеры существуют для KTOR:
ktor/site - сайт о Kotless, написанном с Ktor (ktor.site.kotless.io). Этот пример демонстрирует static {...} и routing {...} использование.ktor/shortener - простой укороченность URL, написанный с KTOR (ktor.short.kotless.io). Этот пример демонстрирует routing { ... } (динамические маршруты), API разрешений (для доступа DynamoDB) и расширения Terraform.И для весеннего ботинка:
spring/site - сайт о Kotless, написанном с Spring Boot (Spring.Site.kotless.io). Этот пример демонстрирует использование статики и @RestController .spring/shortener - простой укороченный URL, написанный с помощью Spring Boot (Spring.short.kotless.io). Этот пример демонстрирует использование @RestController (динамические маршруты), API разрешений (для доступа DynamoDB) и расширения Terraform. Вы можете взглянуть на вики, где находится клиентская документация на Kotless.
Кроме того, сам код Kotless широко задокументирован, и вы можете посмотреть на его интерфейсы, чтобы лучше узнать Kotless.
Вы можете задать вопросы и участвовать в дискуссиях на канале #kotless в Kotlinlang Slack.
Особая благодарность: