연재 시리즈

테라폼 시리즈 8편. 변경/변경불가능 속성

악분 2022. 10. 21. 20:38
반응형

안녕하세요. 이 글은 테라폼스터디 1주차 내용을 정리했습니다.

 

1. 변경/변경불가능 속성이란?

테라폼 코드를 인프라에 반영 한 후, 일부 속성을 변경하고 다시 인프라에 반영하면 어떻게 될까요? 

조건에 따라 결과가 달라집니다. provider에서 변경내용이 적용 불가능하면 해당 리소스를 삭제하고 다시 생성합니다. 바로 적용이 가능하면 리소스 속성만 수정합니다. 예제를 살펴보면서 변경가능/불가능 과정을 상세히 살펴볼게요!.

 

2. 변경 가능(Mutable) 속성

변경가능 속성은 값이 수정되면, 기존 인프라에 수정된 내용이 바로 반영됩니다. 실습 예제는

AWS EC2 Instance의 태그를 수정해볼게요.

 

먼저 태그가 없는 ec2인스턴스를 생성하겠습니다. 코드는 아래와 같습니다.

cat <<EOT > main.tf
provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c76973fbe0ee100c" # Ubuntu 22.04 LTS
  instance_type = "t2.nano"
}
EOT

 

terrafrom apply로 테라폼 코드를 aws에 반영합니다.

terraform init
terraform apply

 

aws EC2 Instance 대시보드를 확인하면, EC2인스턴스가 생성되어 실행중 상태입니다. 

 

이제 저희는 EC2 Instance 태그에 Name필드를 추가하여 Instnace를 쉽게 찾을 수 있게 해볼게요. 현재 Name 태그가 설정되어 있지 않아서 Instnace를 구별하기 매우 어렵습니다.

 

기존 테라폼 코드에서 aws_instance에 tag를 추가합니다.

cat <<EOT > main.tf
provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c76973fbe0ee100c"
  instance_type = "t2.nano"

  tags = {
    Name = "t101-study"
  }

}
EOT

 

terraform plan을 입력하여 어떤 내용이 수정되는지 확인해봅시다. 예상대로 tags가 추가되었으므로 tags가 업데이트 될거라고 알려주네요!

terraform paln

 

terraform apply를 실행하면 Modifying이라는 메세지가 출력됩니다. 그리고 기존 aws EC2 Instance에 태그가 적용됩니다.

terraform apply

 

AWS EC2 Instance의 태그를 확인하면 테라폼 코드에 설정한 태그이름이 잘 설정되었습니다.

 

실습을 마치면 terrform destroy로 실습에 사용한 리소스를 삭제합니다.

terraform destroy

 

3. 변경 불가능(Immutable) 속성

변경 불가능한 속성은 provider에 반영되면, 기존 인프라를 삭제하고 속성이 적용된 새로운 인프라를 생성합니다.

 

실습 예제는 aws EC2 Instance ami를 수정해보겠습니다. 첫 번째 코드는 EC2 Instance ami를 “ami-0c76973fbe0ee100c”를 설정합니다.

cat <<EOT > main.tf
provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c76973fbe0ee100c" # ami 수정
  instance_type = "t2.nano"

  tags = {
    Name = "t101-study-immutable"
  }

}
EOT

 

terraform apply 명령어를 실행하여 테라폼 코드를 aws에 반영합니다.

terraform apply

 

aws EC2 Instance 대시보드를 확인하면 ami가 “ami-0c76973fbe0ee100”로 설정되었습니다. 인스턴스 ID를 주목해주세요. 이 후 실습과정에서 사용됩니다.

 

이제 테라폼 코드에서 EC2 Instance 타입을 t2.micro로 변경합니다.

cat <<EOT > main.tf
provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0e9bfdb247cc8de84"
  instance_type = "t2.nano"

  tags = {
    Name = "t101-study-immutable"
  }

}
EOT

 

그리고 terraform plan명령어를 실행합니다. 출력결과를 잘 관찰하면 “replcaed”라는 메세지가 있습니다. 기존 EC2 Instance는 삭제되고 새로운 EC2 Instance가 생성될 거라는 의미입니다.

terraform plan

 

terraform apply 명령어를 실행하여 테라폼 코드를 aws에 반영합니다. terraform plan과 동일하게 “replaced”메세지가 출력됩니다.

terraform apply

 

진행결과를 보면 기존 EC2 Instance를 삭제하고 새로운 EC2 Instance를 생성합니다.

 

EC2 대시보시드에서 Instance ID를 확인해보세요. Instance ID가 달라졌습니다. 기존 EC2 Instance는 삭제되었고 새로운 EC2 Instance가 생성되었기 때문입니다. 새로운 EC2 Instance의 AMI ID로 달라졌습니다.

반응형