terraform init

**provider가 지정**돼 어떤 인프라를 관리할지 정해진 곳에서 terraform init 명령어 입력

provider, module, state 설정을 진행하며 테라폼을 시작 위한 준비 진행

.terraform 디렉토리 생성, 테라폼 관련 라이브러리 모듈 등을 가져옴(.tfstate 파일 내용 포함)

인프라 관련 동시성 처리를 안전하게 해줄 .terraform.lock.hcl 생성

terraform plan

테라폼 **코드로 변경될 인프라 내역**을 보여준다.

terraform apply

테라폼으로 적용한 **인프라 상태를 담고있는 terraform.tfstate 파일이 생성**된다.

backend는 저장 공간을 지정할 때 사용되며 따로 **설정하지 않으면 로컬에 state파일이 생성**된다.

여러 사람과 협업하려면 state 파일을 로컬에서 관리하면 안 된다.

// providers.tf

terraform {
  required_version = ">= 1.0"

  backend "s3" {
    bucket = "jeongho-s3-tf-state"
    key = "terraform.tfstate"
    region = "ap-northeast-2"
    dynamodb_table = "test-ddb-tf-lock"
    encrypt = "true"
  }
}

위 같은 코드로 backend를 지정하면 s3에 .tfstate 파일이 저장되어 여러 사람과 협업 가능

생성 인프라 정보가 tfstate에 저장되게 되고 다음에 또 생성할 때 이 state를 참고해 생성, 삭제 판단

terraform destroy

테라폼 코드로 구성한 모든 자원들을 삭제 -> tfstate 파일도 비워지게 된다.