Web 系のアプリ開発で Heroku を選択する理由
Heroku は、Salesforce 社の提供する PaaS のプラットフォームです。
インフラ選定というと AWS や GCP が検討にあがりがちですが、
PaaS の Heroku には PaaS ならではのメリットがあります。
Heroku の内部では、AWS のソリューションが多数活用されています。
既に AWS や GCP を利用してインフラの構成を組んでいるプロジェクトチームも、
Heroku への移行で、クラウドの信頼性を損わずに、PaaS のメリットを享受できます。
for what
- プロジェクトのインフラ選定における Heroku の推しに
- IaaS, PaaS など ある程度のクラウド知識がある読者向け
なぜ Heroku なのか
Pros
- アプリケーションエンジニアが、インフラを管理できる。
- インフラ管理の業務を、開発/Ops のフローに組み込むことで、より柔軟な制作フローが実現できる。
- プロジェクトニーズに応じて、即座に検証環境を用意
- エンジニアがオンデマンドで DB を複製して、検証に活用し、破棄
Cons
- IaaS ではないぶん、構築できるインフラの自由度に制限がある
- 12 factor 方法論から逸脱するアプリケーション設計と相性が悪い
- 設定をアプリケーション内に直接注入する
- ローカルでファイルを生成し、それに依存する
- npm や composer などのPMS 管理されない、コード外の依存系が存在する
Heroku がもたらすプロジェクトの価値
インフラ管理にまつわるコストの削減
Herokuを利用するプロジェクトチームでは、インフラの管理はアプリケーションエンジニアが行います。
プロジェクトのニーズに応じて発生する環境の更新や追加・削除といった運用作業は、
アプリケーションの開発者が自らで実施することができます。
pipeline を用いたリリースの管理
Heroku の pipeline は、アプリケーションに対する変更のリリース状況を管理するための標準機能です。
staging フェーズから production フェーズに至るまでの、アプリケーションの情報を一覧で可視化し、
フェーズ間での変更反映状況を、チーム内にわかりやすく共有することができます。
アプリケーションのリリースは、都度 Heroku 上に記録されるため、特別なリリースノートの運用も不要で、
開発チームとクライアントは、常に Heroku 上の画面からリリースに関する最新の情報を取得することができます。
状況に応じて、環境を追加、削除
Heroku における環境構築は非常に簡単です。
プロジェクトの進行に応じて複数の環境が必要になった場合や検証用に追加の環境が必要になったケースなどでも、
アプリケーションエンジニアが、自分で環境を追加することができます。
Heroku を活用したプロジェクトでは、テスト環境・本番環境といった2種類の環境準備にとどまらず、
一つのプロジェクトで5つ以上の環境を運用するケースも珍しくありません。
ドキュメント不要のインフラ管理
Heroku のインフラ管理は、すべて CLI または Web 画面上で実施され、
設定状況については、権限を持つすべてのユーザが自由に確認することができます。
このため、Heroku を活用したプロジェクトでは、複雑なインフラの構築手順書は不要で、
新しくプロジェクトに JOIN するメンバーも、組織への招待を受けるだけで簡単にプロジェクトの状況を確認することができます。
マイクロサービス
アプリケーションの用途ごとにインフラを細かく分割する マイクロサービスの運用においても、
Heroku を利用した簡単なインフラ運用が役に立ちます。
アプリケーションがどんなに複雑に分割されていても、
すべての Web サービスの構成は、Web 上で管理されており、
特別なドキュメントなしにその構成を一目で把握することができます。
サーバだけでなく、データベースも簡単に
Heroku で管理できるのは、Web サーバだけにとどまりません。
Web アプリケーションで利用するデータベースもまた PaaS としての機能で、
マネージレスな活用が可能です。
Postgres サーバの構築からバックアップ、権限の管理や、Web ベースのデータ操作などの機能が利用できるほか、
既存の DB の複製や、冗長化といった構成も簡単に実現可能です。
Heroku Enterprise
Private Spaces
Heroku Private Spaces は Heroku の環境上で、閉じられたクラウドネットワーク環境を構築します。
これにより、以下のような Enterprise にありがちな要件を Heroku で解決することができます。
- 公開する Web システムに対し、特定の IP アドレス以外からのアクセスを遮断する。
- Heroku 上の Web システムが外部に接続する際の IP アドレスをいくつかの帯域に固定する。
- 外部からの DB アクセスを完全に遮断する。
もちろんこれらの設定は Web 上で簡単に完結し、ネットワークエンジニアが複雑なネットワーク設定のために稼働する必要は一切ありません。
Heroku Connect
Heroku Connect は Salesforce に格納されている任意のオブジェクトレコードを
Heroku Postgres のテーブル上に 双方向で同期します。
Web アプリケーション開発において、顧客向けシステムの開発に伴って、管理者向けシステムの構築ニーズが生まれるのは一般的なシチュエーションです。
Heroku Connect を利用した開発では、Salesforce のデータを簡単に Web アプリ上で活用できるため、
管理者向けのシステム開発を Salesforce 上で素早く構築し、顧客向けシステムの開発にリソースを集中することができます。
Salesforce 上のデータを任意の Web アプリ上で活用するシチュエーション以外にも、
任意の Web アプリから Salesforce へのデータを追加するふろーを実装することで、
Salesforce 自体のデータ運用の幅を広げることもできます。
Discussion