✅ 이 블로깅은 테라폼으로 시작하는 IaC 책을 기반으로 작성한다.

null_resource와 terraform_data

테라폼 1.4 버전부터 기존 null_resource 리소스를 대체하는 terraform_data 리소스가 추가되었다

아무 작업도 수행하지 않는 리소스를 구현할 때 사용한다.

아무래도 지금은 좀 이해가 되지 않아서 지금은 이런게 있다 정도만 알고 나중에 사용할 기회가 생기면 다시 봐야할 듯하다..

moved 블록

테라폼의 State에 기록되는 리소스 주소의 이름이 변경되면 기존 리소스는 삭제되고 새로운 리소스가 생성된다.

moved는 이름은 변경되지만 환경은 그대로일 때 사용한다. moved는 State에서 리소스의 이전 주소, 새 주소를 알리는 역할을 한다.

resource "local_file" "a" {
  content  = "foo!"
  filename = "${path.module}/foo.bar"
}

output "file_content" {
  value = local_file.a.content
}

a라는 리소스를 생성해 두자

$ terraform state list 
	local_file.a

그럼 현재는 local_file.a 이름을 가진 state가 저장되어 있다

resource "local_file" "b" {
  content  = "foo!"
  filename = "${path.module}/foo.bar"
}

moved {
  from = local_file.a
  to   = local_file.b
}

output "file_content" {
  value = local_file.b.content
}

여기서 b 리소스로 수정하고 moved 블록을 추가해 보자

$ terraform apply -auto-approve
	local_file.b: Refreshing state... [id=4bf3e335199107182c6f7638efaad377acc7f452]
	
	Terraform will perform the following actions:
	
	  # local_file.a has moved to local_file.b
	    resource "local_file" "b" {
	        id                   = "4bf3e335199107182c6f7638efaad377acc7f452"
	        # (10 unchanged attributes hidden)
	    }
	
	Plan: 0 to add, 0 to change, 0 to destroy.
	
	Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
	
	Outputs:
	
	file_content = "foo!"

그럼 리소스 생성된 것 자체는 그대로인데 (파일명,파일내용 일치)

리소스명만 a에서 b로 변경되고 바꼈다는 메세지까지 출력해 준다.

이제 moved 블록을 주석처리하면 새로운 리소스 주소가 사용되어 리팩터링이 완료되었다!

CLI를 위한 시스템 환경 변수

테라폼은 환경 변수를 사용할 수 있다. 저번에 환경 변수로 변수의 우선순위를 조정했듯이!’

아래와 같이 OS마다 지정하는 커맨드가 다르다!

Mac/리눅스/유닉스: export <환경 변수 이름>=<값>
Windows CMD: set <환경 변수 이름>=<값>
Windows PowerShell: $Env:<환경 변수 이름>='<값>'

TF_LOG

테라폼의 stderr 로그에 대한 레벨이다. 표준에러!

trace, debug, info, warn, error, off를 설정할 수 있고 관련 환경 변수가 없다면 off와 동일하다.

  • TF_LOG: 로깅 레벨 지정 또는 해제
  • TF_LOG_PATH: 로그 출력 파일 위치 지정
  • TF_LOG_CORE: TF_LOG와 별도로 테라폼 자체 코어에 대한 로깅 레벨 지정 또는 해제
  • TF_LOG_PROVIDER: TF_LOG와 별도로 테라폼에서 사용하는 프로바이더에 대한 로깅 레벨 지정 또는 해제

로그 관련 환경 변수는 위 네 가지로 사용할 수 있다

terraform plan 또는 terraform apply를 사용할 때 위 환경변수와 같이 사용하여 출력되는 로그를 조정할 수 있다!

TF_INPUT

TF_INPUT=0 또는 TF_INPUT=false로 설정하는 것은 -input=false 인수와 실행 동작이 동일하다.

입력 변수를 입력해야 하는 상황인데 false로 되어 있으니 자동으로 에러를 뱉게 된다.

이는 테라폼이 코드만 작성해 두면 실배포가 가능하니 위험성이 있어 만들어진 설정이 아닐까 싶다!

TF_VAR_name

TF_VAR_<변수 이름>을 사용하면 default로 선언된 변수 값을 대체해 준다!

입력 변수 우선순위를 가릴 때나, 환경에 따른 배포를 할 때 유용해 보인다

TF_CLI_ARGS / TF_CLI_ARGS_subcommand

테라폼 실행 시 추가할 인수를 정의한다.

  • TF_CLI_ARGS="-input=false" terraform apply -auto-approve ****-input=false 인수를 추가한 것과 같다.
  • export TF_CLI_ARGS_apply="-input=false"

    TF_CLI_ARGS_apply를 사용하게 되면 apply 시에만 에러가 나고 plan에는 에러가 나지 않는다

    나는 이 변수가 제일 많이 사용될 거 같다.

    실 배포에는 유의해야 하나 변수 사용 시 어떤 실행 계획을 보여 주는지 궁금할 때 사용하면 유용할 듯하다!

TF_DATA_DIR

.terraform와 같이 State 저장 백엔드 설정과 같은 작업 디렉토리 별 데이터를 보관하는 위치를 지정한다

$ tree .terraform
	.terraform
	└── providers
	    └── registry.terraform.io
	        └── hashicorp
	            └── local
	                └── 2.4.0
	                    └── linux_amd64
	                        └── terraform-provider-local_v2.4.0_x5
	
	6 directories, 1 file

init 시에 설치된 플러그인이 들어 있다.

일관된 테라폼 사용을 위해 실행 시마다 일관된 모듈, 아티팩트 등으로 적용될 수 있게 설정하는 것이다!

Categories:

Updated:

Leave a comment