1
/
5

様々な壁にぶつかりながらも、僕たちがサーバーレスを使う理由

2018年ごろからサーバーレスに興味を持ち始めた

Queueではもともと、JavaでSpringフレームワークを使ってサーバーサイドを開発していました。

2018年ごろに、社内ハッカソンでフロントエンドチームがAWSのAmplifyフレームワーク (DynamoDB, AppSync, Cognito) を使ってサーバーの開発なしでアプリケーションを開発したことがあり、それがきっかけでサーバーレスに興味をもち始めました。当時はPoCのプロトタイプ開発の受注なども多く、いくつかの案件でAmplifyスタックが活躍しました。

その中で、開発の立ち上がりの早さとメンテナンスコストの低さが魅力で、より実用的にサーバーレスなスタックを使えないか検討をはじめました。当時はAWS LambdaのようなFaaSサービスのユースケースが増えてきていたことも後押しになりました。

そして、実際にJavaで書いていたAPIサーバーの機能を、Lambda + API Gatewayに移行できるかということを試していきました。

Lambdaで採用する開発言語に関しては、当初はPythonを選択しました。Queueでは機械学習の開発も得意としており、使えるエンジニアが多かったのが一番の選択要因になりました。

フルサーバーレスなスタックへの壁

実際に開発を始めてみると、いくつかの壁にぶつかりました。

まずはフレームワークの選択です。当時はまだデファクトとなっているフレームワークがなかったのですが、コミュニティの盛り上がりからServerless Frameworkを選択しました。今となっては非常に良い選択だったと思います。

フレームワークとしてベストプラクティスが定まっていない部分に関しては、社内で徹底的に議論をしてルール化するなどして理解を深めていきました。また、運用上の課題に対しては、自動化スクリプトを開発するなどして対応をしていきました。

実装面でも課題が多くありました。まずは、データベース周りの設計です。フルサーバーレスな構成のメリットを最大限に享受するために、データベースに関してもマネージドサービスを積極的に利用しようとしました。結果として、DynamoDBを多くのケースで利用することになるのですが、DynamoDBならではの設計の難しさにも直面しました。RDBのそれとは異なる点も多く、さらにデータベースの設計がそのままコストやパフォーマンスにも影響するため、常に丁寧な設計が要求されます。

昨年からは、RDS Proxyの登場によって、AWS Auroraもフルサーバーレスなスタックとして利用できるようになり、RDBの知識やノウハウも活用できるようになりました。

圧倒的なコストパフォーマンス

実際にサーバーレスな構成でバックエンドを構築することで得られるメリットは以下です。

特徴的なのはコストパフォーマンスの高さ。AWSの各サービスを組み合わせて実現をしていくため、それぞれのサービスの無料枠を上手に使うことができます。これによって、プロトタイプやβ版くらいの段階ではほとんどコストがかかってきません。

また、マネージドサービスは従量課金の料金体系であることが多く、インスタンスベースの実装にくらべて初期のコストが大きく下がってくるのも特徴でした。

落ちない。とにかく落ちない。

最大のメリットは、メンテナンスコストです。

サーバーサイドの処理を実装・デプロイする Lambda, API Gateway は、ほとんどメンテナンスが必要ありません。データベースを正しく設計していれば基本的には落ちることがなく、そのおかげで「夜間メンテナンス」のような対応をする必要がなくなりました。

他のメリットは、データベースのパフォーマンスに関しても、予算に余裕があればオートスケーリングを上手に使うことで、メンテンスフリーで最適化することができたこと。また、デプロイ時のダウンタイムがありません。極端にいえば、アプリケーション全体をメンテナンスに入れずスムーズに配布できました。

さらに、情報が少ない中で Serverless Framework のベストプラクティスを模索し続け、社内フレームワークを構築したことで実装工数自体を大きく下げることができ、インフラ面の構築に関してもserverless.yaml での管理によって、構築の工数も大きく下げることができました。

フロントエンドとの資産の共有

開発言語に関しては、途中でTypescriptへと変更をしました。パッケージの充実や、Lambdaとの相性が良かったのもありますが、結果的にフロントエンドとコードや型定義を共有できるようになったのも大きなメリットでした。

コミュニティへの還元を目指して

たくさんのメリットを得ることができたサーバーレスですが、まだまだベストプラクティスが出揃っていない、エッジケースに関して一筋縄ではいかないことなど不便な面もあります。

今後は、実際にサービスを提供する中でわかってきたベストプラクティスや不足している機能を、パッケージの公開やOSSへの貢献によってコミュニティに還元していきたいと考えています。

語り手

塩月友也 - バックエンドエンジニア


株式会社Queue's job postings
4 Likes
4 Likes

Weekly ranking

Show other rankings