TerraformのCI/CDの整備
レビュー投稿日の情報になります
ソーシャルデータバンク株式会社 / 南波陽平
チームリーダー / SRE / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
最終更新日投稿日
ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|
11名〜50名 | 2024年5月 | B to B |
ツールの利用規模 | 11名〜50名 |
---|---|
ツールの利用開始時期 | 2024年5月 |
事業形態 | B to B |
アーキテクチャ

アーキテクチャの意図・工夫
- プロジェクトが複数あり今後さらなる増加が見込まれるため、Atlantis のサーバを専用のアカウントで管理してクロスアカウントアクセスで terraform を実行しています
- 1つの Atlantis サーバ / GitHub レポジトリで複数のプロジェクトへの terraform の実行を可能にしています
- ECS 上で Atlantis をセルフホストしています
- Atlantis 公式の terraform module で簡単に設定できます
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
- 各プロジェクト担当者がローカルで Terraform を実行していた
- コードの変更とインフラの変更が非同期で行われていた
- 実行履歴を遡ってみることができなかった
- 共通 module を変更すると、一つ一つのプロジェクトで
terraform apply
を実行する必要があった
- チームの人数とプロジェクトが増えてきた
- tfstate ファイルの競合管理を行う必要が出てきた
- プロジェクトが増えるにつれて、インフラ変更依頼も増えてきて、インフラの適用に明確な承認フローが必要になった
どのような状態を目指していたか
- GitHub 上のコードを Single Source of Truth (SSoT) として、AWS の構成を Infrastructure as Code (IaC)で管理できている
- GitHub 上の approve 状況に基づいて、インフラの適用が行われる
- 複数アカウントの AWS 構成を一つのレポジトリで管理できている
比較検討したサービス
- tfaction
- Terraform Cloud
- PipeCD
- FluxCD
比較した軸
- 安全性
- tfstate のロック機能を持つ
- レビュアー が approve しないと
terraform apply
できない - プルリクエスト内で
terraform apply
のやり直しが可能である
- 可視性
terraform plan
の実行履歴が見れる- tfstate のロック状態を見れる
- 独立性
- レポジトリ内で複数の tfstate を管理できる(プロジェクト毎に tfstate を管理したい)
- コスト
- プロジェクト数に比例しない
- コントロールプレーンの運用の工数が少ない
選定理由
- 上記の安全性/可視性/独立性を満たしている
- 特に、merge 時に
terraform apply
が実行されるのではなく、PR の conversation 内でterraform apply
で行うという点が Terraform の運用に適していた
- 特に、merge 時に
- セルフホスト用の terraform module で簡単にセルフホストが可能である
- コストは多数のリソース量に依存せずに Atlantis サーバのみに抑えることができる
導入の成果
改善したかった課題はどれくらい解決されたか
- 開発者のローカル環境で terraform の実行をする必要がなくなった
- terraform の実行のための強い権限は Atlantis サーバのみとなり、セキュリティが向上した
- プルリクエスト上で plan/apply の結果を確認し、コードのレビューを行えるようになった
- ローカルのplan結果を共有しながらレビューした従来の方法と比較して簡潔になった
導入時の苦労・悩み
- 複数のクロスアカウントへの対応
- tfstate 管理用の S3 と Terraform 実行用の IAM Role の作成と共通化
- ブランチ保護ルールの決定
- approved や mergeable のルールを設定してコマンドの誤実行を防いだ
導入に向けた社内への説明
上長・チームへの説明
- CI/CD の必要性
- プロジェクトの増加に伴ってインフラの変更依頼がチーム内外から多数寄せられるようになり、安全性の観点からインフラの CI/CD が必要であった
- 運用コストの低さ
- 社内で利用実績のないソフトウェアであったが、CNCF Sandbox で開発コミュニティが活発であった
- 簡単にセルフホストすることができ、従量課金ではない
活用方法
- 既存 AWS 構成の修正
- 新規プロジェクトの AWS 構築
よく使う機能
- Atlantis コマンドによる terraform コマンドの実行
terraform plan
結果のレビューterraform apply
エラーの修正- ブランチ保護ルールの設定
ツールの良い点
- コマンドが terraform 互換で、キャッチアップが少なくて済む
- PR 内で何度も
terraform apply
をやり直せる - GitHub のブランチ保護ルールなどに準じた実行制御が可能
ツールの課題点
- リソース視覚化などのリッチな GUI や機能(Drift Detection や Secret 管理など)は現状ない。
- セルフホストのため、運用工数が必要。
ツールを検討されている方へ
GitHub Actions の設定も不要で、セルフホストするインフラの CD ツールとしては、比較的簡単に運用できると思います。また、コマンドが Terraform 互換なので導入の敷居が低い一方で、複雑なワークフローの実装には向いていません。
記事について
この記事は、導入を担当していただいたインターン生の森瀬健太郎君との共著で作成しました。
ソーシャルデータバンク株式会社 / 南波陽平
チームリーダー / SRE / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
ソーシャルデータバンク株式会社 / 南波陽平
チームリーダー / SRE / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法