All technological notes.
Terraform workspace
defaultterraform.tfstate.d/<workspace_name>/terraform.tfstateenv:/<workspace_name>/terraform.tfstate<workspace_key_prefix>/<workspace_name>/terraform.tfstate"${terraform.workspace}"instance_type = terraform.workspace == "prod" ? "t3.medium" : "t3.micro"
| Command | Description |
|---|---|
terraform workspace delete |
Delete a workspace |
terraform workspace show |
Show the name of the current workspace |
terraform workspace list |
List Workspaces |
terraform workspace new workspace_name |
Create a new workspace |
terraform workspace select workspace_name |
Select a workspace |
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
backend "s3" {
bucket = ""
region = ""
workspace_key_prefix = "tf-demo-workspace"
key = "terraform.tfstate"
encrypt = true
use_lockfile = true
}
}
provider "aws" {
region = var.aws_region
}
# ##############################
# VPC
# ##############################
resource "aws_vpc" "main" {
cidr_block = var.vpc_cidr_block
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = format("%s_%s_vpc", var.project_name, terraform.workspace)
Environment = terraform.workspace
}
}
resource "aws_subnet" "private" {
vpc_id = aws_vpc.main.id
cidr_block = var.subnet_cidr_block
availability_zone = var.availability_zone
tags = {
Name = format("%s_%s_private_subnet", var.project_name, terraform.workspace)
Environment = terraform.workspace
}
}
# ##############################
# ec2
# ##############################
resource "aws_instance" "app" {
count = terraform.workspace == "prod" ? 3 : 1
ami = var.ami_id
instance_type = terraform.workspace == "prod" ? "t2.large" : "t2.micro"
subnet_id = aws_subnet.private.id
tags = {
Name = format("%s_%s_ec2_%02d", var.project_name, terraform.workspace, count.index)
Environment = terraform.workspace
}
}
cd infra
terraform init
terraform workspace new dev
terraform workspace new prod
# switch and apply
terraform workspace select dev
terraform apply -auto-approve

terraform workspace select prod
terraform apply -auto-approve


