Kotless는 Kotlin Serverless Framework를 나타냅니다.
그 초점은 응용 프로그램 자체의 코드에서 바로 생성하여 서버리스 배포 생성의 일상을 줄이는 데 중점을 둡니다.
따라서 Kotless는 AWS 및 Azure에서 서버리스 애플리케이션으로 웹 애플리케이션을 배포하기 위해 하나의 마법 버튼을 제공합니다!
Kotless는 두 가지 주요 부분으로 구성됩니다.
Kotless의 주요 기능 중 하나는 기존 응용 프로그램에 포함되는 기능입니다. Kotless는 기존 스프링 및 KTOR 응용 프로그램을 AWS 및 Microsoft Azure Serverless 플랫폼에 쉽게 배포 할 수 있습니다.
Kotless는 Gradle을 사용하여 기존 빌딩 프로세스를 감싸고 배치를 삽입합니다.
7.2 버전으로 시작하여 최신 Gradle 버전 중 하나를 사용하는 것을 고려하십시오.
기본적으로 이미 Gradle을 사용하는 경우 두 가지만 수행하면됩니다.
먼저 Kotless Gradle 플러그인을 설정하십시오.
settings.gradle.kts 편집하여 플러그인을 찾을 위치를 Gradle에게 알려야합니다.
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 종속성으로 교체해야합니다. 또한 그 후에는 종속 라이브러리 (예 : 스프링 보안) 버전의 버전이 *-lang (이 단락 참조)에 맞게 정렬해야합니다.
이를 통해 코드에서 DSL 인터페이스에 액세스 할 수 있으며 응용 프로그램 내에서 Lambda 디스패처를 설정합니다.
유스 케이스에 따라 AWS 또는 Microsoft Azure에 응용 프로그램을 배포 할 수 있습니다.
클라우드 계정이없는 경우에도 Kotless를 사용하여 로컬로 사용하여 응용 프로그램을 실행하고 디버깅 할 수 있습니다. local Gradle 작업 만 사용하십시오.
AWS 계정이없는 경우 Hadi Hariri의 간단한 지시에 따라이를 만들 수 있습니다.
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 Local Start는 AWS 에뮬레이션을 회전시킬 수 있습니다 (Docker 필수). Kotless Local Start에 대한 Override를 사용하여 AWS 서비스 클라이언트를 인스턴스화합니다.
val client = AmazonDynamoDBClientBuilder .standard().withKotlessLocal( AwsResource . DynamoDB ).build()Gradle에서 활성화하십시오.
kotless {
// <...>
extensions {
local {
// enables AWS emulation (disabled by default)
useAWSEmulation = true
}
}
}로컬 실행 중에 LocalStack이 시작되고 모든 클라이언트가 자동으로 엔드 포인트를 가리킬 것입니다.
로컬 시작 기능은 클라우드 제공 업체에 대한 액세스가 필요하지 않으므로 AWS 계정없이 응용 프로그램이 어떻게 작동하는지 확인할 수 있습니다. 또한 IDE에서 신청서를 로컬로 디버깅 할 수 있습니다.
Kotless는 기존 Spring Boot 또는 KTOR 응용 프로그램을 AWS Serverless 플랫폼에 배포 할 수 있습니다. 이를 위해서는 플러그인을 설정하고 기존 의존성을 적절한 Kotless DSL로 바꿔야합니다.
KTOR 의 경우 기존 엔진 (예 : implementation("io.ktor", "ktor-server-netty", "1.5.0") ) implementation("io.kotless", "ktor-lang", "0.1.6") 로 교체해야합니다. 이 종속성은 버전 1.5.0 의 KTOR를 번들로하므로 다른 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") 2.4.2 해야합니다.
일단 완료되면 deploy 작업을 누르고 응용 프로그램 서버가 없게 만들 수 있습니다. local 그레이드 작업을 통해 로컬로 응용 프로그램을 실행할 수 있습니다.
Kotless는 서버리스 애플리케이션의 빠른 생성을위한 프레임 워크로 사용될 수 있지만 다양한 응용 프로그램 영역을 다루는 더 많은 기능이 있습니다.
다음을 포함하지만 이에 국한되지 않습니다.
@Scheduled 작업을 실행하기위한 타이머를 설정합니다.Kotless는 활발한 개발 중이므로 현재이 목록을 다음과 같은 기능으로 확장하려고합니다.
적절한 예를 들어 모든 설명이 훨씬 나아집니다.
Repository의 examples 폴더에서 Kotless DSL로 구축 된 예제 프로젝트를 찾을 수 있습니다.
kotless/site - Kotless DSL (site.kotless.io)로 작성된 Kotless에 관한 사이트. 이 예제는 @StaticGet 및 @Get (정적 및 동적 경로) 사용 및 링크 API를 보여줍니다.kotless/shortener - Kotless DSL (short.kotless.io)로 작성된 간단한 URL 쇼트너. 이 예는 @Get (동적 경로), @Scheduled (예약 된 Lambdas), 권한 API (DynamODB 액세스 용) 및 TerraForm 확장을 보여줍니다.KTOR에 대해서도 비슷한 예가 존재합니다.
ktor/site - KTORS (ktor.site.kotless.io)로 작성된 Kotless에 관한 사이트. 이 예제는 static {...} 및 routing {...} 사용을 보여줍니다.ktor/shortener - KTOR (ktor.short.kotless.io)로 쓴 간단한 URL 쇼트너. 이 예제는 routing { ... } (동적 경로), 권한 API (DynamODB 액세스 용) 및 TerraForm 확장을 보여줍니다.그리고 Spring Boot의 경우 :
spring/site - Spring Boot (Spring.site.kotless.io)가있는 Kotless에 관한 사이트. 이 예제는 Statics 및 @RestController 의 사용을 보여줍니다.spring/shortener - Spring Boot (Spring.short.kotless.io)로 작성된 간단한 URL 쇼트너. 이 예제는 @RestController (동적 경로), 권한 API (DynamODB Access) 및 TerraForm 확장의 사용을 보여줍니다. Kotless의 클라이언트 문서가있는 Wiki를 살펴볼 수 있습니다.
그 외에도 Kotless 코드 자체가 널리 문서화되어 있으며 인터페이스를 살펴보고 Kotless를 더 잘 알 수 있습니다.
Kotlinlang Slack의 #kotless 채널에 대한 질문을하고 토론에 참여할 수 있습니다.
특별한 감사 :