Kotless代表Kotlin无服务器框架。
它的重点在于通过直接从应用程序本身的代码生成无服务器部署创建的例程。
因此,简而言之,Kotless为您提供了一个魔术按钮,将Web应用程序部署为AWS和Azure上的无服务器应用程序!
无肉种由两个主要部分组成:
Kotless的关键特征之一是它嵌入现有应用程序的能力。 Kotless使现有的Spring和KTOR应用程序非常容易地将其部署到AWS和Microsoft Azure无服务器平台上。
Kotless使用Gradle将现有的建筑过程包裹起来,并将部署插入其中。
考虑从7.2版本开始使用Gradle的最新版本之一。
基本上,如果您已经使用了Gradle,则只需要做两件事即可。
首先,设置无毛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
}其次,在您的应用程序中添加库特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,则需要用特殊的无koteble *-lang依赖项替换项目依赖性中的现有。另外,之后,您需要将依赖库的版本(如Spring Security)与*-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 " )
}
}在这里,我们设置了无限本身的配置:
然后,我们设置了一个特定的应用程序:
这就是整个设置!
部署到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 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支持。
此外,无限的本地开始可能会启动AWS仿真(需要Docker)。只需使用覆盖无限的本地启动来实例化您的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无服务器平台。为此,您需要设置一个插件,并用适当的无核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 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 (计划的lambdas),Permissions API(用于DynamoDB访问)和TerraForm扩展。KTOR也存在类似的例子:
ktor/site - 关于用KTOR编写的有关Kotless的网站(Ktor.site.kotless.io)。此示例演示了static {...}和routing {...}用法。ktor/shortener - 用ktor(ktor.short.kotless.io)编写的简单URL缩短器。此示例演示了routing { ... } (动态路由),权限API(用于DynamoDB访问)和TerraForm扩展。对于春季靴子:
spring/site - 关于带有Spring Boot(Spring.site.kotless.io)的无科特的网站。此示例演示了静态和@RestController的用法。spring/shortener - 一个简单的URL缩短器,编写了带有Spring Boot(Spring.short.kotless.io)的简单网址。此示例演示了@RestController (动态路由),Permissions API(用于DynamoDB访问)和TerraForm扩展的用法。 您可以查看Kotless上的客户文档所在的Wiki。
除此之外,无限无关的代码本身已被广泛记录,您可以查看其界面以更好地了解Kotless。
您可能会提出问题并参加有关Kotlinlang Slack中#kotless渠道的讨论。
特别感谢: