VII. ポートバインディング

ポートバインディングを通してサービスを公開する

WebアプリケーションはWebサーバーコンテナの内部で実行されることがある。例えば、PHPアプリケーションはApache HTTPD内部のモジュールとして実行されるかもしれないし、JavaアプリケーションはTomcatの内部で実行されるかもしれない。

Twelve-Factor Appは完全に自己完結 し、Webに公開されるサービスを作成するために、コンテナが実行環境にWebサーバーランタイムを注入することを頼りにしない。Webアプリケーションは ポートにバインドすることでHTTPをサービスとして公開し、 そのポートにリクエストが来るのを待つ。

ローカルの開発環境では、開発者はアプリケーションによって公開されたサービスにアクセスするために、http://localhost:5000/のようなサービスのURLにアクセスする。本番環境ではルーティング層が、外向きのホスト名からポートにバインドされたWebプロセスへとリクエストをルーティングする。

これは一般に、依存関係宣言を使ってWebサーバーライブラリをアプリケーションに追加することで実装される。Webサーバーライブラリの例として、PythonにおけるTornado、RubyにおけるThin、Javaやその他のJVMベースの言語におけるJettyなどがある。これは ユーザー空間 すなわちアプリケーションのコード内で完結する。リクエストを処理するための実行環境との契約は、ポートをバインドすることである。

ポートバインディングによって公開されるサービスはHTTPだけではない。ほぼすべてのサーバーソフトウェアは、ポートをバインドするプロセスを用いて動作し、リクエストが来るのを待つ。例として、ejabberdXMPPを話す)や RedisRedisプロトコルを話す)などがある。

ここで注目すべきは、ポートバインディングの方法によって、あるアプリケーションが他のアプリケーションにとってのバックエンドサービスになれる点である。バックエンドアプリケーションへのURLを提供し、利用するアプリケーションの設定にリソースハンドルとして格納すればよい。