Workspace

  1. Terraform Workspace 목록 확인

    terraform workspace list
  2. default Workspace의 상태를 파일 형식으로 저장

    terraform state pull > default.tfstate
  3. default Workspace의 상태를 기반으로 새로운 Workspace를 생성

    terraform workspace new --state=default.tfstate korea
  4. Terraform Workspace 목록 확인

    terraform workspace list
  5. 인프라 변경 사항 확인

    terraform plan
  6. AWS 설정 파일에 아래와 같은 블록 추가

    [profile korea]
    region = ap-northeast-2
    
    [profile us]
    region = us-east-1
  7. 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
  8. provider.tf 파일에 아래와 같은 코드 블록 추가

    provider "aws" {
      profile = "${terraform.workspace}"
      default_tags {
        tags = {
          Environment = terraform.workspace
        }
      }
    }
  9. 인프라 변경 사항 확인

    terraform plan
  10. 새로운 Workspace 생성

    terraform workspace new us
  11. Terraform Workspace 목록 확인

    terraform workspace list
  12. 인프라 변경 사항 확인

    terraform plan
  13. variable.tf 파일을 생성하고 아래의 블록 추가

    variable "environment" {
      description = "환경 이름"
      type        = string
    }
    
    variable "vpc_cidr" {
      description = "VPC 대역대"
      type        = string
    }
  14. us.tfvars 파일을 생성하고 아래의 코드 블록 추가

    environment = "us-dev"
    vpc_cidr = "10.20.0.0/16"
  15. 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
    }
  16. 인프라 변경 사항 확인

    terraform plan --var-file="us.tfvars"
  17. 인프라 변경 사항 반영

    terraform apply --var-file="us.tfvars" --auto-approve
  18. EC2 인스턴스가 생성되었는지 확인

    aws ec2 describe-instances --profile us --no-cli-pager
  19. 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"
      }
    }
  20. 인프라 변경 사항 확인

    terraform plan --var-file="us.tfvars"
  21. 인프라 변경 사항 반영

    terraform apply --var-file="us.tfvars" --auto-approve
  22. EC2 인스턴스 타입이 변경되었는지 확인

    aws ec2 describe-instances --profile us --no-cli-pager | grep -i type
  23. 리소스 삭제

    {
      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