본문 바로가기
카테고리 없음

Provider

by james_janghun 2024. 9. 13.

테라폼은 바이너리 파일을 시작으로 로컬 환경에나 서버에서 원격 환경으로 원하는 대상에 API 호출을 진행한다. 따라서 각 대상이 지원하는 api를 사용해야 하며, 이를 provider라고 한다. provider가 제공한 API를 호출해 상호작용을 한다.

 

Terraform provider Guide Docs

Terraform provider Registry

프로바이더 식별 정보

테라폼에서 제공하는 프로바이더는 각 서비스에서 정의한다. 하시코프의 공식이 있고, 개인이 만들 수도 있다. 다만 각 서비스에서 정의하는 API의 양식이 있으므로 해당 프로바이더마다 그 요청값이나 양식은 다를 것이다. 따라서 official 이라 하더라도 A프로바이더에서 B프로바이더의 전환은 불가능하다.

Tier 설명 네임스페이스
official 공식 프로바이더 (하시코프가 직접 관리, 소유) hashicorp
partner 기술 파트너사가 관리, 소유. 프로바이더에 대해 하시코프가 검정 게시한 조직의 이름(mongodb 등)
community 개별 관리자와 그룹에서 테라폼의 레지스트리에 게시 및 관리한다 개인 및 조직 계정 이름
Archived 더 이상 유지보수 되지 않는 이전 프로바이더 hashicorp 혹은 다른 조직

 

 

 

단일 프로바이더의 다중 정의

하나의 프로바이더를 다중으로 사용할 때 쓰인다. 예를 들어 다중 계정의 AWS 경우이다.

 

다음과 같이 alias를 선언해주고, provider에서 <provider>.<alias>를 사용해 명시한다.

provider "aws" {
  region = "ap-southeast-1"
}

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

resource "aws_instance" "app_server" {
  provider = aws.seoul
  ami = "ami-1234"
  instance_type = "t3.micro"
}

 

프로바이더의 요구사항 정의

프로바이더에 요청하는 사항은 required_providers 블록에 정의한다. source는 프로바이더 다운로드 경로를 지정하고, version은 버전정보를 명시할 수 있다.

- 호스트 주소 :  기본값 registry.terraform.io

- 네임스페이스 : 지정된 레지스트리 내에서 구분하는 네임스페이스, 공개된 레지스트리 혹은 terraform cloud의 비공개 레지스트리의 프로바이더를 게시하는 조직을 의미함

- 유형 : 프로바이더에서 관리되는 플랫폼이나 서비스 이름으로 일반적으로 접두사와 일치하나 일부 예외가 있을 수 있다.

terraform {
  required_providers {
    <프로바이더 로컬 이름> = {
      source = [<호스트 주소>/]<네임스페이스>/<유형>
      version = <버전 지정>
     }
   }
 }

 

프로바이더 설치

terraform init을 하면 프로바이더를 다운로드, 복사, 캐시에서 읽어오게 된다.