terraformのRedash providerを書いた

業務で使っているRedashのアラートをGitHubで管理したくなったので、terraformのproviderを書いた。

github.com

registry.terraform.io

Redash providerはすでにいくつかあるが、テストがなかったり活発にメンテナンスされている様子がなかったりしたので、自分で書くことにした。というかまずクライアントライブラリから書いた。

Usage

terraform {
  required_providers {
    redash = {
      source = "winebarrel/redash"
    }
  }
}

provider "redash" {
  url     = "http://localhost:5001"
  api_key = "..."
}

resource "redash_data_source" "postgres" {
  name = "postgres"
  type = "pg"
  options = jsonencode({
    dbname = "postgres"
    host   = "postgres"
    port   = 5432
    user   = "postgres"
  })
}

resource "redash_query" "select_one" {
  data_source_id = resource.redash_data_source.postgres.id
  name           = "select one"
  query          = "select 1"
}

misc.

  • メールでのユーザーのアクティベーション挟むので、相性が悪そうなredash_userリソースは作らなかった。SSOを設定した方がよいと思う(追加自体はそんなに手間はかからないはず)
    • と思ったけど一応追加した cf.
  • データソースのoptionsがJSONになっているのは苦肉の策で、terraformだと任意の型を持つブロックが定義できないためこうなった。Redash側でいい感じに型を判断してほしいが、たとえばpgタイプのportに文字列を投げるとInternal Server Errorになる。terraform側で頑張って型を正しく定義しようとすると、すべてのデータソースのオプション属性をもつブロックを定義することになり、メンテナンス性を落としそうなのでそれはやめた
    • ignore_changesでpasswordを無視するという手段が使えなくなるが、そこは変数やSecrets Managerなどを使ってください、という感じ

要望等があればIssueまで。PRは随時歓迎