Kotless يرمز إلى Kotlin Serverless Framework.
يكمن تركيزها في تقليل روتين إنشاء النشر بدون خادم عن طريق إنشاءه مباشرة من رمز التطبيق نفسه.
لذا ، ببساطة ، يمنحك Kotless زرًا سحريًا واحد لنشر تطبيق الويب الخاص بك كطبق بدون خادم على AWS و Azure!
يتكون Kotless من جزأين رئيسيين:
واحدة من الميزات الرئيسية لـ Kotless هي قدرتها على التضمين في التطبيقات الموجودة. يجعل Kotless نشرًا سهلاً للغاية لتطبيقات Spring و KTOR الحالية على منصات AWS و Microsoft Azure Serverless.
يستخدم Kotless Gradle للالتفاف حول عملية البناء الحالية وإدراج النشر فيه.
فكر في استخدام أحد أحدث إصدارات Gradle ، بدءًا من الإصدار 7.2 .
في الأساس ، إذا كنت تستخدم Gradle بالفعل ، فأنت بحاجة فقط إلى القيام بأمرين.
أولاً ، قم بإعداد البرنامج المساعد Kotless Gradle.
سيتعين عليك إخبار 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 ، أو Boot Spring) كمكتبة إلى تطبيقك:
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 ، فستحتاج إلى استبدال موجود في مشروعك باعتماد خاص *-lang . أيضًا ، بعد ذلك ، ستحتاج إلى محاذاة إصدار من المكتبات التابعة (مثل أمان الربيع) مع الإصدار المجمل في *-lang (انظر هذه الفقرة)
يتيح لك هذا الوصول إلى واجهات DSL في الكود الخاص بك وإعداد مرسل Lambda داخل التطبيق الخاص بك.
اعتمادًا على حالة الاستخدام ، قد ترغب في نشر التطبيق إما في AWS أو Microsoft Azure.
لاحظ أنه إذا لم يكن لديك حساب سحابي ، فلا يزال بإمكانك استخدام Kotless محليًا لتشغيل وتصحيح التطبيق الخاص بك - فقط استخدم مهمة Gradle 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. يتم دعم هذه الوظيفة من قبل جميع DSLs.
علاوة على ذلك ، قد تدور بداية Kotless Local بمضاهاة AWS (مطلوب Docker). ما عليك سوى إنشاء إنشاء عميل خدمة AWS الخاص بك باستخدام Override for Kotless Local Barts:
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. للقيام بذلك ، ستحتاج إلى إعداد مكون إضافي واستبدال التبعية الحالية مع DSL غير المناسبة.
بالنسبة إلى 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 ) إلى هذا الإصدار.
بالنسبة إلى Boot Spring Boot ، يجب أن تستبدل المبتدئ الذي تستخدمه (مثل implementation("io.kotless", "spring-boot-lang", "0.1.6") implementation("org.springframework.boot", "spring-boot-starter-web", "2.3.0.RELASE) 2.4.2 إصدار.
بمجرد الانتهاء من ذلك ، يمكنك الضغط على مهمة deploy وجعل التطبيق بدون خادم. لاحظ أنك ستظل قادرًا على تشغيل التطبيق محليًا عبر مهمة Gradle local .
على الرغم من أنه يمكن استخدام Kotless كإطار للإنشاء السريع للتطبيقات بدون خادم ، إلا أنه يحتوي على العديد من الميزات التي تغطي مجالات التطبيق المختلفة.
بما في ذلك ، على سبيل المثال لا الحصر:
@Scheduled في الموعد المحدد ؛Kotless في التطوير النشط ، لذلك نحن نعمل حاليًا على توسيع هذه القائمة بميزات مثل:
أي تفسير يصبح أفضل بكثير مع مثال مناسب.
في مجلد examples المستودع ، يمكنك العثور على مثال مشاريع مصممة مع Kotless DSL:
kotless/site - موقع حول Kotless مكتوب مع Kotless DSL (site.kotless.io). يوضح هذا المثال استخدام @StaticGet و @Get (طرق ثابتة وديناميكية) ، وكذلك ربط API.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.
شكر خاص ل: