Heroku ランタイム

Heroku ランタイムは、Heroku プラットフォームでアプリの実行と管理を担当するコンポーネントです。コンテナ(dyno)のプロビジョニングとオーケストレーション、dyno のライフサイクルの管理と監視、適切なネットワーク設定、HTTP ルーティング、ログ収集といった役割を担っています。

スマートコンテナ

Heroku プラットフォームは dyno と呼ばれるスマートコンテナの中でアプリを実行します。dyno は Dyno Manager と緊密に連携し、セキュリティ、隔離、安定性など、さまざまなメリットをもたらします。

コンテナのオーケストレーション

Heroku ランタイムには、アプリの実行に使用する dyno の調整と管理に役立つ Dyno Manager という機能が用意されています。この Dyno Manager は、dyno に障害が発生した場合にその dyno を自動で再起動するほか、再デプロイ後には全コンポーネントをリセットおよび更新する役割を担っています。また、基盤となるハードウェアで障害が発生した場合には、dyno をすべて新しい場所に移動させる機能も果たします。

ログ収集

Heroku ランタイムはアプリ、システムコンポーネント、およびバックエンドサービスの出力のログを収集し、Heroku の Logplex を使用して 1 つのチャネルに送信します。Heroku では、アプリログ、システムログ、API ログと呼ばれる 3 種類のログが収集されます。

HTTP ルーティング

HTTP リクエストは一連のルーターによりアプリのホスト名から web dyno へ自動的にルーティングされます。各ルーターではランダム選択アルゴリズムを採用しているため、複数の web dyno の間でトラフィックが分散されます。

リリース管理

コードのデプロイのたびに新しいリリースが作成され、Heroku に保存されます。デプロイしたリリースに問題がある場合は、リリースの履歴を確認して以前のリリースに戻すこともできます。

設定管理

設定は環境によって異なるものです。Heroku では環境変数を使用して各環境の設定を記録することができます。設定変数が更新されるたびに新しいリリースが作成されるので、以前のリリースにロールバックして設定変数を復元することもできます。

SSL と証明書管理

有料 dyno では Heroku SSL と自動証明書管理機能を追加料金なしで利用できます。アプリのカスタムドメインでは、Heroku ルーターによって SSL が処理されます。また、自動証明書管理機能を使用すると、カスタムドメインの TLS 証明書が自動的に生成されます。

スケールアウトとスケールアップ

Standard dyno または Performance dyno でアプリを実行している場合には、Heroku ダッシュボードや CLI から dyno の数を増やすこと(スケールアウト)も、CPU とメモリの容量が大きいタイプの dyno に切り替えること(スケールアップ)もできます。

Docker イメージのデプロイ

Container Registry では、Docker ベースのアプリを Heroku にデプロイすることによって開発環境と本番環境の差をなくしたり、独自のスタックを作成したりすることができます。heroku container:push を使用して Dockerfile から Docker イメージを作成するだけで、Heroku にイメージがプッシュされます。

価値とメリット

アプリを迅速にロールバック

リリース/設定管理機能では、デプロイと設定変数の両方がプラットフォーム内にコピーされるため、特定のリリースに問題があった場合や、以前の設定に戻す必要がある場合に、簡単にロールバックすることができます。

トラフィック管理が容易

Heroku ではアプリのスケールアウトもスケールアップも簡単に行えるので、トラフィックの急増にすばやく簡単に対処できます。たとえば、 heroku ps:scale web=5 というコマンドを入力するだけでアプリの実行に使用するスマートコンテナを 5 つ追加することができます。また、自動スケールを利用すると、トラフィックの急増に常に目を光らせておく必要がなくなります。

デフォルトで暗号化

有料 dyno では Heroku SSL と自動証明書管理機能を追加料金なしで利用できるため、コードの開発だけに集中することができ、証明書の更新日を気にする必要がなくなります。

コンテナに堅牢性を実現

