最近このブログを Nomad クラスター環境へ移行しました。

クラスターは DigitalOcean 上に構築しており、構築は Terraform で自動化しています。ウェブサーバーやブログなどのアプリケーションの配備や管理は Nomad に任せています。

DigitalOcean ではプロジェクトという単位でリソースをまとめることが出来ます。

とりあえず Nomad クラスター関連のリソースをまとめる意図で Nomad Cluster というプロジェクトを作成し Droplet や Load Balancer などのリソースを放り込んでいました。

が、最近 G Suite の試用を始め、G Suite 用の DNS レコードの設定を DigitalOcean DNS に設定する必要が出てきました。それ以外にも Redash や Uptime Robot 用の DNS レコードが含まれており Nomad 関係ないな〜と思い気になってきました。

ので、プロジェクトを分けてみた。

純粋に Nomad 関連のリソースは引き続き Nomad Cluster プロジェクトに、DNS レコードは Nomad に関係なくごっちゃになっていくので Common resouces というプロジェクトを新規に作成しそちらに移しました。

tf ファイルで見るとこんな感じです。

Before:

resource "digitalocean_project" "nomad" {
  name        = "Nomad Cluster"
  description = "Lorentzca Nomad cluster."
  purpose     = "Nomad cluster"
  environment = "Production"
  resources = flatten([
    digitalocean_droplet.nomad-server-nodes[*].urn,
    digitalocean_loadbalancer.nomad-nodes-loadbalancer.urn,
    digitalocean_domain.lorentzca-me.urn,
    digitalocean_domain.ponpokopon-me.urn,
  ])
}

After:

resource "digitalocean_project" "nomad" {
  name        = "Nomad Cluster"
  description = "Lorentzca Nomad cluster."
  purpose     = "Nomad cluster"
  environment = "Production"
  resources = flatten([
    digitalocean_droplet.nomad-server-nodes[*].urn,
    digitalocean_loadbalancer.nomad-nodes-loadbalancer.urn,
  ])
}

resource "digitalocean_project" "common" {
  name        = "Common resouces"
  description = "Lorentzca common resouces."
  purpose     = "Common resouces"
  environment = "Production"
  resources = flatten([
    digitalocean_domain.lorentzca-me.urn,
    digitalocean_domain.ponpokopon-me.urn,
  ])
}

あとは terraform plan コマンドで差分を確認後 terraform apply するだけ。プロジェクトの作成や移動に既存リソースの削除や変更は伴わないので、カジュアルに適用できます。 😄

ただ、なぜか 2 回 apply しないと移動が完了しませんでした。1 回目の apply では新規プロジェクトの作成と既存プロジェクトから対象のリソースが除外され、2 回目の apply で対象のリソースが新規プロジェクトに移動されるような挙動でした。

順序依存がおかしくなっている??再現性があれば調べようかな…。

ひとまずさっぱりしたので引き続きいじっていくぞ!