AWS LambdaでSpring Cloud Functionで作ったアプリを動かす

はじめに

先日、Spring Cloud Functionを使ってAWS Lambda向けのアプリケーション実装について記しました。

miyohide.hatenablog.com

上記の記事では、ローカルで動かしてみたところまでやりましたが、実際にAWS Lambda上で動かしてみます。

AWS Lambda上で動かすための設定

まずは./gradlew buildでjarファイルを作成します。成功すると、build/libs以下に二つのjarファイルが作成されますが、末尾が-aws.jarであるものが対象です。

末尾が-aws.jarとなっているものをLambdaのパッケージとしてアップロードしておきます。

docs.aws.amazon.com

次に、Lambda上でハンドラを指定します。ドキュメントにも記載がありますが、org.springframework.cloud.function.adapter.aws.FunctionInvoker::handleRequestを指定します。

docs.spring.io

これだけだとmain classが見つからない旨のエラーメッセージが出て起動に失敗します。

エラーメッセージにあるように環境変数MAIN_CLASSを指定してあげます。

すると、無事起動に成功します。

発展的話題

今回、環境変数MAIN_CLASSを指定しましたが、build.gradleにてapplicationプラグインを追記し、以下のように記述すると環境変数を設定しなくても動きました。

application {
    mainClass = 'com.github.miyohide.App'
}

ログを見るとSpringのロゴが確認でき、最初のリクエストが処理されます。最初は341.03msとそこそこの時間がかかります。ただ、2回目以降は2.57ms、1.88msと大幅に処理が速くなっています。

いわゆるウォームスタートの結果が如実に出ている感じです。

docs.aws.amazon.com

考察

実際にSpring Cloud Foundtionを使ったアプリケーションをAWS Lambda上で動かしてみました。マニュアルが書かれているのですが、あまり丁寧な記述ではなく最初の導入ハードルは高いかなと感じます。

また、ビルドした結果のファイルがかなり大きいです。今回は非常に単純な処理だけだったのであまりライブラリも使用していませんが、それでも20MB超えでしたので、いろいろとライブラリを追加していくとクォーターに引っかかることも出てくるかもしれません。

docs.aws.amazon.com