Terraform Workspaceとは
Terraform Workspaceは、異なる環境でインフラストラクチャリソースの状態を管理するための論理的なコンテナです。デフォルトでは、Terraformの構成には「default」という単一のワークスペースがあります。しかし、開発、ステージング、プロダクションなど、複数の環境を管理するために追加のワークスペースを作成することができます。
キーとなる概念と用語
-
Workspace
異なる環境でのインフラストラクチャリソースの状態を管理するための名前付きコンテナ。 -
State
Terraformによって管理されるインフラストラクチャリソースの現在の状態を記録するJSON形式のファイル。 -
Environment
開発、ステージング、プロダクションなど、インフラストラクチャリソースが展開・管理される特定のコンテキスト。
ワークスペースの作成と管理
新しいワークスペースの作成
新しいワークスペースを作成するには、terraform workspace new
コマンドに続いて、作成するワークスペースの名前を指定します。
$ terraform workspace new development
このコマンドは、development
という名前の新しいワークスペースを作成し、開発環境を管理するために使用できます。
ワークスペースの切り替え
ワークスペースを切り替えるには、terraform workspace select
コマンドに続いて、ワークスペース名を指定します。
$ terraform workspace select development
このコマンドはアクティブなワークスペースをdevelopment
に設定し、そのワークスペース内のリソースを管理できるようにします。
ワークスペースの削除
ワークスペースを削除するには、terraform workspace delete
コマンドに続いて、ワークスペース名を指定します。
$ terraform workspace delete development
このコマンドは、development
という名前のワークスペースとそれに関連するStateファイルを削除します。
ワークスペースの一覧表示
全ての利用可能なワークスペースを一覧表示するには、terraform workspace list
コマンドを使用します。
$ terraform workspace list
このコマンドは、全ての既存のワークスペースのリストを表示し、現在アクティブなワークスペースの横にアスタリスク(*
)が表示されます。
ワークスペース固有の構成
変数とアウトプットの処理
ワークスペース固有の方法で変数やアウトプットを処理するには、terraform.workspace
を使用します。これにより、アクティブなワークスペースに基づいてリソースを動的に構成できます。
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
変数は、default
、development
、production
という異なるワークスペースに対して異なる値を持っています。リソースのinstance_type
属性は、アクティブなワークスペースを使用して適切な値を決定します。
バックエンドの構成
バックエンドのストレージをワークスペース固有に構成することもできます。例えば、各ワークスペースに一意なキーを使用してS3バックエンドを使用する場合です。
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "state/${terraform.workspace}/terraform.tfstate"
region = "us-west-2"
}
}
この構成は、各ワークスペースの状態ファイルを同じS3バケット内の別々のキーに保存します。
リソースタグ付け
ワークスペース情報でリソースにタグを付けることは、管理、監査、コスト割り当てに役立ちます。terraform.workspace
を使用して、リソースにタグを追加できます。
resource "aws_instance" "example" {
# ... other configuration ...
tags = {
Name = "example-instance-${terraform.workspace}"
Environment = terraform.workspace
}
}
参考