はじめに:Terraformとは?#
TerraformはHashiCorp社が開発したオープンソースのInfrastructure as Code(IaC)ツール。
サーバ、ネットワーク、データベースなどのインフラをコードで定義し、自動的に構築・変更・バージョン管理できる。
TerraformはIaCツールの中でどこに位置するか#
IaCツールは大きく5つに分類される
| 分類 | 主な用途 | 代表例 |
|---|---|---|
| アドホックなスクリプト | シンプルな自動化 | Bash, Python |
| 設定管理ツール | 既存サーバの設定 | Ansible, Chef |
| サーバテンプレーティング | イメージからサーバ構築 | Docker, Packer |
| オーケストレーション | コンテナ管理 | Kubernetes |
| プロビジョニングツール | インフラ全体の作成 | Terraform, CloudFormation |
Terraformはプロビジョニングツールに分類される。
サーバ「上」に何かをインストールするのではなく、サーバ「自体」を作成するツール。
Terraformの特徴#
動作の仕組み#
TerraformはGo言語で書かれたOSS。
各端末のterraformバイナリから、AWSやAzureなどのクラウドプロバイダへAPIコールして動作する。
他のIaCツールとの違い#
| 比較軸 | Terraform | Ansible | CloudFormation |
|---|---|---|---|
| ツール種別 | プロビジョニング | 設定管理 | プロビジョニング |
| インフラの扱い | イミュータブル | ミュータブル | イミュータブル |
| 言語スタイル | 宣言型 | 手続き型/宣言型 | 宣言型 |
| 言語 | HCL(DSL) | YAML | JSON/YAML |
| マスタサーバ | 不要 | 不要 | 不要(AWS管理) |
| エージェント | 不要 | 不要 | 不要 |
| マルチクラウド | ◯ | ◯ | ✕(AWS専用) |
Terraformを選ぶ理由#
- エージェントレス:クラウドプロバイダのAPIを直接呼び出すため、各サーバにエージェントをインストールする必要がない
- マスタレス:マスタサーバの運用・メンテナンスが不要
- 宣言型言語:「こうなってほしい」を書くだけで、Terraformが差分を計算して適用してくれる
- マルチクラウド対応:AWS、Azure、GCPなど複数のプロバイダを同じ言語で管理できる
実際の使われ方#
Terraformは単体で使うこともあるが、他のツールと組み合わせることが多い:
- Packer + Terraform:Packerでサーバイメージを作成 → Terraformでそのイメージを使ってインフラ構築
- Docker + Kubernetes + Terraform:Terraformでインフラ構築(K8sクラスタ含む) → Kubernetesでコンテナ管理
まとめ#
- Terraformはインフラをコードで管理するプロビジョニングツール
- 宣言型・マスタレス・エージェントレスという特徴を持つ
- クラウドプロバイダのAPIを直接呼び出すシンプルな仕組み
- 他のIaCツール(Docker、Kubernetesなど)と組み合わせて使われることが多い
参考資料#
- 詳解 Terraform 第3版 ―Infrastructure as Codeを実現する
- 著者:Yevgeniy Brikman
- 訳者:松浦 隼人
- 出版社:オライリージャパン
- 出版年:2023年