컴포넌트 구성용 `provider` 블록 참조
컴포넌트 구성용 provider 블록 참조 (provider block reference for component configurations)
Terraform은 프로바이더라고 하는 플러그인에 의존해 클라우드 프로바이더, SaaS 프로바이더 및 기타 API와 상호작용해요. provider 블록을 사용해 Stack의 선언된 프로바이더를 구성해요. 이 페이지에서는 컴포넌트 구성의 provider 블록 구성 방법과 지원 인자를 다룰게요.
출처: 문서
본문
Terraform은 프로바이더라고 하는 플러그인에 의존해 클라우드 프로바이더, SaaS 프로바이더 및 기타 API와 상호작용해요. provider 블록을 사용해 Stack의 선언된 프로바이더를 구성해요.
.tf로 끝나는 전통적인 Terraform 구성 파일에서 provider 블록을 선언한다면 Terraform 구성 provider 블록 참조를 대신 참고해요.
배경 (Background)
컴포넌트 구성에서 프로바이더를 사용하려면 먼저 tfcomponent.hcl 파일의 최상위 수준에서 required_providers 블록에 그 프로바이더를 선언해야 해요.
프로바이더 선언 후 provider 블록을 사용해 프로바이더를 더 구성해요. 전통적인 Terraform 구성과 달리 컴포넌트 구성의 provider 블록은 다음을 지원해요:
- 동적 프로바이더 구성을 위한
for_each메타-인자. - 블록 헤더에서 프로바이더 별칭 정의.
- 프로바이더 인자를 전달하기 위한
config블록 사용.
프로바이더를 구성한 후 component 블록의 providers 인자를 사용해 Stack의 component 블록에 그들을 전달해요. 구성을 컴포넌트에 직접 전달하면 Stack의 모든 컴포넌트가 같은 프로바이더 구성을 사용하도록 보장할 수 있어요. 더 알아보고 예시를 보려면 프로바이더 선언을 참고해요.
구성 모델 (Configuration model)
provider 블록은 다음 인자를 지원해요:
provider "<TYPE>" "<ALIAS>"블록config블록for_each메타-인자
완전한 구성 (Complete configuration)
사용 가능한 모든 인자는 다음 provider 블록에 정의돼 있어요:
provider "<TYPE>" "<ALIAS>" {
for_each = <FOR_EACH>
config {
}
}
사양 (Specification)
provider 블록은 다음 구성을 지원해요.
provider "<TYPE>" "<ALIAS>"
provider 블록은 두 개의 레이블을 요구해요: 프로바이더의 이름과 별칭이에요. 프로바이더 이름은 required_providers 블록의 프로바이더 이름과 일치해야 해요. 프로바이더 별칭은 이 특정 프로바이더 구성을 위한 고유 식별자 역할을 해요.
provider 블록은 다음 인자를 지원해요:
| 인자 | 설명 | 타입 | 필수? |
|---|---|---|---|
config |
프로바이더의 구성 인자를 포함하는 블록이에요. 프로바이더가 Terraform이 사용하기 전에 구성해야 하는 경우 config 인자는 필수예요. |
블록 | 선택 |
for_each |
맵이나 집합에 기반해 프로바이더 구성의 여러 인스턴스를 만들어요. | 맵 또는 집합 | 선택 |
config
config 블록은 프로바이더의 구성 인자를 포함해요. 프로바이더의 구성 인자는 각 프로바이더에 특정하며 프로바이더 개발자가 문서화해요.
provider "<TYPE>" "<ALIAS>" {
config {
<KEY> = <VALUE>
}
}
컴포넌트 구성은 모든 프로바이더 인자가 config 블록 안에 중첩되도록 요구해요.
요약 (Summary)
- 데이터 타입: 블록
- 기본값: 없음
for_each
for_each 메타-인자는 값의 맵이나 집합에 기반해 프로바이더 구성의 여러 인스턴스를 만들어요. for_each 메타-인자를 사용하면 입력에 기반해 프로바이더 구성을 동적으로 만들 수 있으며, 이는 다중 리전 배포에 유용해요.
provider "<TYPE>" "<ALIAS>" {
for_each = [ "<VALUE>" ]
# . . .
}
provider "<TYPE>" "<ALIAS>" {
for_each = {
"<KEY>" = "<VALUE>"
}
}
for_each를 사용하면 component 블록에서 provider.<TYPE>.<ALIAS>[<KEY>] 구문을 사용해 개별 프로바이더 인스턴스를 참조할 수 있어요.
for_each는 메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 리소스를 어떻게 생성하고 관리할지 제어해요. 이 인자가 어떻게 동작하는지에 대한 자세한 내용은 for_each 참조를 참고해요.
요약 (Summary)
- 데이터 타입: 맵 또는 집합
- 기본값: 없음
예시 (Examples)
다음 예시는 Stacks에서 provider 블록의 일반적인 사용 사례를 보여줘요.
기본 프로바이더 구성 (Fundamental provider configuration)
다음 예시에서 Terraform은 var.aws_region의 리전으로 AWS 프로바이더 main을 구성하고 var.role_arn의 역할 ARN과 var.identity_token의 ID 토큰을 사용해 인증해요:
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.7.0"
}
}
provider "aws" "main" {
config {
region = var.aws_region
assume_role_with_web_identity {
role_arn = var.role_arn
web_identity_token = var.identity_token
}
}
}
프로바이더를 정의한 후 providers 인자를 사용해 component 블록에 그들을 전달해요:
component "storage" {
source = "./modules/s3"
providers = {
aws = provider.aws.main
}
inputs = {
bucket_name = "my-bucket"
}
}
Stacks 내에서 클라우드 프로바이더로 인증하는 방법에 대해 더 알아보려면 프로바이더 선언을 참고해요.
다중 리전 프로바이더 구성 (Multi-region provider configuration)
다음 예시에서 Terraform은 var.regions의 각 리전에 대해 AWS 프로바이더 regional을 만들어요. Terraform은 var.environment의 환경 태그와 each.value를 사용한 리전별 태그로 각 프로바이더 구성을 만들어요:
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.7.0"
}
}
provider "aws" "regional" {
for_each = var.regions
config {
region = each.value
assume_role_with_web_identity {
role_arn = var.role_arn
web_identity_token = var.identity_token
}
default_tags {
tags = {
Environment = var.environment
Region = each.value
}
}
}
}
component 블록에서 개별 프로바이더 인스턴스를 참조하려면 provider.<TYPE>.<ALIAS>[<KEY>] 구문을 사용해요. 예를 들어 us-west-2 리전의 regional 프로바이더를 참조하려면 provider.aws.regional["us-west-2"]를 사용해요.
각 리전에 대해 여러 컴포넌트를 만들려면 component 블록에서 for_each를 사용할 수도 있어요:
component "regional_storage" {
for_each = var.regions
source = "./modules/s3"
providers = {
aws = provider.aws.regional[each.value]
}
inputs = {
region = each.value
bucket_name = "my-bucket-${each.value}"
}
}