Redmineのクラウドサービス My Redmine のアーキテクチャ紹介 2023


My Redmine

吉岡です。先日、「AWS Partner Solution Day in 大阪」という AWSパートナー向けのイベントで登壇する機会をいただきました。そこで今回は発表の中で触れた弊社が運営するRedmineのクラウドサービス My Redmine のアーキテクチャに関することを書きたいと思います。

全体図

サービスの全体図になります。色々なサービスを組み合わせて構成していますので、詳細を見ていきます。


(クリックで拡大)

主要システム

まずは主要なシステム(Redmine, 業務システム, 登録フォーム)の構成の説明です。

Redmine(RedMica)


(クリックで拡大)

赤枠が Redmine を動かしている部分になります。前提として、Redmine を少しカスタマイズ(pluginを使用)してステートレス化して、コンテナ(ECS)で動かせるようにしています。

オレンジの枠については rails task をタスクスケジューラーで定期実行したりして、運用に役立てています。(例としてはリマイドメールの送信などを行っています。)

詳細


(クリックで拡大)

構成の詳細は上記図のようになります。ECSを利用した基本的なWEB3層構造になります。

コンテナ化の過程でアプリケーションをステートレスにしたので、冗長化・可用性(マルチAZ、クロスリージョン)を比較的容易に実装できました。

業務システム(顧客管理・請求管理)


(クリックで拡大)

続きましてこちらが、自社開発の業務システム(顧客管理・請求管理)の構成図です。Ruby on Rails で作られたシステムになります。

詳細


(クリックで拡大)

ほぼ、Redmineと同じ構成で動かしています。

新規登録フォーム


(クリックで拡大)

こちらは新規登録(無料お試しお申し込み)フォームです。AWS Amplifyを利用して構築されています。

フロントエンドは React を使用し、バックエンドはAppSyncをベースに各種AWSサービスを利用して実装しています。

登録・変更・削除

SaaSを運用するためには色々な処理が必要になってくるかと思います。弊社では新規登録、停止、変更・再開、削除などの処理を自動化するために AWS Step Functions を利用して実装しています。

今回は新規登録処理について説明したいと思います。

新規登録フロー


(クリックで拡大)

新規登録フォーム、業務システム(顧客・請求管理のシステム)、Redmineがあり、以下の流れで登録処理が実行されます。

  1. 新規登録フォームから登録されると自動で業務システムにも登録。
  2. 業務システムへ登録されたタイミングで、Redmineを動かすのに必要な、DB作成、設定ファイル作成を実行するAPIを実行。

(クリックで拡大)

こちらのオレンジの枠の AWS Step Functions のアイコンの部分が業務システム(顧客・請求管理のシステム)からRedmineを利用するのに必要なDB、設定ファイルを設定するAPIになります。

詳細


(クリックで拡大)

実際の新規登録時の AWS Step Functions の登録の流れになります。

  1. 最初にLambdaからDBとユーザーの作成
  2. Fargate から Rails コマンドを実行してDBの初期化
  3. アプリケーションを起動するのに必要な設定情報を登録
  4. ECS Serviceを再起動を実行
  5. Route53でDNSの設定
  6. レスポンスチェック
  7. レスポンスがOKであればユーザーに通知

その他


(クリックで拡大)

上記図のように更新、停止、削除の処理も AWS Step Functions を利用して実装しています。

ユーザー管理機能


(クリックで拡大)

サービスとしてユーザーから設定(操作)が必要な機能についてもAWSを利用して実装しています。

  1. 登録情報(業務システムに登録されているご契約情報)確認
  2. 請求情報(請求書または口座振替請求明細書)確認 / ダウンロード
  3. アプリケーションログのダウンロード

上記機能をAPI GateWayを使って実装しています。

詳細


(クリックで拡大)

APIのエンドポイントは以下のようになっています。

  1. 登録情報取得の取得
    業務システムに登録されている情報をお客様からご確認いただけるようにAPIを実装しています。
  2. 請求書(取得・アップロード)
    Redmineから請求情報の確認・ダウンロード、業務システムから請求書のアップロードを実装しています。
  3. ログ(生成・確認・ダウンロード)
    Redmineからログの生成、確認、ダウンロードができるように実装しています。ログの生成はS3に書き出されているアプリケーションログを圧縮してダウンロードできるようにするために AWS Step Functionsを利用して圧縮する処理を実行しています。

ログ圧縮処理(クリックで拡大)

Step Functions で Fargate を動かしてログの圧縮処理を実行しています。

まとめ

簡単ですが、現在 My Redmine に関連したシステム全体の構成図の紹介をさせていただきました。ご紹介した図を見ていただくとわかる通り、My Redmineを運用していくために非常に多くのシステムが動いています。なるべく運用コスト(人の手間)を削減するためにサーバーレスのサービスを中心に選択し実装してきました。

また、苦労した点としましては、ひとつひとつのシステムの構築自体は難しくはないのですが、それぞれのシステムをどのようにセキュアに連携させるかに関しては頭を悩ませました。(IPアドレス、APIキーなどによるアクセスやIAM認証など様々な工夫をしています。)機会がありましたら、運用コスト削減のためにしたことやアクセス制御に関してもブログなどで紹介できればと考えています。

以上、今回は発表内容の一部を公開させていただきました。

【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。

My Redmine

こちらの記事もオススメです!
AWS で運用している複数の Rails アプリケーションの連携方法と機能の分離についての考察
AWSを利用した複数のアプリケーション運用にまつわる課題と解決策。
Redmine My Pageの使いこなし
RedmineのMy Page機能で利用者ごとのダッシュボードが作れます
台湾のオープンソースイベント COSCUP 2023に参加
台湾で開催されたCOSCUP 2023に初めて参加
中国語初級者が台湾のCOSCUPでの発表をやりきるためのスライドづくり
台湾で開催されたCOSCUP 2023というオープンソースのイベントでRedmineの発表を中国語で行いました
オフライン初開催「Redmine Japan Vol.3」参加レポート
Redmine Japan Vol.3における発表と協賛企業としてブースを出展
ファーエンドテクノロジーからのお知らせ(2024/07/10更新)
夏季休業のお知らせ (8/10〜15休業)
ファーエンドテクノロジー株式会社は、2024/8/10(土)〜8/15(木)は夏季休業とさせていただきます。
2024年7月20日 オライリー本の全冊公開日のお知らせ(もくもく勉強会も同時開催)
ファーエンドテクノロジーが所蔵するオライリー本(全冊)公開日のご案内です。公開日には「もくもく勉強会」も同時開催します。
My Redmine 休止プラン新規お申し込み受付終了のお知らせ
2024年6月30日をもって休止プランのお申し込み受付を終了しました。
My Redmine 解約返戻金制度終了のお知らせ
My Redmineでは、2025年3月解約分をもって解約返戻金制度を終了します。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け