クラウド環境の手動構築経験があるインフラエンジニアに向けて、Terraformの概要とメリットをまとめました。
1. Terraformとは?
Terraformは、HashiCorp社が提供するオープンソースのIaC(Infrastructure as Code)ツールです。
これまでGCPのGoogle Cloud Consoleなどで手動で行っていたサーバー構築やネットワーク設定を、コード(HCLという専用言語)で定義し、自動的に構築・管理できるようにしてくれます。
2. 手動構築の課題とTerraformのメリット
これまでの手動構築とTerraformを用いた構築の違いを見てみましょう。
手動構築でよくある課題
- 手順書が古くなる:構築後に設定を変更した際、Excel等の手順書を更新し忘れて現状の構成と合わなくなる。
- ヒューマンエラー:手作業のため、設定漏れやタイプミスなどのミスが起こりやすい。
- 環境の複製が大変:本番環境と全く同じ構成の検証環境をもう1つ作るのに、多大な手間と時間がかかる。
Terraformを導入するメリット
| メリット | 説明 |
|---|---|
| インフラのコード化(IaC) | 設定内容がすべてコードに残るため、常に最新の手順書・設計書として機能する |
| 再現性の向上 | コードを実行するだけで、何度でも全く同じ環境を構築できる(検証環境の構築が容易) |
| バージョン管理が可能 | Gitなどのバージョン管理システムと組み合わせることで、「いつ・誰が・何を」変更したか履歴を追える |
| レビューの導入 | 変更を加える前に、チームメンバーにコードのレビュー(Pull Requestなど)をしてもらえる |
3. Terraformの基本的な仕組み
Terraformでは、主に以下のファイルや状態を意識して管理します。
- tfファイル (
.tf):インフラの構成を記述するコードファイル。 - Stateファイル (
.tfstate):Terraformが認識している「現在の実際のインフラ構成状態」を記録したファイル。
実行の流れはシンプルです。
terraform init:初期化(必要なプラグインなどのダウンロード)terraform plan:実行計画の確認(コードの変更によって実際にどこが変わるか事前にチェックできる)terraform apply:実際のインフラへの適用(リソースの作成・変更・削除)
特に terraform plan で「実行前に差分(何が作成され、何が削除されるか)を確認できる」のは、手動操作にはない安心感があります。
4. どのようなコードを書くのか?
GCP(Google Cloud)でネットワークと仮想サーバー(Compute Engine)を作成するコードの例です。
プロバイダーの設定
まず、どのクラウドを利用するか(今回はGCP)と、対象のプロジェクトやリージョンを指定します。
provider.tf
provider "google" {
project = "my-gcp-project-id"
region = "asia-northeast1"
zone = "asia-northeast1-a"
}
VPCネットワークとサブネットの作成
次に、独自のVPCネットワークと、その中に配置するサブネットを定義します。
network.tf
# VPCネットワークの作成
resource "google_compute_network" "vpc_network" {
name = "my-custom-network"
auto_create_subnetworks = false
}
# サブネットの作成
resource "google_compute_subnetwork" "subnet" {
name = "my-subnet"
ip_cidr_range = "10.0.1.0/24"
region = "asia-northeast1"
network = google_compute_network.vpc_network.id
}
Compute Engine(VMインスタンス)の作成
最後に、作成したネットワーク上に仮想サーバーを立ち上げます。
compute.tf
resource "google_compute_instance" "default" {
name = "my-web-server"
machine_type = "e2-micro"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = google_compute_network.vpc_network.id
subnetwork = google_compute_subnetwork.subnet.id
# 外部IP(パブリックIP)を割り当てる設定
access_config {
}
}
}
たったこれだけの記述で、指定したプロジェクトにネットワークとサーバーが作成されます。Google Cloud Consoleの画面上で何度もクリックして設定するよりも、非常にシンプルで全体の構成がひと目で分かります。
今回はここまでです。