[Terraform] 5강 테라폼 CLI

전형빈·2023년 1월 4일
0

테라폼

목록 보기
6/12
post-thumbnail

테라폼은 크게 3가지 작동 원리가 있다.
1. 로컬에서 작성한 코드
2. 실제로 코드를 통해 생성된 인프라
3. 백엔드에 저장되는 .tfstate 파일

가장 중요한 건 실제 생성된 인프라와 저장된 스테이트 파일이 100% 일치하게 만들어야 한다.


테라폼 CLI 사용해보기

terraform init

제일 처음에 사용하면 아직 아무 코드가 없기 때문에 반응 없음 git init이랑 비슷한 듯


프로바이더 생성 (prvider.tf)

provider = "aws" {
  region = "ap-northeast-2"
}

프로버이더를 생성하고 init 명령어를 실행하면 .terraform 디렉터리가 생김

테라폼은 내부적으로 aws의 API를 호출하는거라 관련 라이브러리가 필요한데 이 라이브러리를 다운 받는 것도 init 명령어의 역할


S3 리소스 생성 (S3.tf)

resource "aws_s3_bucket" "test" {
  bucket = "terraform-s3-test"
}

s3는 global region에 생성되니 고유한 이름으로 생성하자

terraform plan 명령어로 생성 결과를 확인할 수 있다. 실제 생성하기 적에 꼭 plan을 해보는 습관을 가지자


실제 S3 리소스 생성 terraform apply

실제 인프라가 생성되고 작업 결과가 백엔드의 .tfstat 파일에 저장된다. 현재는 백엔드를 따로 지정하지 않아서 로컬이 백엔드가 된 것임

해당 결과는 로컬의 .terraform 파일에도 저장됨

aws s3 ls 명령어로 확인해보면 이렇게 s3가 생성됨


테라폼 작동 원리

만약 위에서 생성한 s3.tf 파일을 삭제하고 terraform plan을 하면 destroy 즉 삭제가 된다고 나옴왜냐 실제로 코드가 삭제가 되었기 때문. stat 파일과 실제 인프라는 남아있지만 코드가 삭제되었으니 테라폼은 삭제를 한다고 인지하는 것위 사진처럼 state 파일을 삭제하고 테라폼 디렉터리 까지 삭제 후 다시 terraform init을 하자terraform plan을 하면 아직 s3 리소스는 있지만 코드가 삭제되었기 때문에 테라폼 입장에선 빈 상태가 된 것

여기서 terraform import로 기존 리소스를 import 해보자

terraform import

실제 코드가 없어 improt 할 수 없다고 한다. 아까 생성한 s3 리소스를 다시 작성하고 terraform plan을 해주면 생성한다는 결과가 나온다. 이처럼 plan은 실제 리소스의 유무와 상관없이 결과 값을 알려준다. 하지만 apply 해보면 이미 리소스가 존재해서 생성되지 않는다는 에러가 뜬다. 다시 아까 했던 import를 해주면 성공적으로 import 됐다고 나옴 다시 plan을 하면 변경된게 없다고 나온다. 만약 변경된게 있다면 apply해서 실제 리소스와 백엔드를 일치시켜줘야 함


단순 리소스만 생성하는건 쉬운데 리소스 설정이 계속 유지되는게 아니고 수시로 변경하니 리소스와 테라폼 state를 일치시켜주는게 아직은 좀 헷갈린다.




REFERENCE

0개의 댓글