🚀

Terraform入門】インフラ自動化ツールの基本と使い方

2024/05/27に公開

■ はじめに

近年、クラウド時代の到来とともにインフラ構築の自動化が注目を集めています。その中でもHashiCorp社のTerraformは、コード化によるインフラ管理の実現で人気の高いオープンソースツールです。この記事では、Terraformの基本概念から使い方までを解説します。

■ Terraformとは何か

Terraformは、インフラリソースのプロビジョニングを宣言的に記述し管理するためのツールです。AWS、Azure、GCPなどマルチクラウド環境に対応しており、コードによってインフラ構成を定義します。これにより、インフラ構築の自動化とバージョン管理が可能になります。

■ Terraformの基本概念

Terraformは以下のような基本概念で成り立っています。

  • Provider:各クラウドプロバイダやサービスとの連携を行うプラグイン
  • Resource:管理対象となるインフラリソース(VM、ネットワーク、ストレージなど)
  • Variables:リソースで使う変数の定義
  • Data Source:参照専用の情報源
  • Module:再利用可能なリソースのセット
  • State:構築したリソースの状態管理用ファイル

コードはHCL(HashiCorp Configuration Language)というTerraform専用の記述言語を使います。

■ Terraformのインストールと環境構築

TerraformはWindows、macOS、Linuxで動作します。各OSごとにバイナリをダウンロードしてパスを通すだけでセットアップ完了です。クラウドのアクセスキーは環境変数や別ファイルで管理します。エディタはVS CodeにTerraformプラグインを導入すると便利です。

■ Terraformの使い方

実際にTerraformを使ってインフラ構築を進めていきます。

  1. プロジェクトフォルダ内でterraform initを実行し、必要なプロバイダをダウンロードする。プロバイダ追加時は再実行が必要。
  2. *.tfファイルにHCLでリソース定義を記述する。変数はvariables.tfterraform.tfvarsに切り出すのが一般的。
  3. terraform planで実行計画を確認し、変更内容をチェックする。
  4. terraform applyを実行し、インフラをデプロイする。
  5. terraform destroyでリソースを削除できる。

State(terraform.tfstate)は運用フェーズではバックエンドを使ってリモートに保存・管理するのが推奨されます。

■AWS上での活用例
AWSを使った一連の流れを見てみましょう。VPC、サブネット、インターネットゲートウェイ、セキュリティグループ、EC2インスタンスを構築し、WebサーバーをデプロイするユースケースをTerraformで実装します。

provider "aws" {
  region = "us-east-1"
}

data "aws_ami" "ubuntu" {
  most_recent = true
  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }
}

# VPC
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

# Public Subnet 
resource "aws_subnet" "public_1" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"
}

# Internet Gateway
resource "aws_internet_gateway" "main" {
  vpc_id = aws_vpc.main.id  
}

# EC2 Instance
resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"
  subnet_id     = aws_subnet.public_1.id

  user_data = <<EOF
    #!/bin/bash
    sudo apt update
    sudo apt install -y apache2
    sudo systemctl start apache2
    sudo systemctl enable apache2
  EOF
}

AMIはデータソースを使って動的に取得し、user_dataでApacheの自動起動設定も追加しました。コードを記述したらterraform applyを実行すれば、AWS上にインフラが構築されます。

■ さいごに

この記事ではTerraformの基本と使い方について解説しました。インフラのコード化は運用の効率化とミス防止に大きく貢献します。実際のプロジェクトではモジュール化による再利用やCI/CDパイプラインとの連携など、より実践的なスキルが求められます。ここで培った知識を生かし、学習を深めていきましょう。

Discussion