배포 구성 정의하기
배포 구성 정의하기 (Define deployment configuration)
Stacks에서 배포는 인프라를 여러 환경, 리전, 또는 계정에 걸쳐 복제할 수 있게 해줘요. 각 배포는 격리된 자체 state를 가져서, 한 배포의 변경이 다른 배포에 영향을 주지 않음을 보장해요. HCP Terraform이 인프라를 어떻게 배포하는지 정의하는 배포 구성을 작성하는 방법을 알아봐요.
출처: 문서
본문
참고: HCP Terraform은 Stack당 최대 500개의 배포를 지원해요.
배포 구성 파일(tfdeploy.hcl)은 HCP Terraform이 Stack의 인프라를 몇 번 배포해야 하는지 정의해요. 배포 구성에서 deployment 블록을 정의하면 그 deployment 블록의 입력 값으로 Stack의 인프라를 재배포하라고 테라폼에 알려줘요. Stack은 최소한 하나의 배포가 있어야 해요.
또한 배포 그룹을 만들어 지정한 기준에 맞는 배포 실행을 자동 승인하는 규칙을 정의할 수도 있어요. 자세한 내용은 배포 실행 조건 설정을 참고하세요.
배포 구성 파일 작성하기 (Write a deployment configuration file)
배포 구성 파일은 저장소의 최상위 레벨에 있으며 .tfdeploy.hcl 파일 확장자를 사용해요. 전통적인 테라폼 구성처럼 배포 구성을 여러 파일로 나눠 구성할 수 있어요.
배포 구성 파일에서 Stack의 배포를 설정하기 위해 다음 블록들을 정의할 수 있어요.
deployment블록 — Stack의 인프라를 몇 번, 어떤 입력 값으로 배포할지 정의해요.deployment_group블록 — 배포를 그룹으로 묶어 공유 설정과 자동 승인 규칙을 구성해요.deployment_auto_approve블록 — 특정 조건에 따라 배포 plan을 자동 승인하는 규칙을 정의해요.identity_token블록 — 클라우드 프로바이더와의 OIDC 인증을 위해 테라폼이 생성하는 JSON Web Token(JWT)을 정의해요.store블록 — 배포 구성에서 외부 시크릿 저장소와 변수 집합(variable sets)에 접근할 수 있게 해줘요.publish_output블록 — 같은 프로젝트의 다른 Stacks가 소비할 수 있는 값을 Stack에서 내보내요.upstream_input블록 — 같은 프로젝트의 다른 Stack의 출력을 소비해서 현재 Stack의 입력으로 사용해요.locals블록 — 배포 구성 안에서 참조할 수 있는 로컬 값을 정의해요.
배포 정의하기 (Define deployments)
배포 구성 파일에서 Stack을 배포하려는 각 환경이나 리전에 대해 새 deployment 블록을 만들 수 있어요.
다음은 프로덕션 환경의 배포를 정의해요.
# deployments.tfdeploy.hcl
deployment "production" {
inputs = {
aws_region = "us-west-1"
instance_count = 2
}
}
deployment 블록은 그 배포가 필요로 하는 고유한 구성들을 지정할 수 있는 inputs 맵을 받아요. 다음 예제에서 production과 staging 배포는 동일한 Stack 구성을 사용하지만, 배포마다 다른 값을 입력해요.
# deployments.tfdeploy.hcl
deployment "production" {
inputs = {
aws_region = "us-west-1"
instance_count = 2
}
}
deployment "staging" {
inputs = {
aws_region = "us-west-1"
instance_count = 1
}
}
배포를 정의했으면, 배포가 사용하는 프로바이더를 인증하는 단계로 넘어갈 수 있어요.
배포 인증 (Deployment authentication)
배포의 프로바이더 인증을 설정하려면 다음 블록들을 사용해요.
store블록 — HCP Terraform 변수 집합(variable set)의 값을 참조할 수 있게 해줘요.identity_token블록 — OIDC 인증용 JSON Web Token(JWT)을 생성해요.
store 블록을 사용하면 배포 구성에서 변수 집합에 접근할 수 있어요. 다음 예제에서 api_keys store는 api_keys_default_project라는 변수 집합에서 API 키를 가져와요.
# deployments.tfdeploy.hcl
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 배포는 이제 ID가 varset-abc123456인 변수 집합의 값을 참조할 수 있고, 그 값들을 해당 배포의 컴포넌트와 프로바이더가 사용할 수 있게 돼요. store 블록에 대해 더 알아보려면 store 블록 레퍼런스를 참고하세요.
identity_token 블록은 해당 배포의 컴포넌트가 OIDC를 사용해 프로바이더에 인증할 JSON Web Token(JWT)을 HCP Terraform이 생성하라고 지시해요. 예를 들어 특정 role ARN으로 AWS 프로바이더에 인증하도록 배포를 설정할 수 있어요.
# deployments.tfdeploy.hcl
identity_token "aws" {
audience = ["aws.workload.identity"]
}
deployment "staging" {
inputs = {
aws_region = "eu-west-1"
role_arn = "arn:aws:iam::123456789101:role/my-oidc-role"
aws_token = identity_token.aws.jwt
}
}
그 배포는 aws_token이라는 JWT 토큰을 생성하며, 이는 해당 배포의 컴포넌트와 프로바이더가 사용할 수 있어요.
# providers.tfcomponent.hcl
provider "aws" "this" {
config {
region = var.aws_region
assume_role_with_web_identity {
role_arn = var.aws_role
web_identity_token = var.aws_token
}
}
}
identity_token 블록에 대해 더 알아보려면 identity_token 블록 레퍼런스를 참고하세요. Stacks에서 인증에 대한 자세한 내용은 Stack 인증을 참고하세요.
배포 실행 자동 승인 (Automatically approve deployment runs)
프리미엄 티어: 배포 그룹용 오케스트레이션 규칙 실행은 HCP Terraform Plus 에디션에서 사용할 수 있어요. 자세한 내용은 HCP Terraform 가격을 참고하세요.
지정한 기준에 맞는 배포 실행을 자동 승인하는 규칙을 정의하려면 배포 그룹을 만들 수 있어요.
참고: 배포 그룹은 현재 그룹당 하나의 배포만 지원해요.
새 그룹을 만들려면 deployment_group 블록을 정의하고, 그 배포 그룹이 적용할 자동 승인 규칙을 지정해요. 다음 예제에서 production 배포 그룹은 no_destroys 규칙을 적용해요.
# deployments.tfdeploy.hcl
deployment_auto_approve "no_destroys" {
check {
condition = context.plan.changes.remove == 0
reason = "Plan removes ${context.plan.changes.remove} resources."
}
}
deployment_group "production" {
auto_approve_checks = [
deployment_auto_approve.no_destroys
]
}
no_destroys 규칙은 리소스를 제거하지 않는 배포 실행을 자동 승인해요. 배포 그룹과 그 그룹이 적용하는 규칙을 정의한 뒤에는 배포를 그 그룹에 추가할 수 있어요.
다음 예제는 web 배포를 production 배포 그룹에 추가해요.
# deployments.tfdeploy.hcl
deployment_auto_approve "no_destroys" {
check {
condition = context.plan.changes.remove == 0
reason = "Plan removes ${context.plan.changes.remove} resources."
}
}
deployment_group "production" {
auto_approve_checks = [
deployment_auto_approve.no_destroys
]
}
deployment "web" {
inputs = {
environment = "production"
region = "us-west-2"
}
deployment_group = deployment_group.production
}
이제 web 배포가 리소스를 파괴하지 않는 배포 실행을 생성할 때마다 HCP Terraform이 그 실행을 자동으로 승인해요.
배포를 그룹에 할당하지 않으면 테라폼이 자동으로 그 배포를 위한 기본 배포 그룹을 만들어요. 배포 그룹 정의에 대해 더 알아보려면 deployment_group 레퍼런스를 참고하세요. 배포 그룹 오케스트레이션 규칙 설정에 대해 더 알아보려면 배포 실행 조건 설정을 참고하세요.
지원되는 테라폼 함수
배포 구성은 테라폼 함수의 부분집합을 지원해요. Stacks 배포가 지원하는 함수 목록은 내장 함수(Built-in Functions)를 참고하세요.
다음 단계
HCP Terraform으로 Stack의 인프라를 배포하는 방법은 Stack 만들기를 참고하세요.
더 알아보기 (Learn more)
- 배포 실행 조건 설정 — 자동 승인 규칙.
- Stack 간 데이터 전달 — 배포 간 데이터 공유.
- Stack 인증 — 프로바이더 인증.