Amazon Web Services ブログ

Serverless Tech/事例セミナー(2019年3月27日 実施) レポート Vol.2

2019年3月27日 実施のセミナーのレポート 3部編の Vol.2 です。他の回は以下のリンクよりアクセスください。

 


 

Ruby on Lambdaで変わる大規模サービスの裏側 [資料はこちら]

Sansan株式会社 Eight事業部 Engineering Group/エンジニアリングマネージャー 藤井洋太郎氏

 

「業務でRubyをメインで触っている方はLambdaはぜひ使うべし」

名刺管理アプリEightでは、国内で行われる名刺交換の10%以上をデータ化しており、その裏では大規模バッチ処理と呼ぶ画像処理が高頻度に動いていると言う紹介から始まりました。

具体的な画像処理としては、ぼかし、サムネイル、フォーマット変換(webp)などであり、画像 1つのアップロードに対して20種類ほどを(同期、非同期で)生成処理されています。これはもともと、処理タスクをキュー(SQS)に積み上げ、Ruby on Railsで記述されているバッチサーバーがタスクを拾って処理を行う構成になっていました。

処理タスクは昼過ぎなどのピーク時に積み上がり、それを処理するバッチサーバーの処理が追いつかずタスクが滞留することもしばしばありました。そのような状況で、対象の名刺画像へのアクセス要求が来ると、事前に画像を用意できないため、その場で(on-the-flyで)画像処理をすることになり、レスポンス劣化が顕著となっていました。その解決のために、ときには人手をかけて対処することもありました。

このバッチサーバーが自動でスケールしたり縮退できればベストなので、Lambdaを利用できれば、とは感じたものの、コードの移植性の問題で対処できませんでした。そんな運用を続けていた昨年末、re:Inventでの AWS Lambda の Ruby 対応の発表があり、実装に踏み切ることができるようになりました。

 

 

ついにサポートされた Lambda での Ruby

セッションの後半は技術的な解決方法、取り組みの紹介がメインです。詳細は公開資料を参照いただくとして、実施された流れを紹介します。

  1. gemを使ったLambdaを作る(gem利用の手順を理解する)
  2. native extensionsに依存するgemを使ったLambdaを作る(native extensions利用の手順を理解する)
  3. 実行バイナリを含めたLambdaを作る(画像処理で必要な実行バイナリを含める手順を理解する)
  4. Lambda Layersを利用して実行バイナリをFunctionから切り離す(上記の部分を共通ライブラリ化)
  5. Frameworkを利用したローカル実行環境とデプロイ環境(上記をフレームワークで使いやすくする)
  6. CI/CD環境の構築(以降の作業の効率化のためにCI/CDに組み込む)

セッションでは、実際に使ったコマンドの例とともにポイントを説明いただき、どこに注意して何をするのが良いかが理解しやすいものでした。Lambda で Ruby をこれから試される方には非常に参考になる内容です。

最終的な現在の構成として、非同期の大量画像処理をLambdaで実行できるようになり、当初想定した構成が実現できています。

 

適用効果・変わったこと

適用効果として、バッチサーバーの基盤として立ちあげっぱなしにせざるを得なかったEC2が不要になり、費用と運用の面で軽減されたことや、そもそもの問題であった処理の滞留はほぼなくなり、ピーク時に起きていたアラートや人手の対処から解放されたこと、お客様のレスポンスが安定化したことがあげられました。

また、まとめとして、「業務でRubyをメインで触っている方はLambdaはぜひ使うべし」とコメントされました。

 

ご本人はまだ短いと謙遜されていましたが、藤井氏は3年ほどのサーバーレス経験があり、今回の適用以前でのSansan Eightチームでのサーバーレス活用経験として、リアルタイムリコメンデーション機構の構築やニュースフィード画像の圧縮/キャッシュ機構の実現があります(セッションの最後に軽く紹介)。

最後に、本セッションの資料はこちらからご覧いただけます。

 


 

【補足】

Lambda での Ruby 対応、Layersともにリリースされてからまだ半年たっていない程度ですが、使いこなしているのが素晴らしかったです。また、一つ前のヴァル研究所 福本氏の講演の課題の一つの回答にもなっていて、流れとして参加者に参考になったかと思います。

また、あわせて、以下のページもご覧ください。

プロジェクト責任者向け アーキテクト向け これから始めるエンジニア向け
ビジネス価値、事例、効果
ユースケースパターン
今から始めるサーバーレス

サーバーレス事業開発  杉