はじめに
こんにちは。株式会社網屋でソフトウェア開発を行っている関根と申します。
本稿では、オンプレミスで動く弊社のスタンドアローンなアプリケーションをSaaS (AWS) 版として移行させた際に、私たちが開発においてどのような変遷をたどったのか、またその時に躓いた点をお送りしたいと思っております。
今回 SaaS 移行のターゲットになったのは、弊社製品の「ALog ConVerter」になります。お勉強という軽いオーダーから始まった今回のプロジェクトだったのですが、気がつくと本格的な開発に突入していました。多分これをご覧の開発者の皆さんも、こんな性急なプロジェクトのご経験があるとは思いますが、「これから自社ソフトウェアを SaaS へ移行したい」と命題を抱えた皆様に何かしらかの助力になればと思います。
builders.flash メールメンバー登録
builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。
最初の一歩
ALog ConVerter はオンプレミス環境で WindowsService としてサーバーで常駐・動作する Windows のプログラムです。本製品では、Windows サーバー上から他のサーバーやプロセスで発生した監査ログを収集・変換し、その結果を用いてユーザーに検索・レポート発行する機能を提供します。
本製品の SaaS 化に向けて最初に検討に上がったのは、「Windows サーバーインスタンスをクラウド上で起動し、本プログラムをインストール常駐した状態で提供する」という、いわゆる「サイロモデル」のアプローチでした。
しかし、「未来を見据えた場合にオペレーション負荷が大きいこと、加えてコストが高止まりになる」という観点から、本件ではこの「単純なサイロ化」のアプローチに難色がありました。
脱「単純なサイロモデル」を考える
実際の AWS への対応
「どのコンポーネント」をサイロ化し、どの部分をプールモデルにするのか決定後、AWS が提供する数多なサービスを、これらの処理ブロックに合わせてどう選択するか検討を始めました。私たちはその当時、AWS が全く分からずの状況でスタートした事もあり、SaaS におけるサーバーリソースの運用管理に関して知見を持ち合わせておりませんでした。
また今後、サービス規模が大きくスケールしている未来を考え、極力「サーバーレスなサービスを軸に構築を考えよう」と、処理は以下のようなサービスによる構成で賄おうと考えました。
部位 | AWS サービス | 説明 |
ビジネスロジック | Amazon ECS | Web ホスティングを行うため、必要に応じてインスタンスの増減などが発生するので ECS を利用 |
永続層 | Amazon RDS (Aurora) | 従来のプログラムからのクエリの移行やトランザクションを考え、RDS (Aurora) を利用 |
バッチタスク | AWS Lambda | タスクそのものの起動を行うため WebAPI とは別にコンカレントに動作する並行プロセス群として利用 |
検索エンジン | Amazon Athena | 大量データの検索・集計が必要であり、スケールする必然があったので、Athenaを利用 |
データストレージ | Amazon S3 | Lambda や ECS タスク Athena の入力データのソース源として、大容量の監査ログやレポートの出力など取り扱う必要があったので S3 を利用。 |
実は無限には使えないリソース
社内 α 版に向けて上記のようなサービス構成で作成をしていると、様々な場所で問題が発生しました。特にその中でも顕著に印象に残ったのは以下の 2 つでした。
クロスアカウントにおける処理のやりとり
上記のように構成や使う AWS のサービスとのマッピングが決まってくると、これらを有機的に動作させる方法が必要となりました。
先にもお話したとおりで、管理側と企業側でアカウントが分離しているため、各処理フローの中では適宜「クロスアカウント」における処理委譲の様を設計する事となります。端的に、「管理アカウント」と「企業アカウント」をまたがった処理はそれらの処理を「AssumeRole」を前提とした Role の移譲によって実現しました。
バッチタスク (ECS) や検索エンジン (Athena) の操作は AssuleRole により権限の制約が行われるため、バッチタスク単位での権限範囲が明確になりました。

まとめ
弊社がオンプレミスで動作するアプリケーションを、どうやって SaaS 化していったかの経緯をお話してきました。その変遷においてのポイントは
- アプリケーションのコンポーネント単位で、サイロモデルが適しているか、プールモデルが適しているかを分別し、両モデルの混載するモデルを考察
- 上記分離に伴い、アカウントを適宜分けていく構造にした
- コンポーネントには、そのコンポーネントが持つ「性格・性質」に合わせて、適切な AWS のサービスを選択する事が重要
- アカウントの分離による、各アカウント間の処理連携を AssumeRole を前提とした作りとした
となります。
本稿がこれからオンプレミスで動作しているプログラムを AWS へ移行していく方々の開発の一助になると幸いです。
筆者プロフィール
関根 正夫
株式会社網屋 開発部
下は不揮発性メモリのドライバ・ロジック半導体の設計・レイアウトから、上は OS やサーバーバックエンドのプログラムまで、手広く「開発」に携わってきました。近年はもっぱら弊社セキュリティ製品のコア部分に従事。
好奇心が強く興味の対象は尽きないのですが、最近の趣味はコーヒーを淹れる事、飲みあるく事です。

Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages