お疲れ様です。@naokiurです。
最近の業務中は、AWS Lambdaを構築しております。
業務中はPythonで書いているのですが、
前々から興味のあるKotlinでもやりたいなあと思い、
AWS Toolkit for Intellij
を用いて、
ローカルでデバッグ実行できるように、
準備しました。
AWS Toolkitプラグインを導入している場合、
AWS Serverless Application
プロジェクトを作ることができるのですが、
どんなKotlinプロジェクトの場合でもLambdaを作成することができるようになるために、
なんの変哲もないKotlinプロジェクト
上で、
準備しました。
環境
- MacBook Pro (Retina 13-inch、Early 2015)
- Java 1.8.0_191
- IntelliJ IDEA CE 2019.1.3
- SAM CLI 0.14.2
実施したこと
- なんの変哲もないKotlinプロジェクトを用意する
- AWS SUM CLIで雛形を生成する
- Kotlin・Lambdaの構成を整える
- Runnerを作成する
- 実行!
なんの変哲もないKotlinプロジェクトを用意する
なんの変哲もないKotlinプロジェクトを作成します。

なんの変哲もないですね。
AWS SUM CLIで雛形を生成する
AWS Toolkitプラグインは、 AWS SAM CLI
を前提としているので、
インストールされていると思います。
せっかくなので、AWS SAM CLIに雛形を作成してもらいます。
sam init -r java8 -d gradle

Kotlin・Lambdaの構成を整える
ソース移動
作成してもらった雛形の以下ファイルを、
任意のパッケージに移動します。
- App.java
- GatewayResponse.java

依存性追加
ライブラリの依存関係をgradleファイルに追加します。
dependencies {
implementation "com.amazonaws:aws-lambda-java-core:1.2.0" // 追加
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}
ありがたいことにIntellijが教えてくれるので、
import change
をします。

Kotlin変換
移動したファイルをKotlinコードに変換します。
こちらもありがたいことにIntellijがやってくれます。

自分が試した際、App.ktでコンパイルエラーが発生しまっていたので、こちらを修正しました。
* return br.lines().collect<String, *>(Collectors.joining(System.lineSeparator()))
* return br.lines().collect(Collectors.joining(System.lineSeparator()))
Runnerを作成する
Lambda実行用のRunnerを作成します。

Handlerには変換したAppクラスを指定します。

実行!
デバッグ実行します。

ブレークポイントで止まりました!!
これでKotlinでも、
ローカルでLambda開発ができますね!
結果
- Kotlinで書かれたLambdaを、ローカルでデバッグ実行することができました。
今後
- デプロイできるかをまだ試せてないので、試していきたいと思います。
- テストコードを書けるようになっていきたいと思います。