Terraformとは
Terraformとは
Terraformは、HashiCorp社が開発したオープンソースのInfrastructure as Code (IaC) ツールです。コードを使ってクラウドやオンプレミスのインフラストラクチャを定義、プロビジョニング、管理することができます。
Infrastructure as Code (IaC) とは
Infrastructure as Code (IaC) は、インフラストラクチャの構成をコードとして記述し、バージョン管理や自動化を可能にするアプローチです。従来の手動でのインフラ構築と比較して、以下のような利点があります。
- 再現性: 同じコードから同じインフラを何度でも構築できます
- バージョン管理: Gitなどでインフラの変更履歴を管理できます
- 自動化: コードの実行により、インフラの構築・変更を自動化できます
- ドキュメント化: コード自体がインフラの設計書となります
Terraformの特徴
1. 宣言的な構文
Terraformは宣言的な構文を採用しています。「どのように構築するか」ではなく、「何を構築したいか」を記述します。
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
この例では、AWS EC2インスタンスの最終的な状態を宣言しています。Terraformが自動的に必要な手順を判断し、実行します。
2. マルチクラウド対応
Terraformは、AWS、Azure、Google Cloud、その他多数のクラウドプロバイダーやサービスに対応しています。単一のツールで複数のプラットフォームを管理できます。
- AWS (Amazon Web Services)
- Microsoft Azure
- Google Cloud Platform (GCP)
- Kubernetes
- その他1000以上のプロバイダー
3. 状態管理
Terraformは、管理しているインフラの現在の状態を「状態ファイル」として保持します。この状態ファイルにより、実際のインフラとコードの差分を検出し、必要な変更のみを適用できます。
4. 実行計画の確認
変更を適用する前に、Terraformは実行計画を生成します。これにより、どのような変更が行われるかを事前に確認できます。
terraform plan
このコマンドで、追加・変更・削除されるリソースを確認できます。
Terraformの基本的なワークフロー
Terraformを使用する際の基本的なワークフローは以下の通りです。
- Write(記述): インフラをコードとして記述します
- Plan(計画): 変更内容を確認します
- Apply(適用): 変更を実際のインフラに適用します
# 1. 初期化
terraform init
# 2. 実行計画の確認
terraform plan
# 3. 変更の適用
terraform apply
Terraformの構成要素
プロバイダー (Providers)
プロバイダーは、Terraformが特定のクラウドサービスやAPIと通信するためのプラグインです。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
リソース (Resources)
リソースは、管理したいインフラの構成要素です(例: EC2インスタンス、S3バケット、VPCなど)。
resource "aws_s3_bucket" "example" {
bucket = "my-terraform-bucket"
}
データソース (Data Sources)
データソースは、既存のインフラから情報を取得するために使用します。
data "aws_ami" "ubuntu" {
most_recent = true
owners = ["099720109477"]
}
変数 (Variables)
変数を使用することで、コードの再利用性を高めることができます。
variable "instance_type" {
description = "EC2 instance type"
type = string
default = "t2.micro"
}
次のステップ
Terraformの基本概念を理解したら、次は具体的なメリットと使用例について学びましょう。