はじめに
先日、Spring Cloud Functionを使ってAWS Lambda向けのアプリケーション実装について記しました。
上記の記事では、ローカルで動かしてみたところまでやりましたが、実際にAWS Lambda上で動かしてみます。
AWS Lambda上で動かすための設定
まずは./gradlew build
でjarファイルを作成します。成功すると、build/libs
以下に二つのjarファイルが作成されますが、末尾が-aws.jar
であるものが対象です。
末尾が-aws.jar
となっているものをLambdaのパッケージとしてアップロードしておきます。
次に、Lambda上でハンドラを指定します。ドキュメントにも記載がありますが、org.springframework.cloud.function.adapter.aws.FunctionInvoker::handleRequest
を指定します。
これだけだとmain classが見つからない旨のエラーメッセージが出て起動に失敗します。
エラーメッセージにあるように環境変数MAIN_CLASS
を指定してあげます。
すると、無事起動に成功します。
発展的話題
今回、環境変数MAIN_CLASS
を指定しましたが、build.gradle
にてapplication
プラグインを追記し、以下のように記述すると環境変数を設定しなくても動きました。
application { mainClass = 'com.github.miyohide.App' }
ログを見るとSpringのロゴが確認でき、最初のリクエストが処理されます。最初は341.03msとそこそこの時間がかかります。ただ、2回目以降は2.57ms、1.88msと大幅に処理が速くなっています。
いわゆるウォームスタートの結果が如実に出ている感じです。
考察
実際にSpring Cloud Foundtionを使ったアプリケーションをAWS Lambda上で動かしてみました。マニュアルが書かれているのですが、あまり丁寧な記述ではなく最初の導入ハードルは高いかなと感じます。
また、ビルドした結果のファイルがかなり大きいです。今回は非常に単純な処理だけだったのであまりライブラリも使用していませんが、それでも20MB超えでしたので、いろいろとライブラリを追加していくとクォーターに引っかかることも出てくるかもしれません。