위 에러는 main.tf에 대한 terraform init을 진행하지 않은 경우 생기는 에러이며 main.tf에 provider, terraform 정보가 없는 상태에서 plan을 실행하여 발생함
init을 통해 관련 리소스가 만들어지며 이를 tree 명령어로 차이를 확인해봄
local 프로바이더에 대한 정보가 들어가 있는 걸 볼 수 있음
위 에러는 terraform main.tf 문법이 잘 작성 됐는지 여부를 파악하는 명령어인 validate를 통해 에러를 발생시킨 것임
plan -detailed-exitcode 를 통해 변경사항이 잘 반영됐는지 확인할 수 있음 echo $?를 치면 0, 1, 2 응답값이 나오며 각각
0 변경사항 없는 성공
1 실패 오류가 있음
2 변경사항이 반영된 성공
위 코드를 파이프라인 상에 적용시키면 파이프라인상의 main.tf 리소스의 변경점이 제대로 적용됐는지 알 수 있음
apply 하기 전에 제대로 생성이 되는지 사전에 확인하는 plan에 대한 값을 파일로 생성하는 명령어 이 값을 그대로 다음에도 적용 시키려면
terraform apply tfplan(plan-name) 을 사용하면 된다.
resource "local_file" "abc" {
content = "abc!"
filename = "${path.module}/abc.txt"
}
resource "local_file" "dev" {
content = "def!"
filename = "${path.module}/def.txt"
}
위 main.tf를 apply 후
terraform state를 확인해봤다.
replace로 임의의 리소스만 변경 가능함
backend 리소스 다루기
terraform {
backend "local" {
path = "state/terraform.tfstate"
}
}
로컬에 생성할 때
terraform cloud에 생성할 때
terraform {
cloud {
hostname = "app.terraform.io"
organization = "my-org"
workspades = {
name = "my-app-prod"
}
}
}
이게 있어야 각자 환경에서 state파일을 읽고 리소스를 제거할 수 있음