【入門編】TerraformとAnsibleの違いと連携術!インフラ構築から構成管理までのベストプラクティス – インフラ構成管理(IaC)活用バイブル

エンジニアの皆さん、こんにちは。

インフラ構築の現場で「なぜ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を使いこなせば、あなたのインフラは「壊れても、また一瞬で再生できる」不死身の存在になります。

最初は複雑に見えるかもしれませんが、一度このパイプラインを組んでしまえば、毎日の面倒な環境構築から解放されます。「コードがすべてを物語る」この世界を、ぜひ楽しんでください。

何か詰まったら、いつでも戻ってきてくださいね。あなたのエンジニアライフを応援しています!

タイトルとURLをコピーしました