AWS Lambdaの何が嬉しかったか。Excel生成WebサービスのLambda関数化
AWS Lambdaを使った開発をやってみて何が嬉しかったのかを書いておこうと思います。
Lambda関数化したのは以下のようなWebサービスでした
- SPAなWebアプリからJSONでリクエストを受け取る
- JavaのExcelを扱うライブラリであるPOIでExcelのテンプレートファイルにJSONで受け取ったデータを埋め込む
- Excelをクライアントに返す(ブラウザでダウンロードが始まる)
Excelを触る時点で、Web系の技術だけで完結するのは難しいので、 この部分だけJavaでやるというのは今後もあるんじゃないかなと思います。
で、次のような課題がありました
- 普段は大丈夫だけど、たまにでかいデータが来て、Java側でOutOfMemoryが発生する
- そもそもExcel作成リクエストはたまにしか実行されない(業務のひとまとまりの作業が終わって帳票を出したいときだけ)
- なのに、でかいデータのためにそれなりのサイズのEC2を用意しておかないといけない
Lambda関数化したことで
- 使うときのみリソースを割り当てるので、思い切ったリソースを割り当ててもコスト的には下がる。これは処理頻度が低いサービスでは大きいメリットだと思います
- 副次的な効果として、これまで同じJavaのアプリケーションサーバー上で実行していた他のアプリケーションがExcel作成WebサービスのOutOfMemoryの巻き添えを食っていたのですが、単独機能のサービスとして切り出されたことで、お互いに影響を受けることがなくなりました。マイクロサービス化ができたわけです。
他の用途ですと、Javaの立ち上がり時の遅さが気になったかもしれませんが、 今回のケースだと、そもそもExcelを生成するのに10秒くらいかかるような Webサービスだったので性能は気になりませんでした。
まとめ
AWS Batchも使ってみたいなーと思っているサービスで、 バッチという処理頻度が低い処理に対して、 実行されるときだけ大きいリソースを割り当てて(必要だったら並行でいっぱい立ち上げて)、 終わったら終了というのは非常にクラウドらしく、魅力的です。
もちろんサーバレスになることで、運用が楽になるか、スケールするとかいい事はあると思うのですが、 処理面での直接的な効果として頻度が低い処理に、思い切りリソースを割り当てられるというメリットがありました。