Terraformは、HCL(Hashicorp Config Language)を使用し、設定ファイルを通じてクラウドおよびオンプレミスのリソースを定義、管理するための、強力な「コードとしてのオブザーバビリティ」ツールです。しかし、HCL構文を使いこなすのは難しいため、Terraformを使用して、New Relic内の既存のダッシュボードを更新したり、新たなウィジェットを追加することが難しい場合があります。
幸いなことに、JSONテンプレートを使用すれば、HCL構文に変換することなく、TerraformでプロビジョニングされたNew Relicダッシュボードをより簡単に管理できるようになります。JSONテンプレートを使うことにより、New RelicのUIですべての編集が可能となり、その設定をTerraformのプロジェクトにエクスポートできます。また、JSONテンプレートでは、一連の色やY軸のスケールを指定する機能など、New Relicダッシュボードの拡張機能を使用することもできます。
このブログでは、TerraformでJSONテンプレートを使用し、New Relicダッシュボードを作成する方法について解説します。今回は3部シリーズの第1部になります。
- 第2部のTerraformを使用したNew Relicダッシュボードの動的な作成では、Terraformを使い、JSONとテンプレート変数でNew Relicダッシュボードを動的に作成する方法を学びます。
- 第3部のTerraformを使用したNRQLクエリからのNew Relicダッシュボードの作成では、クエリの結果にもとづく動的なNew Relicダッシュボードを作成するための、NRQLクエリを用いたTerraformの使用方法について学びます。これは、最遅のHTTPリクエスト5件、といったデータを表示させるダッシュボードの作成に非常に役立ちます。
前提条件
注意:TerraformでJSONテンプレートを使用してNew Relicダッシュボードを作成するには、プロバイダーバージョン3.4.0以上を使用する必要があります。
このチュートリアル内のサンプルコードを試すには、Terraformがインストールされている必要があります。Terraformのインストール手順とサンプルの実行方法に関するガイダンスは、GitHubのリポジトリ(nr-terraform-json-dashboard-examples)をご覧ください。
JSONを使用してダッシュボードを作成する
はじめに、New RelicでダッシュボードのJSON設定を確認します。このJSONはこのチュートリアルにのみ使用するので、どのダッシュボードを選択してもかまいません。既存のダッシュボードを探すか、またはNew Relic UIを使用して新たなダッシュボードを作成し、ダッシュボード右上のCopy JSON to clipboardアイコンを選択します。
Terraformプロジェクトにdashboardというディレクトリを作成し、クリップボードからdashboard.json
という新しいファイルにJSONをペーストします。最初にdashboard.json
内の"name"
属性をアップデートして、ソースとして使用したダッシュボードとこれを区別する必要があります。
次に、このdashboard.json
をインプットとして使用するために、Terraformの設定をセットアップする必要があります。そのために、dash_basic.tf
というファイルを作成し、以下のHCLコードを入力します。
resource "newrelic_one_dashboard_json" "basic_dashboard" {
json = file("${path.module}/dashboards/dashboard.json")
}
resource "newrelic_entity_tags" "basic_dashoard" {
guid = newrelic_one_dashboard_json.basic_dashboard.guid
tag {
key = "terraform"
values = [true]
}
}
output "basic_dashboard" {
value = newrelic_one_dashboard_json.basic_dashboard.permalink
}
最初のブロックが、dashboard.json
をnewrelic_one_dashboard_json
リソースに送ります。
2番目のブロックが、ダッシュボードをタグ付けし、これがTerraformで管理されていることを示します。これがベストプラクティスです。このケースでは、タグの値は以下の通りです。
tag {
key = "terraform"
values = [true]
}
最後に、3番目のブロックが、ダッシュボードのパーマリンクをコンソールに出力して見つけやすくします。
自身のTerraformを適用し、ダッシュボードが想定通りに作成されていることを確認します。
ダッシュボードのアップデート
ダッシュボードの作成はいたってシンプルですが、アップデートはどうすれば良いでしょうか。手順を確認しましょう。
単体のダッシュボード
このフローチャートは、単体のダッシュボードの管理プロセスを示しています。
New Relic UIで簡便にダッシュボードを編集し、新たなJSON設定をクリップボードにコピーしてプロジェクト内のdashboard.json file
をアップデートし、Terraform を再適用します。
複数使用のダッシュボード
ダッシュボードでもっと多くのことがしたい場合はどうでしょうか?たとえば、テンプレートのダッシュボードを使って、各ダッシュボードでコンテキスト上の変更がある度にデプロイを行うケースも考えられます。
ソリューションのひとつは、New Relic UIで管理する「テンプレート」ダッシュボードを作成することです。デプロイしたダッシュボードを変更したい場合、テンプレートダッシュボードを編集し、JSONをdashboard.json
ファイルにコピーしてから再適用します。
以下のフローチャートは、このプロセスの詳細を示しています。
デプロイされた各ダッシュボードへの変更が、appName
やアカウントIDなどの小さなものであれば、Terraformのreplace()
機能を使用して、ソーステンプレートの値をデプロイされたダッシュボードの新たな値に置き換えることができます。
たとえば、以下のdash_replacer.tf
のTerraformコードのサンプルは、ダッシュボード名を変更し、アカウントIDを設定します。
resource "newrelic_one_dashboard_json" "replacer_dashboard" {
json = replace(
replace( # This changes the dashboard name
file("./dashboards/dashboard.json"),
"by Terraform"
,"renamed by Terraform"
),
"1234567", # This is the value in the source file
"2233445" # This is the value it will be changed to
)
}
この方法の良い点は、ダッシュボードのアップデートが必要な際にはいつでも、テンプレートのダッシュボードを編集し、JSONをテンプレートファイルにコピー&ペーストして再適用すればよいということです。
デプロイメント時に、テンプレートに多くの変更を行いたい場合は、変更の管理がしやすいTerraformのtemplatefile
を使用できます。ただし、Terraformのtemplatefile
との互換性を持たせるため、設定をアップデートする必要が出てきます。example repo内のdash_templatefile.tf
ファイルは、稼働中のこの例を示しています。
ご覧の通り、このように新たなダッシュボードを作成する、またはいくつかの調整でダッシュボードを再デプロイする方法はかなりシンプルです。しかし、ダッシュボードを動的に作成するなど、もっと複雑なことをしたい場合はどうすればよいでしょうか?その方法は、本シリーズの第2部をご覧ください。
次のステップ
- Terraformを使い、JSONとテンプレート変数でNew Relicダッシュボードを動的に作成する方法については、第2部のTerraformを使用したNew Relicダッシュボードの動的な作成をご覧ください。
- クエリの結果にもとづく動的なNew Relicダッシュボードを作成するための、NRQLクエリを用いたTerraformの使用方法については、第3部のTerraformを使用したNRQLクエリからのNew Relicダッシュボードの作成をご覧ください。
まだNew Relicをお使いいただいていない場合は、無料でNew Relicの使用を開始できます。無料アカウントには、毎月100GBの無料データ取り込み、1名の無料フルアクセスユーザー、および無制限の無料ベーシックユーザーが含まれます。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。