마짱짱의 지식창고

[Terraform] Associate 준비(3) - Terraform 기초(Provider, Provisioners) 본문

Automation/Terraform

[Terraform] Associate 준비(3) - Terraform 기초(Provider, Provisioners)

마짱짱 2021. 7. 22. 11:14
반응형

Provider = 공급자

Terraform을 이용해 구성할 공급자(Ex: AWS, Azure, GCP..)를 선언해줘야합니다.

 

Provider구성은 root Module에 속합니다.

provider "google" {
  project = "test-project"
  region  = "asia-northeast-3"
}

이런식으로 표현 할 수 있습니다.

 

하지만, 저렇게만 사용할시 region은 한가지 인데 다중으로 구성을 하고싶을 시 alias를 이용합니다

provider "google" {
  project = "test-project"
  region  = "asia-northeast-3"
}

provider "google" {
  alias = "east2"
  project = "test-project"
  region  = "asia-northeast-2"
}

이런식으로 사용합니다.

 

공급자를 나타날때의 구조는

<PROVIDER NAME>.<ALIAS> 입니다.

EX) provider = google.east2

 

Version은 공급자의 버전을 지정해주는 것인데 Terraform 0.13버전 이상부터는 사용하지 않습니다


 Terraform Setting

각 Terraform Module은 Terraform이 설치하고 사용할 수 있도록 필요한 공급자를 선언해야 합니다.

공급자 요구사항은 required_providers 블록에서 선업합니다.

terraform {
  required_providers {
    google = {
      source = "hashicorp/google"
      version = "3.76.0"
    }
  }
}

provider "googlecloud"{
...
}

required_providers블록의 각 인수 는 하나의 공급자를 활성화합니다. 키는 공급자의 Local Name (이 모듈 내의 고유 식별자)을 결정하고 값은 다음 요소가 있는 개체입니다.

source - 사용하려는 공급자의 주소

version - 사용가능한 공급자의 버전

 

source의 주소는 보통 [<HOSTNAME>]/<NAMESPACE>/<TYPE> 입니다.

기본적으로 Public Terraform Registry를 사용하기에 Hostname은 생략합니다

필요할 경우 명시해줘야합니다.

 

또한 버전관리를 해줘야 하는데 아래 코드로 설명을 하겠습니다.

terraform {
  required_providers {
    random = {
      source  = "hashicorp/random"
      version = "3.0.0"
    }

    aws = {
      source  = "hashicorp/aws"
      version = ">= 2.0.0"
    }
  }

  required_version = "~> 0.14"
}

required_providers 안에있는

random.version = "3.0.0" 은 provider 버전이 3.0.0 인것을 사용하는 것이고

aws.version = ">= 2.0.0"은 provider 2.0.0 이상인 최신버전을 사용한 다는 것입니다

 

아래 required_version은 테라폼의 버전이 v0.14.x 버전에서만 사용한다는 의미입니다.

 


Provisioners = 제공자

Provisioners는 서비스를 위해 서버 또는 기타 인프라 개체를 준비하기 위해 로컬시스템 또는 원격 시스템에서 특정 작업을 모델링 하는데 사용할 수 있습니다.

 

Terraform은 Terraform의 선언적 모델에서 직접 표현할 수 없는 특정 동작이 항상 있다는 것을 알고 있는 실용주의의 척도로 프로비저닝 도구의 개념을 포함합니다.

 

그러나 이는 또한 Terraform 사용에 상당한 복잡성과 불확실성을 추가합니다. 

첫째, Terraform은 원칙적으로 모든 조치를 취할 수 있기 때문에 계획의 일부로 제공자의 조치를 모델링할 수 없습니다. 

둘째, 프로비저닝 도구를 성공적으로 사용하려면 서버에 대한 직접 네트워크 액세스, 로그인을 위한 Terraform 자격 증명 발급, 필요한 모든 외부 소프트웨어가 설치되어 있는지 확인 등 Terraform 사용에 일반적으로 필요한 것보다 더 많은 세부 사항을 조정해야 합니다.

 

참고: 제공자는 최후의 수단으로만 사용해야 합니다. 대부분의 일반적인 상황에는 더 나은 대안이 있습니다. 자세한 내용은 위의 섹션을 참조하세요.


출처

https://www.terraform.io/docs/language/providers/configuration.html

https://www.terraform.io/docs/language/providers/requirements.html

https://learn.hashicorp.com/tutorials/terraform/provider-versioning?in=terraform/configuration-language&utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS

https://www.terraform.io/docs/language/resources/provisioners/syntax.html#provisioners-are-a-last-resort

 

 

반응형