KotlinのコードをAWS Lambda上で動かす
Kotlinで書いたコードをAWS Lambda上で動かしてみた。
AWS Lambdaには、クラスファイルを含めたzipファイルを上げる形にする。AWS SAMは前に使ったけど、今回はKotlin(Java)でどう動かすのか見たいだけなので、シンプルな方法にした。開発環境はIntelliJ IDEAを利用している。
Kotlinのコード
gradle.kts
まずはgradle。zipファイルを作成するタスクを追加した。 最近はgradleもKotlinで書くようにしている。でも、いまだに書き方が分からない。。
plugins {
java
kotlin("jvm") version "1.4.10"
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib"))
implementation("org.slf4j:slf4j-simple:1.7.26")
implementation("com.amazonaws:aws-lambda-java-core:1.2.1")
implementation("com.amazonaws:aws-lambda-java-events:3.1.0")
runtimeOnly("com.amazonaws:aws-lambda-java-log4j2:1.2.0")
// testCompile("junit", "junit", "4.12")
}
tasks{
// thank you: https://github.com/davidmerrick/aion/blob/master/build.gradle.kts
val buildZip by creating(Zip::class) {
from(compileKotlin)
from(processResources)
into("lib") {
from(configurations.runtimeClasspath)
}
}
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
}
Handler.kt
AWS Lambdaから呼び出されるコード。
import com.amazonaws.services.lambda.runtime.Context
import com.amazonaws.services.lambda.runtime.RequestHandler
// 参考
// https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html
// https://github.com/awsdocs/aws-lambda-developer-guide/tree/master/sample-apps/java-basic/src/main/java/example
class Handler : RequestHandler<Map<String, String>, String> {
override fun handleRequest(input: Map<String, String>?, context: Context?): String {
println(input.toString())
return "lambda success."
}
}
AWS Lambdaで実行
AWS Lambdaに上げるためのzipを作成する。
./gradlew buildZip
実行すると、build/distributions/hoge-1.0-SNAPSHOT.zip が出来ているはず。AWSの管理コンソールからアップロードした。
設定は以下を設定した。以下のもの以外はデフォルトのまま。
- ランタイム: Java 11 (Corretto)
- ハンドラ: Handler::handleRequest
いざ実行!
特に何もつまるところなく、あっけなく実行できてしまった。今後、KotlinとAWS Labmdaでアプリ作っていこうかな。
投稿日 2020年10月11日