Traffine I/O

日本語

2023-03-10

Terraform Workspace

Terraform Workspaceとは

Terraform Workspaceは、異なる環境でインフラストラクチャリソースの状態を管理するための論理的なコンテナです。デフォルトでは、Terraformの構成には「default」という単一のワークスペースがあります。しかし、開発、ステージング、プロダクションなど、複数の環境を管理するために追加のワークスペースを作成することができます。

キーとなる概念と用語

  • Workspace
    異なる環境でのインフラストラクチャリソースの状態を管理するための名前付きコンテナ。

  • State
    Terraformによって管理されるインフラストラクチャリソースの現在の状態を記録するJSON形式のファイル。

  • Environment
    開発、ステージング、プロダクションなど、インフラストラクチャリソースが展開・管理される特定のコンテキスト。

ワークスペースの作成と管理

新しいワークスペースの作成

新しいワークスペースを作成するには、terraform workspace newコマンドに続いて、作成するワークスペースの名前を指定します。

bash
$ terraform workspace new development

このコマンドは、developmentという名前の新しいワークスペースを作成し、開発環境を管理するために使用できます。

ワークスペースの切り替え

ワークスペースを切り替えるには、terraform workspace selectコマンドに続いて、ワークスペース名を指定します。

bash
$ terraform workspace select development

このコマンドはアクティブなワークスペースをdevelopmentに設定し、そのワークスペース内のリソースを管理できるようにします。

ワークスペースの削除

ワークスペースを削除するには、terraform workspace deleteコマンドに続いて、ワークスペース名を指定します。

basha
$ terraform workspace delete development

このコマンドは、developmentという名前のワークスペースとそれに関連するStateファイルを削除します。

ワークスペースの一覧表示

全ての利用可能なワークスペースを一覧表示するには、terraform workspace listコマンドを使用します。

bash
$ terraform workspace list

このコマンドは、全ての既存のワークスペースのリストを表示し、現在アクティブなワークスペースの横にアスタリスク(*)が表示されます。

ワークスペース固有の構成

変数とアウトプットの処理

ワークスペース固有の方法で変数やアウトプットを処理するには、terraform.workspaceを使用します。これにより、アクティブなワークスペースに基づいてリソースを動的に構成できます。

tf
variable "instance_type" {
  type    = map(string)
  default = {
    default     = "t2.micro"
    development = "t2.small"
    production  = "m5.large"
  }
}

resource "aws_instance" "example" {
  ami           = "ami-0c94855ba95b798c7" # This is an example Amazon Linux 2 AMI ID
  instance_type = var.instance_type[terraform.workspace]

  tags = {
    Name        = "example-instance-${terraform.workspace}"
    Environment = terraform.workspace
  }
}

この例では、instance_type変数は、defaultdevelopmentproductionという異なるワークスペースに対して異なる値を持っています。リソースのinstance_type属性は、アクティブなワークスペースを使用して適切な値を決定します。

バックエンドの構成

バックエンドのストレージをワークスペース固有に構成することもできます。例えば、各ワークスペースに一意なキーを使用してS3バックエンドを使用する場合です。

tf
terraform {
  backend "s3" {
    bucket = "my-terraform-state"
    key    = "state/${terraform.workspace}/terraform.tfstate"
    region = "us-west-2"
  }
}

この構成は、各ワークスペースの状態ファイルを同じS3バケット内の別々のキーに保存します。

リソースタグ付け

ワークスペース情報でリソースにタグを付けることは、管理、監査、コスト割り当てに役立ちます。terraform.workspaceを使用して、リソースにタグを追加できます。

tf
resource "aws_instance" "example" {
  # ... other configuration ...

  tags = {
    Name        = "example-instance-${terraform.workspace}"
    Environment = terraform.workspace
  }
}

参考

https://developer.hashicorp.com/terraform/language/state/workspaces

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!