Workspace
Terraform Workspace 목록 확인
terraform workspace list
default Workspace의 상태를 파일 형식으로 저장
terraform state pull > default.tfstate
default Workspace의 상태를 기반으로 새로운 Workspace를 생성
terraform workspace new --state=default.tfstate korea
Terraform Workspace 목록 확인
terraform workspace list
인프라 변경 사항 확인
terraform plan
AWS 설정 파일에 아래와 같은 블록 추가
[profile korea] region = ap-northeast-2 [profile us] region = us-east-1
AWS 자격증명에 있는 default 자격증명 코드 블록을 복사/붙여넣기 하고 아래와 같은 이름으로 지정
[default] aws_access_key_id = xxxxxxxxxxxxxxxx aws_secret_access_key = zzzzzzzzzzzzzzzzzzzzzzzzzzzzz [korea] aws_access_key_id = xxxxxxxxxxxxxxxx aws_secret_access_key = zzzzzzzzzzzzzzzzzzzzzzzzzzzzz [us] aws_access_key_id = xxxxxxxxxxxxxxxx aws_secret_access_key = zzzzzzzzzzzzzzzzzzzzzzzzzzzzz
provider.tf 파일에 아래와 같은 코드 블록 추가
provider "aws" { profile = "${terraform.workspace}" default_tags { tags = { Environment = terraform.workspace } } }
인프라 변경 사항 확인
terraform plan
새로운 Workspace 생성
terraform workspace new us
Terraform Workspace 목록 확인
terraform workspace list
인프라 변경 사항 확인
terraform plan
variable.tf 파일을 생성하고 아래의 블록 추가
variable "environment" { description = "환경 이름" type = string } variable "vpc_cidr" { description = "VPC 대역대" type = string }
us.tfvars 파일을 생성하고 아래의 코드 블록 추가
environment = "us-dev" vpc_cidr = "10.20.0.0/16"
VPC를 생성하는 코드 블록을 아래와 같이 수정
module "network" { source = "terraform-aws-modules/vpc/aws" version = "5.7.1" name = var.environment cidr = var.vpc_cidr azs = data.aws_availability_zones.azs.names public_subnets = [for idx, _ in data.aws_availability_zones.azs.names: cidrsubnet(var.vpc_cidr, 8, idx)] map_public_ip_on_launch = true }
인프라 변경 사항 확인
terraform plan --var-file="us.tfvars"
인프라 변경 사항 반영
terraform apply --var-file="us.tfvars" --auto-approve
EC2 인스턴스가 생성되었는지 확인
aws ec2 describe-instances --profile us --no-cli-pager
EC2를 생성하는 코드 블록을 아래와 같이 수정
module "ec2_instance" { source = "terraform-aws-modules/ec2-instance/aws" version = "5.6.1" instance_type = terraform.workspace != "korea" ? "t3.small" : "t3.micro" subnet_id = module.network.public_subnets[0] create_iam_instance_profile = true iam_role_policies = { "ssm" = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore" } }
인프라 변경 사항 확인
terraform plan --var-file="us.tfvars"
인프라 변경 사항 반영
terraform apply --var-file="us.tfvars" --auto-approve
EC2 인스턴스 타입이 변경되었는지 확인
aws ec2 describe-instances --profile us --no-cli-pager | grep -i type
리소스 삭제
{ terraform destroy --var-file="us.tfvars" --auto-approve terraform workspace select korea terraform destroy --var="environment=demo" --var="vpc_cidr=10.100.0.0/16" --auto-approve cd ~/environment && rm -rf terraform }
Last updated