provider 메타-인자
provider 메타-인자 (provider reference)
provider 메타-인자로 리소스에 어떤 프로바이더 구성을 사용할지 지정하는 방법을 설명해 드릴게요. 여러 리전의 인프라를 관리할 때 유용해요.
출처: 문서
본문
provider 메타-인자는 리소스에 어떤 프로바이더 구성을 사용할지 지정해서, 리소스 유형 이름에 기반해 하나를 선택하는 Terraform의 기본 동작을 재정의해요. provider 인자는 프로바이더 구성 설정을 담는 provider 블록과 구별된다는 점을 주의해요. 자세한 내용은 프로바이더 참고.
사용법 (Usage)
기본적으로 Terraform은 리소스 유형의 첫 단어에서 프로바이더의 로컬 이름을 결정하고 그 프로바이더의 기본 구성을 사용해 리소스를 만들어요. 예를 들어 google_compute_instance 리소스 유형은 자동으로 google 프로바이더의 기본 구성을 사용해요.
다만 기본 동작은 list 블록에는 적용되지 않아요. Terraform이 리소스를 쿼리할 때 기본 provider 구성을 암묵적으로 사용하지 않기 때문이에요.
구성에 여러 provider 블록을 추가하고 리소스 정의의 provider 인자로 어떤 프로바이더를 사용할지 지정할 수 있어요. 그 값으로 provider 인자는 <provider>.<alias> 형식으로 형식화된 참조를 기대해요. 다음 예시에서 google_compute_instance 리소스는 europe 별칭이 있는 프로바이더 구성을 선택해요:
provider "google" {
region = "us-central1"
}
provider "google" {
alias = "europe"
region = "europe-west1"
}
resource "google_compute_instance" "example" {
provider = google.europe
# ...
}
따옴표는 필요 없어요. Terraform이 표현식을 안전하게 평가하기 전에 의존성 그래프를 구성하면서 provider 값을 해석해야 하므로 임의 표현식은 허용되지 않아요.
리소스는 항상 연결된 프로바이더에 대한 암묵적 의존성을 가져요. 이는 Terraform이 리소스에 어떤 작업을 하기 전에 프로바이더가 완전히 구성되도록 보장해요.
단일 프로바이더에 대해 여러 구성을 만드는 것은 멀티리전 서비스의 다른 리전에서 리소스를 관리하는 일반적인 패턴이에요.
지원되는 구성 (Supported constructs)
provider를 다음 Terraform 구성 블록에서 사용할 수 있어요: check 블록, data 블록, ephemeral 블록, import 블록, resource 블록. 다음 쿼리 구성 블록에서도 사용할 수 있어요: list 블록.
예시 사용 사례 (Example use cases)
다른 리전에서 데이터 소스 쿼리 (Query a data source in different region)
다음 예시에서 google_compute_instance 데이터 소스는 europe 별칭이 있는 프로바이더 구성을 선택해요:
provider "google" {
region = "us-central1"
}
provider "google" {
alias = "europe"
region = "europe-west1"
}
data "google_compute_instance" "example" {
provider = google.europe
# ...
}
ephemeral 리소스에 대체 프로바이더 사용 (Use alternate provider for an ephemeral resource)
다음 예시에서 Terraform은 aws.west 프로바이더 구성을 사용해 us-west-2 리전에 aws_secretsmanager_secret_version 리소스를 만들어요:
provider "aws" {
region = "us-east-1"
}
provider "aws" {
alias = "west"
region = "us-west-2"
}
ephemeral "aws_secretsmanager_secret_version" "db_password" {
provider = aws.west
secret_id = aws_secretsmanager_secret.db_password.id
}
대체 프로바이더 구성으로 리소스 가져오기 (Import resources using an alternate provider configuration)
다음 예시에서 Terraform은 east 별칭에 따라 ID i-096fba6d03d36d262인 AWS 인스턴스를 aws_instance.web 리소스로 가져와요:
provider "aws" {
region = "us-west-1"
}
provider "aws" {
alias = "east"
region = "us-east-1"
}
import {
id = "i-096fba6d03d36d262"
to = aws_instance.web
provider = aws.east
}
resource "aws_instance" "web" {
# ...
}