`store` 블록 참조
store 블록 참조 (store block reference)
store 블록을 사용해 배포 구성에서 HCP Terraform 변수 집합의 값에 접근하고 그 시크릿을 배포에 사용해요. 이 페이지에서는 store 블록의 구성 모델, varset 스토어 타입, 그리고 예시를 다룰게요.
출처: 문서
본문
store 블록을 사용해 배포 구성에서 HCP Terraform 변수 집합의 값에 접근하고 그 시크릿을 배포에 사용해요.
배경 (Background)
HCP Terraform에서 변수 집합은 여러 워크스페이스나 Stack에 할당할 수 있는 재사용 가능한 변수의 모음이에요. 변수 집합은 API 키나 데이터베이스 비밀번호 같은 공통 구성 값을 서로 다른 환경에 걸쳐 관리하는 데 도움이 돼요.
store 블록을 사용하면 배포 구성에서 변수 집합에 접근할 수 있어요. store 블록을 정의할 때 접근하려는 변수 집합과 검색하려는 변수의 타입을 지정해요. 같은 변수 집합에서 Terraform 변수와 환경 변수 모두에 접근하려면 두 개의 별도 store 블록을 정의해야 해요.
기본적으로 변수 집합 값은 Stack 배포에서 일시적(ephemeral)이에요. Terraform은 현재 작업 동안 변수 집합 값을 사용하지만 배포의 상태에는 저장하지 않아요. 이 동작을 피하려면 stable 키워드를 사용할 수 있어요. 더 알아보려면 배포를 위한 스토어 값 유지를 참고해요.
Stack은 대상 변수 집합에 접근할 수 있어야 합니다. 즉 변수 집합이 전역적으로 사용 가능하거나 Stack을 포함하는 프로젝트 또는 Stack 자체에 할당되어야 해요.
구성 모델 (Configuration model)
store 블록은 스토어 타입에 기반해 다음 인자를 지원해요:
store "<TYPE>" "<LABEL>"블록id문자열 |name과 상호 배타적name문자열 |id와 상호 배타적category문자열
완전한 구성 (Complete configuration)
사용 가능한 모든 인자는 다음 store 블록에 정의돼 있어요:
store "<TYPE>" "<LABEL>" {
id = "<ID>" # mutually exclusive with name
name = "<NAME>" # mutually exclusive with id
category = "<CATEGORY>"
}
store 블록에 id 또는 name 중 하나를 정의해야 하지만 둘 다는 아니에요. store 블록을 정의한 후 store.<TYPE>.<LABEL>.<VARIABLE> 구문을 사용해 연결된 변수 집합 안의 특정 변수를 참조할 수 있어요.
사양 (Specification)
store 블록은 다음 구성을 지원해요.
store "<TYPE>" "<LABEL>"
store 블록은 두 개의 레이블을 요구해요: 스토어 타입과 배포 구성 안의 스토어에 대한 고유 이름이에요. varset 스토어 타입이 유일하게 사용 가능한 스토어 타입이에요.
스토어 레이블은 유효한 식별자라면 무엇이든 될 수 있으며 같은 배포 구성 파일의 모든 스토어 사이에서 고유해야 해요.
varset 스토어 타입 (varset store type)
varset 스토어 타입을 사용해 Stack이 HCP Terraform의 변수 집합에 접근할 수 있게 해요. Stack은 대상 변수 집합에 접근할 수 있어야 합니다. 즉 변수 집합이 전역적으로 사용 가능하거나 Stack을 포함하는 프로젝트에 할당되거나 Stack 자체에 할당되어야 해요.
변수 집합의 값을 참조하면 HCP Terraform은 그 값을 버리고 배포 상태에 저장하지 않아요. 배포 상태에 변수 집합 값을 유지하려면 stable 키워드를 명시적으로 사용해야 해요. 더 알아보려면 배포를 위한 스토어 값 유지를 참고해요.
인자 (Arguments)
varset 스토어 타입에 대해 다음 인자가 지원돼요:
| 인자 | 설명 | 타입 | 필수? |
|---|---|---|---|
id |
접근하려는 변수 집합의 외부 ID예요. name과 상호 배타적이에요. |
문자열 | name이 지정되지 않으면 필수 |
name |
접근하려는 변수 집합의 이름이에요. id와 상호 배타적이에요. |
문자열 | id가 지정되지 않으면 필수 |
category |
변수 집합에서 Terraform 또는 환경 변수를 사용할지 지정해요. | 문자열 | 필수 |
id
id 인자는 접근하려는 변수 집합의 외부 ID를 지정해요. 이 ID는 HCP Terraform UI에서 또는 HCP Terraform API를 사용해 찾을 수 있어요.
store "varset" "<LABEL>" {
id = "<ID>"
category = "<CATEGORY>"
}
요약 (Summary)
- 데이터 타입: 문자열
- 기본값: 없음
- 필수:
name이 지정되지 않으면 예
name
name 인자는 접근하려는 변수 집합의 이름을 지정해요. 변수 집합 이름은 HCP Terraform UI에서 또는 HCP Terraform API를 사용해 찾을 수 있어요.
store "varset" "<LABEL>" {
name = "<NAME>"
category = "<CATEGORY>"
}
요약 (Summary)
- 데이터 타입: 문자열
- 기본값: 없음
- 필수:
id가 지정되지 않으면 예
category
category 인자는 변수 집합에서 Terraform 변수 또는 환경 변수를 사용할지 지정해요. 접근하려는 변수의 타입에 따라 "terraform" 또는 "env"를 지정해요.
store "varset" "<LABEL>" {
id = "<ID>"
category = "<CATEGORY>"
}
각 store 블록은 한 가지 범주의 변수에만 접근할 수 있어요. 같은 변수 집합에서 Terraform과 환경 변수 모두에 접근해야 한다면 두 개의 별도 store 블록을 정의해요.
요약 (Summary)
- 데이터 타입: 문자열
- 기본값: 없음
- 필수: 예
예시 (Examples)
다음 예시는 store 블록의 일반적인 사용 사례를 보여줘요.
스토어 정의 및 변수 접근 (Define a store and access variables)
다음 예시는 api_keys_default_project라는 변수 집합에 접근하는 api_keys라는 varset 스토어를 정의해요:
store "varset" "api_keys" {
name = "api_keys_default_project"
category = "terraform"
}
deployment "production" {
inputs = {
database_password = store.varset.api_keys.db_password
api_key = store.varset.api_keys.external_api_key
}
}
production 배포는 api_keys 스토어의 db_password와 external_api_key 변수에 접근해 그 배포의 프로바이더를 인증해요. 스토어를 정의한 후 store.<TYPE>.<LABEL>.<VARIABLE> 구문을 사용해 특정 변수를 참조해요.
배포를 위한 스토어 값 유지 (Persist store values for deployments)
기본적으로 Stacks 배포는 변수 집합의 값을 상태에 저장하지 않아요. 이는 변수 집합 값이 일반적으로 비밀번호나 API 키 같은 민감한 데이터를 포함하기 때문이에요. 라이선스 키처럼 배포 상태에 유지해야 하는 변수의 경우 stable 키워드를 사용할 수 있어요.
배포의 상태에 변수 집합 값을 저장하려면 store에서 그 변수를 참조할 때 .stable을 추가해요:
store.varset.<LABEL>.stable.<VARIABLE>
stable 키워드는 Terraform에 그 변수 값을 배포의 상태에 저장하라고 지시해, 배포가 나중에 그 값을 참조할 수 있게 해요.
다음 예시에서 licenses 스토어는 CONSUL_LICENSES라는 변수 집합에 접근해 Consul 라이선스 키를 검색해요:
store "varset" "licenses" {
name = "CONSUL_LICENSES"
category = "terraform"
}
store "varset" "credentials" {
name = "GCP_CREDS"
category = "terraform"
}
deployment "production" {
inputs = {
gcp_credentials = store.varset.credentials.gcp_service_account_key
consul_license = store.varset.licenses.stable.consul_license_key
}
}
HCP Terraform은 consul_license_key의 값을 production 배포의 상태에 저장하지만, gcp_service_account_key는 stable로 표시되지 않았으므로 그 값을 저장하지 않아요. consul_license_key는 stable로 표시된 후에는 값을 변경할 수 없습니다.
stable 키워드를 사용해 변수 집합의 값을 참조한 후에는 배포 deployment 구성에서 stable 없이 같은 값을 다시 참조할 수 없어요. 예를 들어 다음 구성은 consul_license_key를 두 번 참조하므로 유효하지 않아요:
deployment "production" {
inputs = {
consul_license_non_ephemeral = store.varset.licenses.stable.consul_license_key
consul_license_ephemeral = store.varset.licenses.consul_license_key
}
}
이름을 사용한 변수 집합 접근 (Variable set access using name)
다음 예시에서 api_config 스토어는 HCP Terraform에서 API_CONFIGURATION이라는 이름으로 변수 집합에 접근해요:
store "varset" "api_config" {
name = "API_CONFIGURATION"
category = "terraform"
}
deployment "production" {
inputs = {
api_endpoint = store.varset.api_config.endpoint_url
api_timeout = store.varset.api_config.timeout_seconds
}
}
Terraform 및 환경 변수 분리 (Separate Terraform and environment variables)
다음 예시에서 두 store 블록은 같은 변수 집합에 접근하지만, 하나는 Terraform 변수를 검색하고 다른 하나는 환경 변수를 검색해요:
store "varset" "terraform_vars" {
id = "varset-abc123def456"
category = "terraform"
}
store "varset" "env_vars" {
id = "varset-abc123def456"
category = "env"
}
deployment "production" {
inputs = {
# From Terraform variables
instance_count = store.varset.terraform_vars.instance_count
database_password = store.varset.terraform_vars.db_password
# From environment variables
log_level = store.varset.env_vars.LOG_LEVEL
debug_mode = store.varset.env_vars.DEBUG_ENABLED
}
}
store 블록을 정의할 때 접근하려는 변수 집합과 검색하려는 변수의 타입을 지정해요. 같은 변수 집합에서 Terraform과 환경 변수 모두에 접근하려면 두 개의 별도 store 블록을 정의해야 해요.