IaC (Infrastructure as Code)
IaC とは何か
Section titled “IaC とは何か”IaC(Infrastructure as Code) とは、
「インフラの設定や構成を コードとして管理する 手法」です。
本来 GUI や手作業で設定する部分をすべてコード化することで、
- 誰でも同じ構成を再現できる
- 変更履歴を Git で管理できる
- 手作業のミスを防げる
- 自動化しやすい
といった利点があります。
JIZI のインフラ運用では Terraform と Ansible の両方 を使い分けながら IaC を実現しています。
Terraform の役割(クラウドサービスの管理)
Section titled “Terraform の役割(クラウドサービスの管理)”Terraform は クラウドサービスの設定を管理する IaC ツール です。
JIZI では主に以下の構成を Terraform で管理しています:
- Cloudflare(DNS, Access, KV, R2, D1…)
- AWS(SES, IAM)
- Wasabi(S3互換)
- Cloudflare Email Routing などの外部サービス
Terraform は “API を持つ外部サービスの設定管理” に強いのが特徴です。
特に JIZI の場合:
- DNS レコード
- セキュリティ設定(Access)
- ストレージ・メール送信の構成
- ドメイン認証設定(SPF/DKIM 等)
など、「人間の手で触ると事故りやすいもの」をすべてコード化しています。
Ansible の役割(サーバー内部の管理)
Section titled “Ansible の役割(サーバー内部の管理)”一方で Ansible は、 「OS やサーバー内部の設定を自動化するツール」です。
JIZI では VPS(仮想サーバー)の構築・設定 に Ansible を使っています。
Ansible が担当するもの:
- パッケージのインストール
- Docker / nginx / certbot の設定
- サービスの起動・再起動
- ファイル配置
- ユーザー管理
- セキュリティ設定(ファイアウォールなど)
Terraform では管理できない、
“サーバーの中身” を Ansible がコントロールします。
Terraform と Ansible の違い
Section titled “Terraform と Ansible の違い”| 項目 | Terraform | Ansible |
|---|---|---|
| 管理対象 | クラウドリソース(外部サービス) | サーバー内部の設定 |
| 実行モデル | 宣言的(Stateに基づく) | 手続き的(Playbook通りに実行) |
| 適しているもの | DNS / ストレージ / メール / CDN など | VPS設定 / パッケージ管理 / デーモン制御 |
| 状態管理 | tfstate で構成を保持 | 基本的には状態なし(idempotent) |
| JIZI での用途 | Cloudflare, AWS, Wasabi, SES… | GROWI / CodiMD / bot / nginx など |
GitOps を使用したインフラ管理の自動化
Section titled “GitOps を使用したインフラ管理の自動化”IaC は「インフラをコードとして扱う」という考え方ですが、
それを日々の運用で破綻させないために必要なのが GitOps です。
GitOps は簡単に言えば、
“インフラの状態はすべて Git によって決まる”
という運用ルールです。
もう少し抽象的に整理すると、以下の 3 つが本質になります。
1. 変更はすべて Pull Request で行う
Section titled “1. 変更はすべて Pull Request で行う”GUI で直接設定を変えたり、サーバーにログインして手作業で編集するのではなく、
インフラ変更は必ずコードとして書き、そのコードを Pull Request で提出する。
これにより:
- 変更の意図が明確になる
- 他のメンバーがレビューできる
- 設定のズレ(“誰かがこっそり変えた”問題)が起きない
2. Git が「正しい状態」を表す唯一の場所になる
Section titled “2. Git が「正しい状態」を表す唯一の場所になる”Terraform や Ansible が実際の環境をどう構築すべきかは、
Git に置かれているコードが決める。
このおかげで、
- 再現性のあるインフラ構築
- 安全なロールバック
- チーム運用でも整合性のある構成管理
ができるようになります。
3. 自動化された仕組みがインフラを更新する
Section titled “3. 自動化された仕組みがインフラを更新する”Git にコードがマージされたら、
人間ではなく 自動化された仕組み(CI/CD)がインフラを更新する。
ポイントは:
- 人が直接「apply」したり「設定を触る」必要がない
- “思わぬ設定変更” が起こらず安全
- チームが大きくなっても運用ルールが崩れない
ということ。
- クラウドインフラの設定管理には Terraform を用いる
- VPS の設定管理には Ansible を用いる
- IaC の設定ファイルは git で管理する(GitOps)
実際のリポジトリは
にあります!