테라폼은 바이너리 파일을 시작으로 로컬 환경에나 서버에서 원격 환경으로 원하는 대상에 API 호출을 진행한다. 따라서 각 대상이 지원하는 api를 사용해야 하며, 이를 provider라고 한다. provider가 제공한 API를 호출해 상호작용을 한다.
프로바이더 식별 정보
테라폼에서 제공하는 프로바이더는 각 서비스에서 정의한다. 하시코프의 공식이 있고, 개인이 만들 수도 있다. 다만 각 서비스에서 정의하는 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을 하면 프로바이더를 다운로드, 복사, 캐시에서 읽어오게 된다.