IaCのCI/CDツールとしては、Terraform Cloudが有名な気がするが、Speceliftというツールを試してみた。
準備
Speceliftのアカウント発行
Top Pageからアカウントを作成する。今回はGitHubアカウントを利用した。
リポジトリは、デフォルトではAllになっているが、必要なもののみにした方が安全と思う。
Stack作成
Speceliftにて操作する。
右上のボタンからStackを作る。
設定内容はシンプルなので、直感的に進められると思う。自分自身が少し躓いたのが、今回の検証用にリポジトリを作成した際に、最初は空のままだった。そのため、ブランチがブランクのままで進めることができなかった。
とりあえず、README.mdをmainブランチにPushすることで進めることができた。
Google CloudのIntegration設定
Speceliftにて操作する。
作ったStackのSettingタブからIntegrationsパネルを開く。
DropDownリストからGoogle Cloud Platform(余談だが、これは旧名で今はGoogle Cloudと呼ぶべき)を選択する。
サービスアカウントが表示されるので控えておく。
IAMのprincipalを追加
Google Cloudコンソールから操作。
サービスアカウントを登録する。公式ガイダンスではOrganizationレベルでの設定が例示されているが、本当にそのニーズがない限りはやめた方がいいと思う。そしてそのニーズが発生することはあまりないと思っている。
今回は、プロジェクトレベルで設定した。
以上で、準備完了!
CI/CDを試す
Terraformテンプレートの作成
適当なTerraformテンプレートを作る。
ここでは以下のようなものを作った。
provider "google" {
project = "<Your Project>"
}
resource "google_storage_bucket" "MULTI_REGIONAL" {
name = "<Bucket name>"
storage_class = "MULTI_REGIONAL"
location = "us"
}
TerraformテンプレートのPUSH
リポジトリにPUSHすると、SpeceliftのStackが発動する。Speceliftのサービス側でコンテナが生成されて実行されているらしい。
TerraformのPlanが終わると、SpeceliftにてConfirm待ちとなる。
Planの内容を確認して、Confirmボタンを押下すれば、Applyされてリソースが生成される。
コードを変更して再度PUSHすれば、もう一度、Stackが発火する。
Speceliftで確認
StackがCompleteされると共に、他のUIにも反映される。
こちらは、リソース一覧。ユーザーとそのユーザーが作成したリソースが紐づけられて表示される。
こちらは、実行履歴。ユーザーまたはコミットが、どのStackを発動させたのか、またその結果を確認できる。
カーソルを合わせると、具体的なユーザー名も確認できる。
まとめ
CI/CDの構築は、実際には運用まで考えた設計をしないと、将来破綻することが多い。
とくにインフラ部分まで含めたCI/CDを作る場合、同一のパイプラインに集約するのか分割するのか、そもそも本当にインフラ部分もIaCを継続的に管理していくのか考えるべきことは多い。
ただ、サクッと試す分には非常に簡単で、UIも直感的で綺麗なので興味のある方は試してみましょう!