Heroku ランタイムは失敗したコマンドをキャプチャして障害が発生しているハードウェアをすばやく特定することにより、アプリの稼働を維持します。dyno の起動に使用されているコマンドが終了した場合や、dyno を実行しているハードウェアで障害が発生した場合は、dyno を再起動したり、新しい場所に dyno を移動して迅速にリカバリを実行したりします。これらの動作はすべてバックグラウンドで行われるため、アプリの動作には影響しません。

統合ログ

Heroku ランタイムではログが一連のイベントとして扱われ、さまざまなソース(ルーターノード、dyno、アドオンなど)のログが 1 つにまとめられるため、さまざまな状況を簡単に把握でき、検索やアラートの設定を容易に行えます。

セキュリティパッチを自動で適用

Heroku では、環境を常に最新の状態に保つために、基本となるオペレーティングシステムやライブラリに最新のセキュリティパッチが自動的に適用されます。これらのタスクは、バックグラウンドで行われる再起動を除き、稼働中の dyno に影響を与えることなく自動的に処理されます。

アプリを相互に隔離

Heroku プラットフォームではアプリが相互に隔離された環境内で実行され、システム内の他のアプリや領域には影響を与えないため、セキュリティや安定性の問題を心配する必要がありません。これらの環境ではプロセス、メモリ、ファイルシステムが相互に隔離されているだけでなく、ホストベースのファイアウォールによってアプリによるローカルネットワーク接続が防止されます。

開発環境と本番環境が一致

Container Registry では、ローカルでの開発に Docker を使用でき、完成したコードを Heroku にプッシュすることができます。そのため、ローカルマシンで稼働するコードが他の開発者のマシンでもテスト環境でも本番環境でも確実に動作するようになります。

スタックの豊富な選択肢

Container Registry では、お好きなベース OS を使用してアプリを実行できます。また、任意の依存関係ファイルをインストールできるので、アプリを実行するためのスタックを完全にコントロールできます。さらに、Heroku でアプリを実行することにより、インフラの管理、セキュリティおよび SRE チーム、コンテナオーケストレーション、ルーティング、業界をリードするアドオンエコシステムなど、さまざまなメリットがもたらされます。

  • Heroku プラットフォームは Heroku チームよって管理され、サポートも行き届いているので、パッチの適用やストレージ容量の追加、セキュリティの脆弱性などを気にする必要はありません。

    Align Tech Leela Parvathaneni Align Technology 社対顧客アプリケーション部門ディレクター お客様事例を読む >>
  • Heroku を利用すれば、アプリの作成やスケールを誰にも依存することなく迅速に済ませることができます。

    Apartment List Matt Nemenman Apartment List 社エンジニアリング担当 VP お客様事例を読む >>
  • Heroku を使った証明書管理は非常にシンプルです。Heroku ACM では有効期限が切れる前に SSL 証明書を自動的に更新できるので、管理が非常に楽になりました。

    Study Abroad Apartments Vincent Trivett Study Abroad Apartments 社リード開発者

オンラインセミナー

Creating Secure Web Apps: What Every Developer Needs to Know About HTTPS Today

6 月 14 日水曜日午前 10 時(太平洋標準時)に開催されるオンラインセミナーへのお申し込み

インターネットでの安全なコミュニケーションはセキュリティを取り扱うすべての技術者にとって昨今最も重要な課題の 1 つとなっていますが、多くのソフトウェア開発チームはこの問題を後回しにしています。最近では、Google Chrome が HTTPS を使用していないサイトを安全でないと判断するようになったり、Apple が iOS アプリの API で通信を行う際に HTTPS の使用を義務付けたりするなど、Web 上でのセキュリティに関するトップニュースがほぼ毎週のように報道されています。このセミナーでは、Let’s Encrypt と Internet Security Research Group の代表を務める Josh Aas 氏と Heroku のデベロッパーアドボケイトを務める Chris Castle が壇上に立ち、HTTPS に関して現代の開発者であれば誰もが知っておくべきことについて語ります。