Somurie Engineer's Blog

AWS lambdaでKotlinHelloWorld

はじめに 先に書いておくと、色々試した結果↓このサイトがかなりわかりやすい。 ServerlessFrameworkでtemplateを使用してプロジェクトを作成でき、gradleやserverless.ymlも作成してくれるので、templateを使うべき。 Kotlinプロジェクトをgradle buildでzip化してServerlessFramework(awsやgcpへのプロビジョニング等を共通化して行うフレームワーク)でaws上にデプロイするのだけど、一連のテンプレートを作成してくれるのは本当に楽。自力でやろうとしてかなり時間がかかった。(理解は深まったが) https://dev.classmethod.jp/articles/easy-deploy-of-lambda-with-serverless-framework/ 以下、templateを使わずに色々と苦戦した経緯を記録する。 Kotlinプロジェクトを生成する 以下コマンドを実行する。自動でKotlinプロジェクトが生成される gradle init --type=kotlin-application ちなみに2020/5/23時点でAWSLambdaのJava対応バージョンは8と11のみ。 サンプルの実行(一旦動作確認 プロジェクトをbuild、App.ktのmainメソッドを実行すると’HelloWorld’が表示されることを確認します。 ※ちなみにIntelliJで毎回忘れるんですが、以下より使用するSDKのバージョン設定等をする ProjectStructure -> Project -> Project SDK build.gradleの修正 作成した案件をIntelliJなどIDEで開き、build.gradleに以下を追加する。依存関係を取り込むにはIntelliJの場合 Gradleビュー -> Reimport All Gradle Projects を押下。 // AWS implementation 'com.amazonaws:aws-lambda-java-core:1.2.0' implementation 'com.amazonaws:aws-lambda-java-events:2.2.7' implementation 'com.amazonaws:aws-java-sdk-s3:1.11.647' SAM CLIでlambdaのペイロードを確認 AWSのサーバーレスアプリケーションの作成と管理を簡単に行うためにSAM CLIを使用します。 まずはsam local generate-eventを使用してサンプルペイロードを生成します。 特に何か作成されるわけではなく、lambdaが受け取るペイロードのサンプルなので出力された値を参考に実装します。 https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-local-generate-event.html sam local generate-event apigateway aws-proxy --method POST 実装 lambda関数のハンドラーはRequestHandleを実装したクラスのhandleRequestメソッドです。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html 今回は例として、JSONで受け取りStringを返すメソッドを作ってみます。 まずJSONを扱うために以下をbuild.gradleのdependencyに追加します。 implementation 'com.fasterxml.jackson.module:jackson-module-kotlin' Gradleでzipを作成 以下の通りgradle build実行時にzipを生成するよう記述します。 以下の記述をしてもしなくてもbuild/distributionにzipファイルは作成されていた。なんでだろう・・・。 task buildZip(type: Zip) { from compileKotlin from processResources into('lib') { from configurations.