Terraform向けCI/CDツールを調査してみた
はじめに
どうも、ポートでSREをやっている @yukionodera です。
Terraform向けのCI/CDツールをいくつか調査したので、今回はその結果などを共有していこうと思います。
具体的には、下記の内容を記載していきます。
- 調査をするに至った経緯
- ツールの選定要件
- 選定要件に基づいたツールの比較表と詳細
また、今回調査したツールは下記の4つになります。
- Terraform Cloud
- Atlantis
- Spacelift
- GithubActions
調査をするに至った経緯
まず、今回の調査をするに至った背景ですが、弊社のSREチームはここ1年の間で 1名(自分) -> 4名 にまで拡大しています。
それにより、terraform を実行するメンバーが増えてきました。
また、各開発プロジェクト内でも、少しずつterraform を実行したいというニーズが出てきました。
上記によりterraform 実行メンバーが増加したことで、下記のような課題が浮き彫りとなってきました。
- terraform実行がローカル環境に依存しており、セットアップが面倒
- 適切な権限管理が難しい
- 現状は、インフラSREチームでない人にも同じ権限を渡して実行してもらっている
これらの課題は今後も肥大化する可能性が高く、今後更にスケールアップしていくためにも解決しておきたい課題です。
これらをTerraformのCI/CDツールの導入で解決できるのでは?という考えに至り、今回の調査をすることとなりました。
ツールの選定要件
弊社で持っている課題を解決し、より良いTerraform 実行環境を実現するために、ツールを導入することで達成したい事は下記の3つです。
- terraform セットアップの簡素化
- terraform 周りの適切な実行権限管理
- マネージド環境での terraform 実行
これらを元に、下記の4つを調査項目、選定要件としました。
- terraform セットアップの方法
- セットアップやリポジトリ追加の操作が簡単かどうか
- 多くのリポジトリでTerraformを分けて管理しているため
- terraform 実行権限の管理
- 最小権限の付与を実現するため
- terraform 実行環境の提供
- ローカル環境での実行を避けるため
- 外部ツールとの連携
- いくつかのPJでTerragruntを使用しているため
ツールの比較表と詳細
こちらが、各選定要件に照らし合わせたツールの比較表となります。
Terraform Cloud | Atlantis | Spacelift | GithubActions | |
---|---|---|---|---|
terraform セットアップの方法 | ○ | △ | ○ | △ |
terraform 実行権限の管理 | ○ | ○ | ○ | △ |
terraform 実行環境の提供 | ○ | × | ○ | △ |
外部ツールとの連携 | × | ○ | ○ | △ |
- 選定要件を満たしている: ○
- 選定要件を満たしているが、複雑: △
- 選定要件を満たしていない: ×
比較表からだと、Spacelift が全ての選定要件を満たしていて良さそうです。
ツール毎の詳しい調査内容については、下記で記載しています。
Terraform Cloud
概要
- Terraformの実行を信頼性の高い環境で管理するためのプラットフォーム
特徴
- StateファイルやCredentialの安全な保存
- VCS との統合による既存ワークフローでのインフラ開発
- Terraform Cloud UI によるリソースの詳細な可視化
選定要件
- セットアップ: tfファイル修正,
terraform init
による環境ごとの設定, など - 実行権限管理: Sentinel を利用したPolicyAsCodeでの管理
- 実行環境: Terraform Cloud 提供サーバ
- 外部ツール連携: 基本的に連携機能なし
Atlantis
概要
- PR経由で Terraform の実行を自動化できるアプリケーション
特徴
- Atlantis用のUIはなく、VCSのUIから操作
- マージ前に変更のapplyを可能にすることで、後戻りの削減
- 認証情報を渡す必要なく、開発者がTerraform のワークフローに参加
選定要件
- セットアップ: Atlantis設定ファイル追加, サーバー構築
- 実行権限管理: サーバー設定により可能
- 実行環境: 自前ホストサーバ (VPC内インスタンスなど)
- 外部ツール連携: Terragrunt含め、豊富な連携機能あり
Spacelift
概要
- IaCのためのCI/CDプラットフォーム
特徴
- Terraformだけでなく、さまざまなIaCツールを実行
- 複数のプロジェクトの依存関係設定やグループ管理機能
- OSSを利用したPolicy管理
選定要件
- セットアップ: Spacelift のGUIコンソールから数クリック
- 実行権限管理: PolicyAsCodeで管理
- 実行環境: Spaceliftが提供する WorkerNode の docker container 上で実行
- 外部ツール連携: 外部ツールとの連携が柔軟
GithubActions
概要
- Github が提供するCI/CDプラットフォーム
特徴
- yamlファイルをベースにした Workflow
- リアルタイムのログ機能
- 堅牢なSecret管理
選定要件
- セットアップ: ワークフローファイル追加, AWS権限準備, など
- 実行権限管理:
- 基本誰でも任意のタイミングで実行可能
- GithubActions に特化した権限機能はなし
- リポジトリ周りの権限を調整すれば制御可能
- 実行環境: GithubActionsインフラ(Workflow実行のたびにTerraform周りの構築が必要)
- 外部ツール連携: 自前で構築すれば可能
最後に
今回の調査結果は以上になります。
さまざまなツールを比較した結果、今回の選定要件に基づいた場合は Spacelift がかなり良さそうだったので、「Spacelift を実際に使ってみてどうだったか」についてもその内どこかで共有したいと思っています。
ご精読いただきありがとうございました。
Discussion