😶‍🌫️

2024年 | コミュニティオのインフラについて

2024/08/15に公開

こんにちは!株式会社コミュニティオでインフラ、サーバーサイドの開発を担当している藤田です。今回は弊社コミュニティオのサービスを支えているインフラについて紹介したいと思います。

コミュニティオのプロダクトの特性

コミュニティオは企業文化を変革するためのサンクスカード・サービスTeamStickerと全社配信サービス(NewCommunicator)を提供しています。

TeamStickerは社内での感謝・賞賛の文化を促進するためのサービスで社員同士がお互いに感謝・賞賛の気持ちを伝えることができます。日々の業務での協力に感謝したり、仕事への成果を称えるタイミングはユーザー個別に異なります。ミーティングの後に感謝の気持ちを伝える、お昼時間に午前中の協力に感謝するなどユーザーの利用時間は多岐にわたるためサーバーに対する負荷は分散される一方、安定した応答性が求められます。

NewCommunicatorは社内での情報共有を促進するためのサービスで社内の情報を社員に向けてMicrosoft Teams上で配信することができます。全社一斉配信で数万人規模のユーザーへの配信を行うことがあるためサーバーはスケーラビリティが求められます。

現在、コミュニティオのプロダクトは全て Azure 上で動作しています。
TeamSticker は Microsoft Teams 統合機能を提供、NewCommunicator は Microsoft Teams 専用の配信サービスとして提供しています。そのため、Microsoft のプラットフォームと親和性が高い Azure を選定しました。

使用している主な Azure のサービス

コミュニティオでは Azure のサービス選定にあたって PaaS であることを重視しています。
PaaS はインフラの運用を最小限に抑えることができるため、開発チームはサービスの開発に集中することができます。人数が限られているスタートアップでは、開発チームのリソースをサービスの開発に集中させることが重要です。
そこで、現在は Azure Static Web Apps、Azure App Service、Azure Functions などの PaaS を中心に利用しています。
結果として、現在まで大きな問題もなく運用を続けており、開発チームはサービスの開発に集中することができています。

なお、Azure のコンピューティングリソース使い分けについては Azure コンピューティング サービスを選択する が参考になります。

以下では コミュニティオで使用している主な Azure のサービスについて紹介します。

Azure Static Web Apps

Azure Static Web Apps は静的コンテンツをホスティングするためのフルマネージド PaaS です。
GitHub Actions や Azure DevOps Pipelines を使用して簡単にデプロイすることが可能(GitLab リポジトリのデプロイ)で、Azure Functions 等との統合により API をホスティングしたり(API サポートの概要)、EntraID/Facebook/Google/OpenID Connect 等を利用したユーザー認証を簡単に組込むこともできます(カスタム認証)。

コミュニティオのサービスは基本的に SPA(Single Page Application) + APIサーバー という構成になっており、SPA は Azure Static Web Apps でホスティングしています。
また、フロントエンド開発では Azure Static Web Apps のプレビュー環境機能を積極的に活用しており、PR を簡単にプレビューすることができるので、デザイナーやビジネスサイドのメンバーによるレビューも簡単に行なうことが出来ます。

Azure App Service

Azure App Service は Web サイトや Web アプリケーションをホスティングするためのフルマネージド PaaS です。
スケーラビリティが高く、簡単にスケールアウトすることができるため、急激なトラフィックの増加にも対応することができます。また、スロットを利用することでブルーグリーンデプロイメントを簡単に構成出来る点も大変ありがたいです。

コミュニティオでは TeamStickerの API サーバーをコンテナに詰めて App Service で実行しています(カスタム コンテナー)。

Azure Functions

Azure Functions はサーバーレスコンピューティングを提供するフルマネージド PaaS です。
Azure Functions はコードを実行するためのサーバーの管理を行わずに、コードが実行されるトリガーに応じてコードを実行することができます。トリガーには HTTP、タイマー、Kafka等の汎用的なものに加えて、Blob Storage、Cosmos DB、Event Hubs等の Azure のサービスと連携するためのトリガーも多数提供されています。
また、バインド機能を利用することで、Azure Functions から Azure のサービスを簡単に操作することができます。

コミュニティオでは NewCommunicator の API サーバー、配信システム等のマイクロサービス群を Azure Functions で実装しています。
NewCommunicator では数万人規模のユーザーへの配信を行うため、Azure Functions のスケーラビリティが大変有用です。

また、現在プレビュー中のFlex 従量課金プランによって Azure Functions 使い方の幅が一気に広がりそうなので TeamSticker の方でも積極的に活用していきたいと考えているところです。

ストレージ

ストレージに関しては用途に応じて以下のサービスを利用しています。

  • Azure Cosmos DB
  • Azure Database for PostgreSQL - Flexible Server
  • Azure Blob Storage
  • Azure Queue Storage
  • Azure Table Storage
  • Azure Redis Cache

IaC (Infrastructure as Code)

コミュニティオでは Azure のリソースを管理するために Terraform による IaC (Infrastructure as Code) を採用しています。
以前は手動構築された部分が多く、属人化の温床となっていたため、2021年に Azure に移行する際に可能な限り Terraform で管理するようにしました。

まとめ

コミュニティオのインフラは Azure の PaaS を中心に構築されており、開発チームはサービスの開発に集中することができています。
今後も Azure の新機能を積極的に取り入れていき、より良いサービスを提供していきたいと考えています。

コミュニティオ テックブログ

Discussion