進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

Heroku での Java アプリケーションの管理と拡張

Heroku アプリケーションのログの表示

Heroku ではログを、アプリケーションとそれを実行する Heroku コンポーネントの両方の出力から集約された時系列イベントのストリームとみなします。つまり、あらゆるロギングイベントを 1 つにまとめたチャネルになっています。heroku logs --tail コマンドを実行すると、前の単元で作成したアプリケーションのログ出力を表示できます。

heroku logs --tail

Heroku アプリケーションのログの例

このコマンドを実行したまま、別のターミナルセッションで heroku open を実行し、ブラウザのアプリケーションに再度アクセスします (あるいは、アプリケーションが開いている場合は単に Web ページを更新します)。ページにアクセスするたびにログメッセージが生成されるのがわかるでしょう。

Control+C キーを押すと、ログのストリーミングが停止します。

アプリケーションのプロセスの調査

この時点で、アプリケーションは 1 つの web dyno で実行されています。dyno は、アプリケーションの Procfile で指定されたコマンドを実行する軽量のコンテナで、Procfile はアプリケーションのルートディレクトリに存在するテキストファイルです。Procfile は、アプリケーションを起動するために実行する必要のあるコマンドを明示的に宣言するために使用します。リリースしたサンプルアプリケーションの Procfile を以下に示します。

web: java -jar target/java-getting-started-1.0.jar

heroku ps コマンドを使用すれば、実行中の web dyno の数を確認できます。

heroku ps

heroku ps の出力

ディフォルトで、アプリケーションは無料の dyno にリリースされます。無料の dyno に 30 分間活動がないと (トラフィックを受信しない)、スリープ状態になります。この場合は、最初の要求時、起動に数秒の遅延が生じます。後続の要求は正常に実行されます。また、無料の dyno は、アカウントごとに割り当てられた 1 か月の無料 dyno 時間を消費していき、割当量を使い果たすまであらゆる無料アプリケーションを実行し続けることができます。

dyno のスリープ状態を回避したい場合は、「Dyno Types (dyno の種類)」記事に記載のとおり、hobby または professional にアップグレードできます。たとえば、アプリケーションを professional dyno に移行すれば、それぞれが web プロセスタイプを実行する dyno をいくつ実行するかを Heroku に命令するコマンドを実行するという方法で簡単に拡張できます。

アプリケーションの拡張

Heroku でアプリケーションを拡張するということは、実行される dyno の数を変更するということです。拡張する理由として、冗長性を確保するため (1 つのプロセスがクラッシュしても要求を処理可能な別のプロセスが存在するようにする)、あるいは受信するトラフィックが増え、1 つの dyno で処理しきれなくなったため (嬉しい悩み) などが挙げられます。

最初に、web dyno の数をゼロに調整します。

heroku ps:scale web=0

Web ページの更新をクリックしてアプリケーションに再度アクセスするか、heroku open を実行してブラウザタブで開きます。この時点では要求の処理に使用可能な web dyno が存在しないため、エラーメッセージが表示されます。

ここでもう一度アプリケーションを調整します。

heroku ps:scale web=1

乱用を防止するため、無料以外のアプリケーションを複数の dyno に拡張する場合はアカウント確認が必要です。

管理タスクの実行

一部のアプリケーションタスクは、コマンドラインから 1 回限りの (one-off) ジョブを実行する必要があります。これらのジョブは、通常アプリケーションに含まれるスクリプトで、heroku run コマンドを使う one-off dyno を使用して実行できます。また、アプリケーションの環境で実験するため、あるいはアプリケーションでリリースしたコードを実行するために、ローカルターミナルに関連付けられた REPL またはコンソールプロセスを起動する目的にも使用できます。この例では、heroku run bash コマンドを使用します。

heroku run bash

heroku run bash の出力

「Error connecting to process (プロセスに接続中のエラー)」が表示された場合は、ファイアウォールの設定が必要になることがあります。

必ず「exit」と入力してシェルを終了し、dyno を終了します。

[Verify Step (ステップを確認)] をクリックして、プロジェクトの次のステップに進みます。

リソース