Split DigitalOcean project
最近このブログを 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 で対象のリソースが新規プロジェクトに移動されるような挙動でした。
順序依存がおかしくなっている??再現性があれば調べようかな…。
ひとまずさっぱりしたので引き続きいじっていくぞ!