【Terraform】Terraform ~ Workspace ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/05/05/004939

で、Terraform の tfstate / Backend について扱ったが
今回は、Workspace について、徐々にメモっておく

目次

【1】Workspace
【2】コマンド
 1)Workspaceの作成
 2)Workspaceの切替
【3】サンプル
  例1:設定値の切替
【4】使用上の注意
 1)tfstate保存先は、同じS3バケットを使用

【1】Workspace

* 同一の tfファイル群を別の tfsate として扱うことができる機能
 => 複数のStateファイルを管理できるようになる

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

【2】コマンド

Command Explanation Memo
terraform workspace list 既存のworkspaceを一覧表示
terraform workspace new Workspaceの新規作成 terraform workspace new prod
terraform workspace select Workspaceの選択 terraform workspace select prod
terraform workspace delete Workspaceの削除 terraform workspace delete prod
terraform workspace show 選択中のWorkspaceを表示

1)Workspaceの作成

#####################
# For dev
#####################
# Step1: Workspace「dev」を新規作成
terraform workspace new dev
# Step2: デプロイ
terraform apply

#####################
# For stage
#####################
terraform workspace new stage
terraform apply

#####################
# For prod
#####################
terraform workspace new prod
terraform apply

2)Workspaceの切替

# Workspace 一覧表示
terraform workspace list
  default << default。これは削除できない
  dev
  stage
* prod

# devに切り替える場合
terraform workspace select dev

main.tf

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

locals {
  instance_types = {
    dev   = "t2.micro"
    stage = "t2.small"
    prod  = "m4.large"
  }
}
resource "aws_instance" "example" {
  ami           = "ami-0fb653ca2d3203ac1"
  instance_type = local.instance_types[terraform.workspace]
  tags = {
    Name = "example-server-${terraform.workspace}"
  }
}

【4】使用上の注意

1)tfstate保存先は、同じS3バケットを使用

* 環境を切り替えても、tfstate保存先のS3バケットは同一のものが使用される
 => 例えば、dev/stage/prodがアクセス可能な環境だったら使えるが
  それ以外では、使えない。。。

イメージ

s3://your-s3-bucket/:env/dev/terraform.tfstate 
s3://your-s3-bucket/:env/stage/terraform.tfstate 
s3://your-s3-bucket/:env/prod/terraform.tfstate

関連記事

Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ 基本編 / Module ~
https://dk521123.hatenablog.com/entry/2023/05/19/113544
Terraform ~ local / variable ~
https://dk521123.hatenablog.com/entry/2023/12/24/173633
Terraform ~ tfstate / Backend ~
https://dk521123.hatenablog.com/entry/2023/05/05/004939
Terraform ~ Terraformあれこれ ~
https://dk521123.hatenablog.com/entry/2023/05/15/205352
Terraform ~ AWS Lambda / 入門編 ~
https://dk521123.hatenablog.com/entry/2024/05/30/010920
Terraform ~ AWS ECR ~
https://dk521123.hatenablog.com/entry/2023/05/23/002314
Terraform ~ tag あれこれ ~
https://dk521123.hatenablog.com/entry/2023/06/05/224944
Terraform ~ 複数環境へデプロイすることを考える ~
https://dk521123.hatenablog.com/entry/2023/05/06/003645
Lambda ~ Python / 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/07/103317
Lambda ~ Python / 外部モジュール追加 ~
https://dk521123.hatenablog.com/entry/2024/05/25/005456
Lambda ~ Python / S3トリガー ~
https://dk521123.hatenablog.com/entry/2024/05/23/162229