Infrastructure as Code (IaC) 設定ガイド
Infrastructure as Code (IaC) は、コンピューティングリソースの管理とプロビジョニングの方法を根本から変えました。手動での設定ではなく、コードを使用して環境を定義することで、一貫性、スケーラビリティ、および再現性を確保できます。このガイドでは、最も人気のある IaC ツール(Terraform、Ansible、Vagrant、Pulumi)の必須テンプレートを提供します。
1. Terraform 設定テンプレート
Terraform は、クラウドインフラストラクチャを構築するための業界標準ツールです。HCL (HashiCorp Configuration Language) を使用してリソースを定義します。
Terraform main.tf テンプレート
main.tf ファイルは、主要なリソースを定義する場所です。一般的な terraform main.tf template には、インスタンス、ネットワーク、ストレージのリソースブロックが含まれます。
# terraform main.tf テンプレート例
resource "aws_instance" "web_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "Web-Server-01"
}
}
resource "aws_vpc" "main_vpc" {
cidr_block = "10.0.0.0/16"
}
Terraform Provider 設定 (Provider Config)
terraform provider config ブロックは、Terraform がどのクラウドプロバイダー(AWS、Azure、GCP など)を使用するか、および認証方法を指示します。
# terraform provider 設定
provider "aws" {
region = "ap-northeast-1"
# 認証は通常、環境変数または AWS CLI プロファイル経由で行われます
}
provider "google" {
project = "my-project-id"
region = "asia-northeast1"
}
Terraform Backend 設定
terraform backend config は、Terraform が状態ファイル(state file)をどこに保存するかを決定します。チーム開発では、S3 や GCS などのリモートバックエンドを使用することが不可欠です。
# terraform backend 設定
terraform {
backend "s3" {
bucket = "my-terraform-state-bucket"
key = "prod/terraform.tfstate"
region = "ap-northeast-1"
encrypt = true
dynamodb_table = "terraform-lock"
}
}
2. Ansible プレイブックとインベントリ
Terraform がインフラのプロビジョニングを行うのに対し、Ansible は構成管理やアプリケーションのデプロイに優れています。
Ansible Playbook テンプレート
ansible playbook template は、ホストのセットに対して実行されるタスクを定義します。
---
# ansible playbook テンプレート
- name: Web サーバーの設定
hosts: webservers
become: yes
tasks:
- name: Apache がインストールされていることを確認
apt:
name: apache2
state: present
- name: Apache サービスを起動
service:
name: apache2
state: started
enabled: yes
- name: index.html をコピー
copy:
src: files/index.html
dest: /var/www/html/index.html
Ansible Inventory ファイル
ansible inventory file は、Ansible が管理するホストとホストグループをリストします。
# ansible inventory ファイル (INI 形式)
[webservers]
192.168.1.10
192.168.1.11
[dbservers]
db.example.com ansible_user=admin
[all:vars]
ansible_python_interpreter=/usr/bin/python3
3. Vagrant と Pulumi の設定
ローカル開発やモダンなプログラムによる IaC には、Vagrant と Pulumi が不可欠です。
Vagrantfile テンプレートと例
Vagrantfile template は、仮想開発環境の定義と構成に使用されます。
# Vagrantfile の例
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
Pulumi 設定 (Pulumi Config)
Pulumi config を使用すると、TypeScript、Python、Go などの慣れ親しんだプログラミング言語を使用してインフラを管理できます。
// Pulumi 設定例 (TypeScript)
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const size = "t2.micro";
const ami = aws.ec2.getAmi({
filters: [{ name: "name", values: ["amzn-ami-hvm-*"] }],
owners: ["137112412989"], // Amazon Linux のオーナー ID
mostRecent: true,
}).then(ami => ami.id);
const server = new aws.ec2.Instance("web-server", {
instanceType: size,
ami: ami,
});
export const publicIp = server.publicIp;
4. よくある質問 (FAQ)
Q: Terraform で "provider configuration not found" エラーが出るのはなぜですか?
A: 通常、新しいプロバイダーを追加した後に terraform init を実行していないか、.tf ファイルにプロバイダーブロックが欠落している場合に発生します。特定のバージョンを使用している場合は、required_providers ブロックを確認してください。
Q: "ansible unreachable" エラーを修正するにはどうすればよいですか?
A: ansible inventory file をチェックして、IP アドレスやホスト名が正しいか確認してください。手動で SSH 接続を確認し、SSH キーがエージェントに追加されているか、インベントリで指定されているかを確認してください。
Q: Terraform と Pulumi の違いは何ですか?
A: Terraform は独自ドメイン言語の HCL を使用しますが、Pulumi は標準的なプログラミング言語を使用します。Pulumi は複雑なロジックに対して柔軟性がありますが、Terraform はより大きなエコシステムとコミュニティを持っています。
Q: Vagrant はどのような時に使うべきですか?
A: 本番環境に近い、一貫性があり再現可能なローカル開発環境が必要な場合(例:ラップトップ上の VM を使用する場合)に Vagrant を使用してください。
結論
IaC 設定テンプレートをマスターすることは、モダンで堅牢なインフラストラクチャを構築するための鍵となります。プロビジョニングに Terraform を、構成管理に Ansible を、あるいはコード駆動型のクラウド管理に Pulumi を使用する場合でも、これらのテンプレートは DevOps の旅を始めるための強固な基盤となります。
JSON や YAML ファイルのフォーマットでお困りですか? Tool3M にアクセスして、強力な開発者ツールキットをご活用ください。