1. IaC(Infrastructure as Code)とは?
1.1. 概要
IaC(Infrastructure as Code)は、サーバーやネットワークなどのインフラをコードとして管理する手法です。手動でインフラを構築するのではなく、設定ファイル(YAML、JSON、HCLなど)を用いて、インフラを自動的にプロビジョニングできます。
1.2. IaCのメリット
メリット | 説明 |
---|---|
再現性の確保 | 同じコードを実行すれば、常に同じインフラ環境が構築できる |
自動化 | 手作業を減らし、人的ミスを防ぐ |
バージョン管理 | Gitなどのバージョン管理システムでインフラの変更履歴を追跡可能 |
スケーラビリティ | サーバーやリソースの増減を簡単に行える |
ドキュメントとしての活用 | インフラ構成がコードとして残るため、設計の理解がしやすい |
2. Terraformの基本
2.1. Terraformとは?
Terraformは、HashiCorpが開発したオープンソースのIaCツールです。クラウド環境(AWS, GCP, Azureなど)やオンプレミス環境のインフラを宣言的に構築・管理できます。
2.2. Terraformの特徴
- マルチクラウド対応(AWS, GCP, Azure, Kubernetes など)
- 宣言型(Declarative):最終的なインフラの状態をコードで定義し、それに合わせてリソースを作成
-
状態管理(State Management):
terraform.tfstate
でリソースの状態を記録 - 変更プラン(Plan)と適用(Apply):インフラ変更前にプレビューが可能
2.3. Terraformの基本的な使い方
① Terraform のインストール
# Linux/macOS
brew install terraform
# Windows(Chocolatey)
choco install terraform
② Terraform の基本コマンド
コマンド | 説明 |
---|---|
terraform init |
初期化(プロバイダーのダウンロードなど) |
terraform plan |
変更プランの確認(実行前のチェック) |
terraform apply |
実際にインフラを構築 |
terraform destroy |
すべてのリソースを削除 |
③ Terraform 設定ファイル(HCL)
Terraformでは、HCL(HashiCorp Configuration Language)を用いて、インフラを定義します。
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
④ TerraformでAWSのEC2を作成
terraform init # 初期化
terraform plan # 変更プランの確認
terraform apply # EC2インスタンス作成
3. Helmの基本
3.1. Helmとは?
Helmは、Kubernetesのパッケージマネージャーです。Kubernetesのマニフェスト(YAMLファイル)をテンプレート化し、簡単に管理・デプロイできます。
3.2. Helmの特徴
- パッケージ管理(Helm Chart)でKubernetesリソースを統一管理
- バージョン管理ができ、ロールバック(戻し作業)も簡単
- 環境ごとのカスタマイズ(開発環境・本番環境など)
- CI/CDとの統合が容易
3.3. Helmの基本的な使い方
① Helm のインストール
# macOS/Linux
brew install helm
# Windows(Chocolatey)
choco install kubernetes-helm
② Helm の基本コマンド
コマンド | 説明 |
---|---|
helm repo add <リポジトリ名> <URL> |
Helmリポジトリの追加 |
helm search repo <キーワード> |
Helmリポジトリ内を検索 |
helm install <リリース名> <チャート名> |
KubernetesにHelm Chartをデプロイ |
helm upgrade <リリース名> <チャート名> |
既存のリリースを更新 |
helm rollback <リリース名> <リビジョン番号> |
過去のバージョンに戻す |
helm uninstall <リリース名> |
Helmリリースを削除 |
③ Helm Chart の作成
helm create mychart
このコマンドを実行すると、以下のようなディレクトリ構成が作成されます。
mychart/
Chart.yaml # チャートのメタデータ
values.yaml # 変数のデフォルト値
templates/ # Kubernetesのマニフェスト(YAMLのテンプレート)
④ Helm を使って Nginx をデプロイ
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-nginx bitnami/nginx
⑤ Helm でアプリケーションのバージョン管理
helm upgrade my-nginx bitnami/nginx --set service.type=LoadBalancer
4. TerraformとHelmの違い
項目 | Terraform | Helm |
---|---|---|
用途 | クラウドインフラ管理(AWS, GCP, Azure) | Kubernetesアプリケーション管理 |
言語 | HCL(Terraform言語) | YAML(テンプレート可能) |
対象 | VM, ネットワーク, ストレージ | KubernetesのPod, Service, ConfigMap |
バージョン管理 |
.tfstate による管理 |
Helm Chartのバージョン管理 |
5. まとめ
TerraformとHelmは、IaCの異なる用途で活躍するツールです。
- Terraform は、AWSやGCPのようなクラウド環境のインフラをコードで管理
- Helm は、Kubernetes環境におけるアプリケーションのデプロイと管理を簡単にする
どちらもMLOpsやクラウド環境の運用で重要な役割を果たします。実際に環境を作成し、TerraformとHelmを活用してインフラをコード化してみましょう!