🗂

Terraform向けCI/CDツールを調査してみた

2023/02/24に公開

はじめに

どうも、ポートで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