Terraform 작동원리와 CLI

hs·2023년 2월 6일
0

Terraform 해보기

목록 보기
2/2
post-thumbnail

Terraform init

// provider.tf
provider "aws" {
  region = "ap-northeast-2"
}

위와 같이 파일을 생성해주고 terraform init 명령어를 입력하면

그러면 initialize가 진행이 되고 프로바이더를 다운로드 받는다.

local에는 아래와 같은 폴더 두개가 생긴다.

.terraform , .terraform.lock.hcl

.terraform은 프로바이더에 명시한 cloud의 api 라이브러리들을 가져와 저장한다.

.terraform.lock.hcl은 잠금 파일이며 경쟁 상태에서 생길 수 있는 문제들을 피할 수 있게 해줍니다.

Terraform plan

// s3.tf
resource "aws_s3_bucket" "test" {
  bucket = "terraform-inflearn-chs"
}

위와 같이 resource를 작성해주고 terraform plan을 입력해주면

# aws_s3_bucket.test will be created
  + resource "aws_s3_bucket" "test" {
      + acceleration_status         = (known after apply)
      + acl                         = (known after apply)
      + arn                         = (known after apply)
      + bucket                      = "terraform-inflearn-chs"
      + bucket_domain_name          = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags_all                    = (known after apply)
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule {
          + allowed_headers = (known after apply)
          + allowed_methods = (known after apply)
          + allowed_origins = (known after apply)
          + expose_headers  = (known after apply)
          + max_age_seconds = (known after apply)
        }
...

이러한 형태가 return 된다.

위의 결과를 보면 bucket의 이름의 경우 필수 값이기 때문에 반드시 입력이 되었고 나머지는 default값 혹은 정의를 해도 되고 안해도 되는 그러한 부분들이다.

Terraform apply

...

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:

위와 같이 출력이 되는데 실제로 yes 를 입력 해주어야한다.

실제 인프라에 적용이 되는 부분이기 때문에 굉장히 예민한 작업이 될 수 있기에 경고문 역활을 한다.

이후 ls 명령어를 치면 terraform.tfstate 파일이 추가된 것을 볼 수 있다.

→ backend를 따로 지정해주지 않았기에 local이 backend가 된 것이다.

Terraform import

기존에 작성했던 s3 bucket들의 정보도 가져올 수 있다.

작동원리를 잘 이해해야된다.

  1. 기존 작성했던 resource를 삭제하고 import를 진행하면 code가 없기 때문에 에러가 난다.

  2. 그 후 다시 똑같이 resource를 작성하고 plan을 하면 plan은 성공으로 나온다.

    여기서 알 수 있는 것은 plan은 실제 리소스가 있는지 없는지 검사하지 않는다는 점이다.

    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value: yes
    
    aws_s3_bucket.test: Creating...
    ╷
    │ Error: creating Amazon S3 (Simple Storage) Bucket (terraform-inflearn-chs): BucketAlreadyOwnedByYou: Your previous request to create the named bucket succeeded and you already own it.
  3. 이럴 때 사용하는 것이 import이다.

profile
무엇이든 끝까지 보람차게

0개의 댓글