Terraform チートシート - 有用なコマンドと例

すべての Terraform コマンドのリスト

目次

ここに、Terraformのチートシートがあります。これは、必須のコマンド、構成要素、リソース管理、モジュール、変数、ステートの処理、およびベストプラクティスが含まれています。

Terraformは、HashiCorpによって開発されたオープンソースのインフラストラクチャ・アス・コード(IaC)ツールです。このツールは、宣言型の構成ファイルを使用して、複数のクラウドプロバイダー(例:AWS、Azure、GCP)にわたるインフラストラクチャを定義およびプロビジョニングできます。Terraformの主な目的は、インフラストラクチャのプロビジョニングを自動化し、一貫性を確保し、手動のエラーを減らすことです。Terraformは、マルチクラウドモジュール型ステート駆動型のワークフローをサポートしており、現代のDevOps実践の中心的なツールとなっています。

学生がTerraformを使用している

Terraformの主な利点:

  • 宣言型構文: コードで望ましいインフラストラクチャの状態を定義できます。
  • プロバイダ非依存性: AWS、Azure、GCP、Kubernetesなど、さまざまなプロバイダで動作します。
  • ステート管理: インフラストラクチャの変更を追跡し、競合を回避します。

インストールとセットアップガイド

https://developer.hashicorp.com/terraform/tutorials#get-started

Terraformのインストールプロセスは非常に簡単です。

  • Linux (Ubuntu/Debian):

    wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
    sudo apt update && sudo apt install terraform
    
  • Windows (WSL):

    wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip
    unzip terraform.zip
    
  • macOS (Homebrew):

    brew install terraform
    

確認

terraform --version

Terraform CLI コマンド

ここにすべてのTerraformコマンドのリストがあります:

コマンド 説明
terraform init 新しいまたは既存のTerraform構成ディレクトリを初期化します
terraform validate 構成が有効かどうかを確認します
terraform plan 変更を適用せずに実行計画を表示します
terraform apply 望ましい状態に達するために必要な変更を適用します
terraform destroy Terraformで管理されているインフラストラクチャを破棄します
terraform fmt 標準形式に構成ファイルを再フォーマットします
terraform show 現在の状態または計画を表示します
terraform refresh 実際のインフラストラクチャで状態を更新します
terraform providers 構成で使用されているプロバイダを表示します
terraform graph リソースの依存関係をグラフとして可視化します
terraform workspace list 利用可能なすべてのワークスペースを一覧表示します
terraform workspace new 新しいワークスペースを作成します
terraform workspace select 指定されたワークスペースに切り替えます
terraform workspace show 現在のワークスペースの名前を表示します
terraform workspace delete 指定されたワークスペースを削除します
terraform output 状態ファイルからの出力値を表示します
terraform import 既存のリソースをTerraformにインポートします
terraform taint 次のapplyで再作成されるようにリソースをマークします
terraform untaint リソースを汚染解除します
terraform state list 状態ファイル内のリソースを一覧表示します
terraform state show 状態内の単一リソースの属性を表示します

構成の基本

ファイル拡張子

  • .tf: 主な構成ファイル(HCL構文)
  • .tfvars: 変数の値

Terraform ブロックの種類

  • プロバイダの例
    provider "aws" {
      region = "us-east-1"
    }
    
  • リソースの例
    resource "aws_instance" "web" {
      ami           = "ami-0abcdef"
      instance_type = "t2.micro"
    }
    
  • 変数の例
    variable "instance_count" {
      type    = number
      default = 2
    }
    
  • 出力の例
    output "instance_ip" {
      value = aws_instance.web.public_ip
    }
    
  • モジュールの例
    module "vpc" {
      source = "./modules/vpc"
      cidr_block = var.vpc_cidr
    }
    

変数の使用

  • 変数の宣言
    variable "region" {
      description = "AWSリージョン"
      default     = "us-east-1"
    }
    
  • 値の割り当て
    • CLI: terraform apply -var="region=us-west-2"
    • tfvarsファイル: terraform apply -var-file="prod.tfvars"
  • : string, number, bool, list, map, object

ステートの管理

  • ステートファイル: terraform.tfstate
  • リモートステート(S3の例)
    backend "s3" {
      bucket = "my-tf-state"
      key    = "state.tfstate"
      region = "us-east-1"
    }
    
  • ステートの表示:
    terraform show
    terraform state list

ループと条件

  • カウント
    resource "aws_instance" "web" {
      count = 3
      ...
    }
    
  • for_each
    resource "aws_s3_bucket" "b" {
      for_each = var.bucket_names
      bucket   = each.value
    }
    
  • 条件
    instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
    

関数

  • 文字列の補間:
    resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
  • リスト、マップの例:
    locals {
      my_map = { a = 1, b = 2 }
    }
    

プロビジョナラー

リソースの初期設定に使用されます。例:

resource "aws_instance" "web" {
  ...
  provisioner "local-exec" {
    command = "echo インスタンスが作成されました"
  }
}

ベストプラクティス

  • すべての.tfファイルをバージョン管理してください
  • プロバイダのバージョンをロックして、一貫したデプロイを保証してください
  • リモートバックエンドを使用してステート管理(S3、Azure Blobなど)
  • リモートバックエンドのステートファイルを暗号化してください
  • 再利用可能なモジュールを使用してインフラストラクチャをモジュール化してください
  • 構成を文書化してください
  • 本番環境にデプロイする前にステージング環境でテストしてください

その他の参考資料

  • ヘルプ: terraform --help または [command] --help でコマンド固有のヘルプ
  • デバッグ: TF_LOG=INFO または TF_LOG=DEBUG を設定して詳細なログを取得
  • フォーマット: terraform fmt

このチートシートは、Terraformの使用に関する最も一般的で高度な側面を素早くアクセスできるリファレンスを提供しており、初心者から上級者まで実用的です。 良い一日をお過ごしください!

有用なリンク