サーバレスを導入したメリットと苦労した点
生井氏はサービスのバックエンドでAWS Lambdaを利用。画像変換処理の部分をAWS Lambdaに置き換えてアップロード処理の高速化を図りました。移行後も速度は安定しており、「アップロード数が増えてもスケールアップの手間が不要で、パフォーマンスを維持できている」とコメント。猪飼氏も同様に、紙面ビューアーの画像加工でAWS Lambdaを使用しており、「AWS Lambdaがスケーリングしてくれることでアクセスの急増にも対応でき、安心感がある」と語りました。そして、「まれにタイムアウトが発生するが、AWS Lambdaは3回までリトライしてくれるのでカバーできている」と補足しました。
一方、苦労した点について、生井氏は「導入を検討していた2015年当時は事例の数も乏しく、参考となる情報が少なかったので手探り感があった」と振り返り、「本番のデータ量やコール回数等、想定されるアクセス負荷に耐えられるのか不安があった」と語りました。相馬氏には、ある構成がタイムアウト制限に引っ掛かってしまい、構成を変更してAWS LambdaからAmazon EC2に戻した経験がありました。「AWS Lambdaならではの開発の都合をよく分かっていなかった部分もある」と述べましたが、吉田氏はこれに対して「無理せず、戻したほうがいいのであれば、そうしたほうがいい」とフォロー。相馬氏はそれを受けて「ダメなら戻してしまったほうが精神的にも楽ですね」とコメントしました。猪飼氏も生井氏同様、「公式のドキュメント以外の情報が少なく、手探り状態だった」と話し、さらに「ローカルでテストがしづらく、ユニットテスト以外のテストが大変だと感じながら進めていた」と、苦労した点を語りました。
サーバレスアーキテクチャが抱える課題
このように、サーバレスアーキテクチャは多くのメリットがある一方で、テストがしづらいという課題を抱えています。その中でも比較的実施しやすいユニットテストは、今回登壇したパネラーの方々は全員「ローカル環境で、シンプルに実行できるようにしている」とのことでした。しかし他のイベントソースと絡んだ処理のテストには苦心しているようで、「手動で実行可能な部分は手動でテストしている」とのことでした。
次にステージング環境の管理、具体的には「開発用/ステージング/本番用と分けられた環境をどのように管理運用しているか」という点ついて、意見が交わされました。これらをサポートする機能としては、AWS Lambdaのエイリアス機能やAmazon API Gatewayのステージ機能が用意されています。しかし、パネラーからは「使ってみたい気持ちはあるが、まだ活用できていない」「システムが複雑になりそうなのでそこまで使いたいと思わない」といった意見が挙がりました。現状は「アカウントごとに環境を分ける」「環境ごと(の名称)にプレフィクスを設定し、開発用の環境には開発用の関数を使用、S3バケットも開発用のものを割り当てる」などの対処で乗り切っているとのことです。
サーバレス開発を加速させるツールについて
先日開催されたServerlessConf Tokyoでは、サーバレス開発で使用しているツールについて、アンケートが実施されました。
それを踏まえ、このセッションでもツールについての意見交換が行われました。
まず、Serverless Communityでも人気の「Apex」について、吉田氏が「ライブラリをまとめるのに使っていますが便利」と解説。生井氏も続けて「ApexはGo言語で実装されているので導入も楽ですね」と評価しました。
相馬氏は現在「Serverless Framework」の導入に向けて検証を行っているそうです。「Amazon API GatewayとAWS Lambdaのひも付け設定が行えるので、その部分をバージョン管理してスムーズな改修・リリース作業を行えるようにしたい」と展望を語りました。同種のものとして、吉田氏はAWS公式の「AWS Serverless Application Model(SAM)」を挙げ、「Apex同様、APIのエントリと関数をセットで管理できるので今後人気を二分することになるのでは」と期待を寄せました。
- Golang runtime for Apex/Lambda.
- Serverless - The Serverless Application Framework powered by AWS Lambda and API Gateway
- AWS Serverless Application Model (SAM)
サーバレスに向くもの、向かないもの
トピック盛り沢山で進行したディスカッションもあっという間に時間が過ぎ、終了が近づきました。吉田氏は最後に「サーバレスに向いているシステムの見極めポイント」について、パネラーに意見を求めました。
猪飼氏は、「長い時間がかかるもの、大きなシステムでは苦労するだろう。単純なシステムが向いていると思う。開発体制も少人数が好ましく、大規模のチームではコスト面の課題がある」と語りました。相馬氏は「リクエストをキューイングするようなシステムがサーバレスに適している」とコメント。「JavaScriptやPythonで書かれた長くないコードで、システム全体が非同期で稼働するものがいいと思う」と続けました。生田氏は「必要なときにだけ動かしたい、イベント駆動で作るシステムが向いているのではないか」と提案しました。
そして、吉田氏が「今後もぜひサーバレスの開発をどんどん進めていき、より良い運用とより素早い開発フローを洗練させていってほしい」とコメントし、セッションを締めくくりました。