Production Check
Last updated 21 October 2019
Table of Contents
Production Check は、アプリの設定を一連のオプションの (ただし、強く推奨される) 基準に対してテストします。これにより、アプリの設定を最大の稼働時間が実現されやすいものにすることが簡単になります。さらに、稼働時間に寄与する要因を理解したり、監視したりするために使用できるツールが確実に手に入ります。
アプリをチェックする方法
Production Check を実行するには、Heroku Dashboard でアプリに移動し、右上隅にあるアクションメニューをクリックしてから、Production Check
をクリックします。
Production Check により、アプリに対して一連のテストが実行されます。これらのテストは、可用性を維持および監視するために推奨されます。各チェックには、関連するリソースへの役立つリンクが含まれています。
dyno の冗長性
ミッションクリティカルなアプリに対して少なくとも 2 つの Web dyno を実行すると、致命的なイベントが発生しても、そのアプリが使用可能な状態な状態を維持できる確率が高くなります。複数の dyno が異なる物理インフラストラクチャ (個別の AWS アベイラビリティ―ゾーンなど) で実行される可能性も高く、さらに冗長性が増します。
アプリで現在実行されている各タイプの dyno の数を確認するには、heroku ps
コマンドを使用します。アプリで実行されている dyno の数をスケーリングするには、heroku ps:scale
を使用します。
$ heroku ps -a ha-app
=== web:
web.1: up for 17m
$ heroku ps:scale web+2
Scaling web processes... done, now running 3
これは、web
dyno だけでなく、バックグラウンドまたは Worker dyno にも適用されます。
DNS と SSL
Cedar スタック上のアプリには、app-name.herokuapp.com
を指している CNAME レコードがあります。SSL が必要になった場合は、SSL エンドポイントをプロビジョニングします。さらに、US アプリの場合は、CNAME レコードが endpoint-name.herokussl.com
を指すようにします (この変更は EU アプリには不要)。他のどの設定を行っても、可用性が低下します。
Apex ドメイン (他にはベアドメイン、ルートドメイン、ネイキッドドメインと呼ばれる) を A レコードを使用して設定するべきではありません。CNAME のような機能またはサブドメインリダイレクションを使用して、ルートドメインの DNS を正しく設定してください。
DNS レコードが正しく設定されているかどうかは、host
コマンドラインユーティリティを使用してすばやく判定できます。
$ host www.example.com
www.example.com is an alias for nara-1234.herokussl.com.
nara-1234.herokussl.com is an alias for elb002776-242519199.us-east-1.elb.amazonaws.com.
elb002776-242519199.us-east-1.elb.amazonaws.com has address 107.21.240.226
…
www.example.com
から app-name.herokuapp.com
または endpoint-name.herokussl.com
のどちらかへのエイリアスマッピングが表示されます。
Heroku Postgres
本番プランのデータベース
Heroku でビジネスを実行する場合は、本番グレードの Heroku Postgres データベースを使用する必要があります。詳細は、「Choosing the Right Heroku Postgres Plan」(適切な Heroku Postgres プランの選択) を参照してください。
Heroku Postgres 本番プランには、Standard、Premium、Private、Shield があります。Hobby-Dev および Hobby-Basic プランは本番データベースではありません。
本番プランのサービスでは最も長い予測稼働時間が実現され、自動ヘルスチェック、データスナップショットのほか、フォークやフォローなどの高度な機能が含まれています。
$ heroku pg:info -a ha-app
=== HEROKU_POSTGRESQL_CYAN_URL (DATABASE_URL)
Plan: Standard 0
Status: Available
Data Size: 6.4 MB
Tables: 0
PG Version: 9.4.1
Connections: 2/120
Fork/Follow: Available
Rollback: earliest from 2015-04-24 22:16 UTC
Created: 2015-04-24 22:14 UTC
Maintenance: not required
Maintenance window: Mondays 20:30 to Tuesdays 00:30 UTC
アプリケーションに非リレーショナルデータストアが必要な場合は、Amazon DynamoDB が、可用性の高いデータストレージのための別の優れた候補になります。
高可用性
Premium、Private、および Shield 層の Heroku Postgres データベースには、アプリケーションの稼働時間のための追加のメリット (自動フェイルオーバーによる高可用性を含む) があります。
可視性と監視
アプリの可用性を向上させるには、アプリの状態を適切に認識し、それに迅速に対応することが役立ちます。これは、さまざまなツールを使用して実現できます。
アプリの監視
New Relic を使用すると、時間の経過に伴うアプリのパフォーマンスを監視し、それを詳細に分析できます。可用性が低くなる前にサービスの低下が現れるケースが多く存在します。
観察のための適度な期間が経過したら、アプリケーションの正常な動作境界を確立し、システムがその境界から逸脱し始めた場合に通知を受け取るためのアラートを設定します。
New Relic の豊富なグラフ作成およびパフォーマンス分析機能を使用して、アプリケーションが特定の状況でどのように動作するか、および最も脆弱な部分はどこかをより適切に把握します。これらの観察は、不安定な期間での低下を診断し、それを回避するのに役立ちます。
ログの監視
Heroku のアドオンマーケットプレイスには、アプリケーションのログストリームに対するインスツルメンテーションを消費、保存、および提供する多くのサービスが含まれています。関心のあるイベント (クレジットカードのサインアップの成功など) をログに記録することにより、これらのログサービスを使用して、例外的なアクティビティに対するアラートを受け取ることができます。問題が発生した場合は、ログイベントの履歴を検索できるため、そのデバッグも簡略化されます。
Papertrail は、ログデータ内のパターンに基づいてアラートを提供するサービスの例です。アプリ内のエラーやイベントの検索アラートを設定し、Librato、PagerDuty、Campfire と統合します。検索アラートは、Heroku のエラーコードまたはアプリ内の関心のあるイベント用に設定できます。