Terraformとは
- terraformはIacと呼ばれるツールの一種で、インフラの構成をソースコードとして管理できる機能
Terraform vs Ansible vs CloudFormation 比較表
Terraform、Ansible、CloudFormationは、どれもインフラの自動化に利用される強力なツールですが、それぞれに得意な領域と設計思想があります。
以下にその主な違いをまとめました。
項目 | Terraform | Ansible | AWS CloudFormation |
---|---|---|---|
主な役割 | インフラのプロビジョニング (箱を作る) |
サーバーの構成管理 (箱の中身を設定する) |
インフラのプロビジョニング (箱を作る) |
アプローチ |
宣言的 (あるべき姿を定義) |
命令的 (実行手順を定義) |
宣言的 (あるべき姿を定義) |
対応範囲 |
マルチクラウド (AWS, Azure, GCPなど) |
マルチプラットフォーム (クラウド/オンプレミス) |
AWS専用 |
構文 | HCL | YAML | YAML / JSON |
状態管理 | ユーザーが状態ファイル(.tfstate )を管理 |
ステートレス (状態を管理しない) |
AWSが状態を管理 |
得意なこと | 複数クラウド環境の構築・破棄 | OS内部の設定、アプリのデプロイ | AWS環境の構築・破棄 |
まとめ
- Terraform: マルチクラウド環境のインフラをコードで管理したい場合に最適。
- Ansible: 構築済みのサーバーに対して、ソフトウェアのインストールや設定変更を自動化したい場合に強力。
- CloudFormation: インフラがAWSで完結しており、AWSネイティブなIaCツールを使いたい場合に最適。
多くの場合、これらは競合するだけでなく、Terraformでインフラを構築し、Ansibleでそのインフラを構成するといった形で連携して使われます。
TerrafomでEC2構築
1)brewでterraformインストール
brew install terraform
terraform -v
2).tfファイルを作成して、下記のコードを反映
region = "ap-northeast-1" //東京リージョン
access_key = "******" //作成したアクセスキー
secret_key = "******" //作成したシークレットキー
}
// awsインスタンスの組み立て方は↓を参考
// https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance
resource "aws_instance" "iac-instance" {
ami = "ami-011bdd6d8e8705a3c"
instance_type = "t3.micro"
tags = {
Name = "test instance"
}
}
3)下記コマンドを叩き、定義ファイルを実行するにあたってterraformがAWSに接続するためのプラグインをインストールしてくれる。
terraform init
4)下記コマンドの叩き、事前にどんなリソースを作成できるのか確認できる。
terraform plan
また、terraform planを実行すると、Terraformは以下の3つを比較します。
① あなたが書いたコード(あるべき姿)
② .tfstateファイル(Terraformが認識している前回の姿)
③ 実際のAWS上のリソース(現在の姿)
この比較により、何を追加・変更・削除すべきかを判断します。このファイルがないと、毎回すべてのリソースをAWSに問い合わせる必要があり、また、どのリソースをTerraformが管理しているのか分からなくなります。
5)下記コマンドの叩き、実際に環境構築する。
terraform apply
6)下記のコマンド or EC2を立ち上げるソースをコメントアウトしてapplyコマンドで削除可能
terraform destroy
.tfstate
- インフラの現在の状態が記述されている
.lock.hcl
- プロバイダのバージョンを固定し、実行環境の差異をなくす
- 再現性の担保:
- プロバイダ(AWSプロバイダなど)は日々アップデートされます。もしこのファイルがないと、AさんのPCでinitしたときと、BさんのPCでinitしたときで、ダウンロードされるプロバイダのバージョンが異なってしまう可能性があります。
- チーム開発での一貫性:
- .terraform.lock.hclをGitなどのバージョン管理システムに含めることで、チームメンバー全員が全く同じバージョンのプロバイダを使うことが保証されます。これにより、「私の環境では動いたのに…」といった問題を未然に防ぎます。
- 再現性の担保:
provider
- Terraformと外部API(AWSなど)を繋ぐ「翻訳機」または「プラグイン」
- AWS、Azure、Google Cloudなど、各プラットフォームはそれぞれ独自のAPIを持っています。プロバイダは、これらの複雑なAPIの違いを吸収し、Terraformの統一された構文(HCL)で操作できるようにしてくれます。