はじめに
ここのところ terraform を使い AWS の構成を管理するようにしています。
コードで管理することで、PullRequestベースでレビューしあうことができ、かつリポジトリに過去の履歴が全て残るという点がすばらしいですね。
その分、コードに落す工数がかかってしまいますが。
今開発しているサービスでは Mackerel を監視に使用するつもりでいます。
Mackerel は go で書かれたライブラリがあり、簡単にAPIへのアクセスができます。
監視ルールも AWS と同じく terraform で管理できると良いな、と思い、terraform で Mackerel を管理する provider を作ってみました。
terraform-provider-mackerel
terraform-provider-mackerel とは
Hashicorp社が開発している terraform というツールのプラグインです。
このプラグインを使用することで terraform で Mackerel の設定を管理することができます。
できること
現時点では以下のことができます。
- ダッシュボードの管理
- 監視ルールの管理
- ホストメトリック
- サービスメトリック
- 外形
- 式
API が用意されていないロールの管理や、ユーザの管理、AWS Integrationなどはできません。
インストール方法
ソースからビルドする場合は make build
とすれば実行ファイルが bin/terraform-provider-mackerel
というファイル名で作られます。
govendor というツールをビルド時に使用していますので、あらかじめインストールしておく必要があります。
ビルド済みのファイルを使用する場合は、Releaseページからダウンロードすることができます。
terraform-provider-mackerel
を $PATH
に含まれているディレクトリに配置するか、以下のような設定ファイルを作ることで terraform から認識されるようになります。
- ~/.terraformrc
providers {
mackerel = "/path/to/terraform-provider-mackerel"
}
使い方
mackerel.tf
provider "mackerel" {
apikey = "xxxx"
}
resource "mackerel_dashboard" "foobar" {
title = "terraform_for_mackerel_test_foobar"
url_path = "foo/bar"
body_markdown = <<EOF
# Head1
## Head2
* List1
* List2
EOF
}
resource "mackerel_host_monitor" "cpu" {
name = "CPU"
duration = 10
metric = "cpu%"
operator = ">"
warning = 85.5
critical = 95.5
notification_interval = 10
}
$ terraform plan
+ mackerel_dashboard.foobar
body_markdown: "# Head1\n## Head2\n\n* List1\n* List2\n"
title: "terraform_for_mackerel_test_foobar"
url_path: "foo/bar"
+ mackerel_host_monitor.cpu
critical: "95.5"
duration: "10"
metric: "cpu%"
name: "CPU"
notification_interval: "10"
operator: ">"
warning: "85.5"
Plan: 2 to add, 0 to change, 0 to destroy.
$ terraform apply
以上です。