「IaCって最近よく聞くけど何?」「TerraformとかAnsibleって難しそう…」
インフラエンジニアの求人を見ていると、「IaC経験者歓迎」という文言を見かけることが増えていませんか?IaC(Infrastructure as Code)は、現代のインフラ構築に欠かせない考え方になっています。
この記事では、IaCとは何か、なぜ重要なのか、代表的なツールであるTerraformとAnsibleについて、初心者向けにわかりやすく解説します。
IaC(Infrastructure as Code)とは?
一言で言うと「インフラをコードで管理する」こと
IaCは、「Infrastructure as Code(インフラストラクチャ・アズ・コード)」の略で、日本語にすると「コードとしてのインフラ」という意味です。
従来、サーバーの構築やネットワークの設定は、管理者が手作業で行っていました。IaCでは、これらの作業をコード(プログラム)として記述し、自動で実行できるようにします。
従来の方法とIaCの違い
| 項目 | 従来の方法(手作業) | IaC |
|---|---|---|
| 作業方法 | GUIでクリック、手順書を見ながら | コードを書いて実行 |
| 再現性 | 人によってブレが出る | 誰がやっても同じ結果 |
| 作業時間 | 環境ごとに時間がかかる | コード実行だけで完了 |
| 記録 | 手順書、Excelで管理 | コード自体が記録になる |
| バージョン管理 | 難しい | Gitで管理できる |
身近な例で考えてみよう
料理に例えると、わかりやすいかもしれません。
- 従来の方法:毎回「塩は…このくらいかな?」と目分量で作る → 味がブレる
- IaC:レシピ(コード)通りに作る → いつでも同じ味が再現できる
IaCは、インフラ構築の「レシピ」を作成するようなものです。一度レシピを書いておけば、誰でも同じ環境を作れるようになります。
なぜIaCが重要なのか?
IaCが注目される背景には、いくつかの理由があります。
1. クラウド時代に対応するため
AWSやAzureなどのクラウドでは、サーバーを数分で作成・削除できます。手作業で管理していたら追いつきません。IaCなら、大量のサーバーを短時間で自動構築できます。
2. ヒューマンエラーを防ぐため
手作業では、どうしてもミスが発生します。「設定を1つ忘れた」「手順を飛ばした」など…。IaCでは、コードで書いた通りに実行されるので、このようなミスを防げます。
3. 環境の一貫性を保つため
開発環境、検証環境、本番環境…と複数の環境を管理することは珍しくありません。IaCなら、同じコードから同じ環境を何度でも作成できます。「本番だけ設定が違った」という問題も防げます。
4. 変更履歴を管理するため
IaCのコードはGitで管理できます。「誰が」「いつ」「何を変更したか」が記録され、問題が起きたときに過去の状態に戻すことも簡単です。
代表的なIaCツール
IaCを実現するためのツールはいくつかあります。代表的なものを紹介します。
| ツール名 | 主な用途 | 特徴 |
|---|---|---|
| Terraform | インフラの構築 | クラウドリソースの作成・管理 |
| Ansible | サーバーの設定 | ソフトウェアのインストールや設定 |
| CloudFormation | AWSインフラの構築 | AWS専用のIaCツール |
| Pulumi | インフラの構築 | 一般的なプログラミング言語で記述 |
この中でも特によく使われるTerraformとAnsibleについて詳しく見ていきましょう。
Terraformとは?
Terraformの概要
Terraform(テラフォーム)は、HashiCorp社が開発したインフラ構築のためのIaCツールです。
主にクラウド上のリソース(サーバー、ネットワーク、データベースなど)をコードで定義して自動作成するのに使います。
Terraformでできること
- AWSでEC2インスタンス(サーバー)を作成
- VPC(仮想ネットワーク)を構築
- セキュリティグループ(ファイアウォール)を設定
- RDS(データベース)を作成
- …など、クラウドでできることはほぼすべて
Terraformのコード例
実際のコードを見てみましょう。これはAWSでEC2インスタンスを作成する例です。
# AWSプロバイダーの設定
provider "aws" {
region = "ap-northeast-1" # 東京リージョン
}
# EC2インスタンスの作成
resource "aws_instance" "web_server" {
ami = "ami-0123456789abcdef0"
instance_type = "t2.micro"
tags = {
Name = "WebServer"
}
}
このコードを実行すると、AWSの東京リージョンにt2.microサイズのサーバーが自動で作成されます。
Terraformの基本コマンド
| コマンド | 説明 |
|---|---|
| terraform init | 初期化(最初に1回実行) |
| terraform plan | 実行計画を確認(何が作られるか) |
| terraform apply | 実際にインフラを作成 |
| terraform destroy | 作成したインフラを削除 |
Ansibleとは?
Ansibleの概要
Ansible(アンシブル)は、Red Hat社が開発したサーバー設定・管理のためのIaCツールです。
Terraformが「サーバーを作る」のに対し、Ansibleは「サーバーの中を設定する」のに使います。
Ansibleでできること
- ソフトウェアのインストール(Apache、Nginx、MySQLなど)
- 設定ファイルの配置・編集
- サービスの起動・停止
- ユーザーアカウントの作成
- 複数サーバーへの一括設定
Ansibleの特徴
| 特徴 | 説明 |
|---|---|
| エージェントレス | 対象サーバーに特別なソフト不要(SSH接続のみ) |
| YAML形式 | 読みやすいテキスト形式でコードを記述 |
| 冪等性(べきとうせい) | 何度実行しても同じ結果になる |
「冪等性」は少し難しい言葉ですが、「何回実行しても結果が変わらない」という性質です。例えば、「Apacheをインストールする」というタスクは、すでにインストール済みなら何もしません。
Ansibleのコード例(Playbook)
Ansibleでは、やりたいことをPlaybook(プレイブック)というファイルに書きます。
---
- name: Webサーバーのセットアップ
hosts: webservers
become: yes # root権限で実行
tasks:
# Apacheのインストール
- name: Apacheをインストール
yum:
name: httpd
state: present
# Apacheの起動と自動起動設定
- name: Apacheを起動
service:
name: httpd
state: started
enabled: yes
このPlaybookを実行すると、対象のサーバーにApacheがインストールされ、自動で起動するようになります。
TerraformとAnsibleの使い分け
「どっちを使えばいいの?」と思うかもしれませんが、実は役割が違うので、両方使うことが多いです。
| ツール | 役割 | 例え |
|---|---|---|
| Terraform | インフラ(箱)を作る | 家を建てる |
| Ansible | 設定(中身)を整える | 家具を配置する |
一般的なワークフローは以下の通りです。
- Terraformでサーバーやネットワークを作成
- Ansibleで作成したサーバーにソフトウェアをインストール・設定
このように組み合わせることで、インフラ構築を完全に自動化できます。
IaCを学ぶためのステップ
「IaCを勉強してみたい!」という方に、おすすめの学習ステップを紹介します。
Step1:Linuxの基本を押さえる
IaCツールを使うには、Linuxの基本知識が必要です。まずはLinuxコマンドに慣れておきましょう。
Step2:クラウドの基本を学ぶ
AWSやAzureの基本的な概念(EC2、VPC、IAMなど)を理解しておくと、Terraformの学習がスムーズです。
Step3:まずはAnsibleから始める
Ansibleは比較的シンプルで、学習コストが低めです。自分のPC(WSLなど)でも試しやすいので、IaC入門におすすめです。
Step4:Terraformに挑戦
クラウドのアカウントを用意して(無料枠でOK)、実際にリソースを作成してみましょう。
おすすめの学習リソース
- 公式ドキュメント:TerraformもAnsibleも、公式ドキュメントが充実
- ハンズオン形式の書籍:実際に手を動かしながら学べる本
- Udemy等の動画教材:映像で学びたい人向け
まとめ
この記事のポイントを整理します。
| 項目 | 内容 |
|---|---|
| IaCとは | インフラをコードで管理する手法 |
| メリット | 再現性、効率化、ヒューマンエラー防止、履歴管理 |
| Terraform | クラウドリソースの作成・管理 |
| Ansible | サーバー内の設定・管理 |
| 使い分け | Terraformで箱を作り、Ansibleで中身を設定 |
IaCは、現代のインフラエンジニアにとって必須スキルになりつつあります。最初は難しく感じるかもしれませんが、一度覚えれば作業効率が大幅にアップします。
まずは小さなところから試してみて、少しずつスキルを身につけていきましょう!