エンジニアの皆さん、こんにちは。
インフラ構築の現場で「なぜTerraformとAnsibleを使い分けるのか?」という問いに、即座に「適材適所だから」と答えられるようになることは、プロへの第一歩です。
今日は、この最強のタッグを組み、あなたのインフラ運用を「手作業の苦行」から「コードによる芸術」へと昇華させるための極意を伝授します。
—
1. TerraformとAnsibleの「明確な役割分担」
多くの初心者が陥る罠は、Terraformで無理やりOSの中身をいじり、Ansibleで無理やりクラウドのアカウントを作ろうとすることです。
- Terraform (プロビジョニング): 「箱」を作るのが専門家。AWSのVPC、EC2インスタンス、RDSなど「インフラの土台」をAPI経由で構築します。「何が存在するか(状態)」を管理するのが仕事です。
- Ansible (構成管理): 「箱の中身」を整えるのが専門家。OSの設定、ミドルウェアのインストール、アプリケーションのデプロイ。「どうあるべきか(振る舞い)」を定義するのが仕事です。
結論: 「Terraformでサーバーを生み出し、Ansibleでそのサーバーに魂(ソフトウェア)を吹き込む」。これが、数千台規模を管理する現場でも通用する、揺るぎない黄金律です。
—
2. 環境構築:まずは「手」を動かそう
まずは両ツールをインストールしましょう。Mac/Linux環境を前提とします。
Terraform: [公式](https://www.terraform.io/downloads.html)からバイナリを取得するか、`brew install terraform`でインストール。
Ansible: `pip install ansible` または `brew install ansible` で完了です。
—
3. 【実践】TerraformでEC2を生み出し、AnsibleでSSH接続する
ここが一番のキモです。「どうやってTerraformが作ったサーバーのIPをAnsibleに教えるか?」を解決します。
ステップ1:TerraformでEC2を構築する
`main.tf` を作成します。
AWSプロバイダーの設定
provider “aws” {
region = “ap-northeast-1”
}
EC2インスタンスの定義
resource “aws_instance” “web_server” {
ami = “ami-0c3fd0f5d33134a76” # 東京リージョンのAmazon Linux 2023
instance_type = “t2.micro”
key_name = “my-key-pair” # 事前にAWSコンソールで作っておくこと
tags = { Name = “Terraform-Ansible-Demo” }
}
インスタンスのIPをファイルに出力する(Ansible連携の鍵!)
resource “local_file” “inventory” {
content = “[web]\n${aws_instance.web_server.public_ip} ansible_user=ec2-user ansible_ssh_private_key_file=./my-key.pem”
filename = “./inventory.ini”
}
このコードを実行し、`terraform apply` を叩けば、インフラが立ち上がると同時に、Ansible用の「在庫リスト(inventory.ini)」が自動生成されます。
ステップ2:AnsibleでOSをセットアップする
次に、サーバーにNginxをインストールする `playbook.yml` を書きます。
—
- name: Webサーバーを構築する
hosts: web
become: yes # sudo権限で実行
tasks:
- name: Nginxをインストール
yum:
name: nginx
state: present
- name: Nginxを起動
service:
name: nginx
state: started
enabled: yes
—
4. 連携の儀式(パイプラインの思想)
構築の仕上げは、以下のコマンドを連続で叩くだけです。
1. インフラの構築とinventory.iniの生成
terraform apply -auto-approve
2. 生成されたinventoryを使ってAnsibleを実行
ansible-playbook -i inventory.ini playbook.yml
これだけで、「まっさらなクラウド」から「Nginxが動くWebサーバー」までが数分で完成します。
—
5. 現場のプロからのアドバイス:冪等性(べきとうせい)を意識せよ
Ansibleを書く際、最も大切なのは「何度実行しても同じ結果になること」です。これを「冪等性」と呼びます。
例えば、`shell: yum install nginx` と書いてはいけません。これだと2回目に実行したときもインストールを試みてエラーになります。必ず `yum: name=nginx state=present` のような宣言的モジュールを使ってください。
最後に
TerraformとAnsibleを使いこなせば、あなたのインフラは「壊れても、また一瞬で再生できる」不死身の存在になります。
最初は複雑に見えるかもしれませんが、一度このパイプラインを組んでしまえば、毎日の面倒な環境構築から解放されます。「コードがすべてを物語る」この世界を、ぜひ楽しんでください。
何か詰まったら、いつでも戻ってきてくださいね。あなたのエンジニアライフを応援しています!