Kotlessは、Kotlin Serverlessフレームワークの略です。
その焦点は、アプリケーション自体のコードから直接生成することにより、サーバーレスの展開作成のルーチンを減らすことにあります。
だから、簡単に言えば、Kotlessは、AWSとAzureのサーバーレスアプリケーションとしてWebアプリケーションを展開するための1つのマジックボタンを提供します!
Kotlessは2つの主要な部分で構成されています。
Kotlessの重要な機能の1つは、既存のアプリケーションに埋め込む機能です。 Kotlessは、AWSおよびMicrosoft Azure Serverlessプラットフォームへの既存のSpringおよびKTORアプリケーションを非常に簡単に展開します。
KotlessはGradleを使用して既存の建築プロセスを包み込み、展開を挿入します。
7.2バージョンから始めて、Gradleの最新バージョンの1つを使用することを検討してください。
基本的に、すでにGradleを使用している場合、2つのことをする必要があります。
まず、Kotless Gradleプラグインをセットアップします。
Gradleに、 settings.gradle.ktsを編集してプラグインを見つける場所を伝える必要があります。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依存関係に置き換える必要があることに注意してください。また、その後、依存ライブラリのバージョン(スプリングセキュリティなど)のバージョンを*-lang (この段落を参照)にバージョンに合わせる必要があります。
これにより、コード内のDSLインターフェイスにアクセスでき、アプリケーション内にLambdaディスパッチャーをセットアップできます。
ユースケースに応じて、AWSまたはMicrosoft Azureのいずれかでアプリケーションを展開することをお勧めします。
クラウドアカウントを持っていない場合でも、kotlessをローカルで使用してアプリケーションを実行およびデバッグできることに注意してください。 localグラードタスクを使用するだけです。
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のオーバーライドを使用して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サーバーレスプラットフォームに展開できます。それを行うには、プラグインをセットアップし、既存の依存関係を適切な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など)をこのバージョンにアップグレードする必要がある場合があることに注意してください。
スプリングブートの場合、使用するスターター( 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 Gradleタスクを介してローカルでアプリケーションを実行できることに注意してください。
Kotlessは、サーバーレスアプリケーションを迅速に作成するためのフレームワークとして使用できますが、アプリケーションのさまざまな領域をカバーする多くの機能があります。
以下を含みますが、これらに限定されません。
@Scheduledジョブをスケジュールで実行するためにタイマーを設定します。Kotlessは積極的な開発中であるため、現在、次のような機能でこのリストを拡張することに取り組んでいます。
適切な例では、説明ははるかに良くなります。
リポジトリのexamplesフォルダーでは、Kotless DSLで構築されたプロジェクトの例を見つけることができます。
kotless/site - Kotless DSL(Site.Kotless.io)で書かれたKotlessに関するサイト。この例は、 @StaticGetおよび@Get (静的ルートと動的ルート)の使用法とリンクAPIを示しています。kotless/shortener - Kotless DSL(short.kotless.io)で書かれた単純なURLショーナー。この例は、 @Get (動的ルート)、 @Scheduled scheduled(スケジュールされたラムダ)、許可API(dynamodbアクセス用)、およびテラフォーム拡張機能を示しています。KTORには同様の例が存在します。
ktor/site - ktor(ktor.site.kotless.io)で書かれたコトレスに関するサイト。この例はstatic {...}およびrouting {...}使用法を示しています。ktor/shortener - ktor(ktor.short.kotless.io)で書かれた単純なURLショーナー。この例はrouting { ... } (動的ルート)、許可API(dynamodbアクセス用)、およびテラフォーム拡張機能を示しています。そしてスプリングブーツの場合:
spring/site - Spring Boot(spring.site.kotless.io)で書かれたコットレスに関するサイト。この例は、staticsと@RestControllerの使用法を示しています。spring/shortener - Spring Boot(spring.short.kotless.io)で書かれたシンプルなURLショートナー。この例では、 @RestController (動的ルート)、Permissions API(DynamoDBアクセス用)、およびTerraform拡張機能の使用法を示しています。 KotlessのクライアントドキュメントがあるWikiをご覧ください。
それとは別に、Kotlessコード自体が広く文書化されており、そのインターフェイスを調べてKotlessをよりよく知ることができます。
質問をして、Kotlinlang Slackの#kotless Channelでディスカッションに参加することができます。
特別な感謝: