`deployment` 블록 참조
deployment 블록 참조 (deployment block reference)
deployment 블록을 사용해 Stack의 인프라를 몇 번 배포할지 정의해요. .tfdeploy.hcl 파일(Stack의 배포 구성 파일)에 deployment 블록을 정의할 수 있어요. 이 페이지에서는 deployment 블록의 구성 모델과 지원 인자를 다룰게요.
출처: 문서
본문
deployment 블록을 사용해 Stack의 인프라를 몇 번 배포할지 정의해요. .tfdeploy.hcl 파일(Stack의 배포 구성 파일)에 deployment 블록을 정의할 수 있어요.
배경 (Background)
참고: HCP Terraform은 Stack당 최대 500개의 배포를 지원해요.
deployment 블록은 Stack의 인프라를 어떻게 배포할지 정의해요. 각 배포는 Stack 인프라의 별도 인스턴스를 나타내요. 각 배포는 다른 Stack 배포와 완전히 분리된 자체 격리 상태 데이터를 유지 관리해요.
각 Stack은 적어도 하나의 deployment 블록을 요구하며, 다른 입력 값으로 Stack의 인프라를 다시 배포하고 싶을 때마다 추가 deployment 블록을 추가할 수 있어요. 더 알아보려면 배포 구성 정의를 참고해요.
deployment 블록 외에도 tfdeploy.hcl 파일에서 다음 구성 블록을 정의할 수 있어요:
deployment_auto_approve블록을 사용해 특정 조건에 기반해 배포 plan을 자동으로 승인하는 규칙을 정의해요.deployment_group블록을 사용해 특정 배포에deployment_auto_approve규칙을 할당해요.identity_token블록을 사용해 OIDC로 프로바이더 구성으로 배포를 인증해요.store블록을 사용해 배포 구성에서 키-값 시크릿을 정의하고 HCP Terraform의 기존 변수 집합을 사용해요.locals블록을 사용해 배포 구성 안에서 재사용할 수 있는 로컬 값을 정의해요.publish_output블록을 사용해 다른 Stack에서 사용할 수 있도록 할 값을 출력해요.upstream_input블록을 사용해 다른 Stack에서 입력을 소스로 사용해요.
구성 모델 (Configuration model)
deployment 블록은 다음 인자를 지원해요:
deployment "<NAME>"블록inputs맵deployment_group배포 그룹에 대한 참조destroy불리언import불리언
완전한 구성 (Complete configuration)
사용 가능한 모든 인자는 다음 deployment 블록에 정의돼 있어요:
deployment "<NAME>" {
inputs = {
<KEY> = <VALUE>
}
deployment_group = "deployment_group.<NAME>"
destroy = <BOOL>
}
사양 (Specification)
deployment 블록은 다음 구성을 지원해요.
deployment "<NAME>"
deployment 키워드 뒤의 레이블은 배포의 이름이며, 같은 배포 구성 파일의 모든 배포 사이에서 고유해야 해요. 배포의 이름은 유효한 식별자라면 무엇이든 될 수 있어요.
HCP Terraform이 만든 후에는 배포의 이름을 바꿀 수 없어요. 배포 레이블을 변경하면 새 레이블로 새 배포를 만들고 이전 배포를 파괴해요.
deployment 블록은 다음 인자를 지원해요:
| 인자 | 설명 | 타입 | 필수? |
|---|---|---|---|
inputs |
이 배포를 위한 Stack 변수 이름을 값에 매핑한 것이에요. | 맵 | 필수 |
deployment_group |
이 배포가 속한 그룹에 대한 참조예요. | 참조 | 선택 |
destroy |
HCP Terraform이 이 배포를 파괴해야 하는지 나타내는 불리언 플래그예요. | 불리언 | 선택 |
inputs
inputs 인자는 이 특정 배포를 위한 Stack 변수 이름을 값에 매핑하는 것을 정의해요.
deployment "<NAME>" {
inputs = {
<KEY> = <VALUE>
<KEY> = <VALUE>
}
}
inputs 맵의 키는 컴포넌트 구성에 정의된 변수의 이름에 대응해야 하고, 값은 그 변수의 타입 제약을 충족하는 유효한 HCL 식이어야 해요. 입력 값 식은 locals, identity_token, store, upstream_value 블록을 참조할 수 있어요.
요약 (Summary)
- 데이터 타입: 오브젝트
- 기본값: 없음
- 필수: 예
deployment_group
참고: 배포 그룹은 현재 그룹당 하나의 배포만 지원해요.
deployment_group 인자를 사용해 이 배포를 그룹화할 배포 그룹을 지정할 수 있어요.
deployment_group "<NAME>" {
auto_approve_checks = [deployment_auto_approve.<NAME>]
}
deployment "<NAME>" {
inputs = {
<KEY> = <VALUE>
<KEY> = <VALUE>
}
deployment_group = "deployment_group.<NAME>"
}
배포 그룹을 사용해 배포의 수명 주기를 관리할 수 있는 오케스트레이션 규칙을 활성화할 수 있어요. 배포 그룹에 대한 자세한 내용은 배포 실행 조건 설정을 참고해요.
배포가 배포 그룹을 지정하지 않으면 Terraform은 _default라는 이름의 독립적인 배포 그룹을 자동으로 생성해요.
요약 (Summary)
- 데이터 타입: 참조
- 기본값: 기본적으로 Terraform은 그룹을 지정하지 않는 배포에 대해 배포 그룹을 자동으로 생성해요.
- 필수: 예
destroy
destroy 인자를 사용해 HCP Terraform이 이 배포를 파괴할 수 있다는 것을 구성에서 선언할 수 있어요.
deployment "<NAME>" {
inputs = {
<KEY> = <VALUE>
<KEY> = <VALUE>
}
destroy = true
}
destroy = true를 설정하면 HCP Terraform에 Stack에서 이 배포를 제거하라고 지시해요. plan을 적용한 후 파괴된 배포에 해당하는 deployment 블록을 구성에서 제거할 수 있어요.
배포를 파괴하는 데 필요한 프로바이더 인증이 구성에 있도록 보장하려면 destroy 인자를 사용해 배포를 제거할 것을 권장해요.
요약 (Summary)
- 데이터 타입: 불리언
- 기본값:
false
import
tf-migrate CLI는 기존 HCP Terraform 워크스페이스의 상태를 Stack 배포로 마이그레이션할 수 있어요. tf-migrate CLI는 기존 워크스페이스의 상태를 특정 배포로 가져올 때 import 인자를 자동으로 true로 설정해요.
deployment "<NAME>" {
inputs = {
<KEY> = <VALUE>
<KEY> = <VALUE>
}
import = <BOOL>
}
Terraform migrate는 import 인자를 설정해 Stack의 나머지 배포가 정상적으로 plan을 계속할 수 있다는 것을 HCP Terraform에 알려주며, import가 있는 배포는 상태를 마이그레이션하고 있어요.
워크스페이스를 Stack 배포로 마이그레이션하는 방법에 대해 더 알아보려면 Terraform migrate를 참고해요.
요약 (Summary)
- 데이터 타입: 불리언
- 기본값:
false
예시 (Examples)
다음 예시는 deployment 블록의 일반적인 사용 사례를 보여줘요.
기본 배포 (Fundamental deployment)
다음 예시에서 production 배포는 aws_region, instance_count, environment의 변수 값을 구성해요:
deployment "production" {
inputs = {
aws_region = "us-west-1"
instance_count = 2
environment = "production"
}
}
이 배포에 대한 일치하는 컴포넌트 구성(tfcomponent.hcl 파일)은 inputs 맵에 정의된 것과 같은 변수 이름과 타입을 포함해야 해요.
production 배포는 deployment_group을 지정하지 않으므로 Terraform이 배포 그룹을 자동으로 생성해요. production 배포에 대해 생성된 배포 그룹의 이름은 production_default예요.
배포 그룹 설정 (Set deployment group)
다음 예시에서 web 배포는 production 배포 그룹의 일부예요:
deployment "web" {
inputs = {
aws_region = "us-west-1"
instance_count = 2
environment = "production"
}
deployment_group = "deployment_group.production"
}
배포 그룹을 사용해 배포의 수명 주기를 관리할 수 있는 오케스트레이션 규칙을 활성화할 수 있어요. 배포 그룹에 대한 자세한 내용은 배포 실행 조건 설정을 참고해요.
여러 배포 (Multiple deployments)
다음 예시에서 Terraform은 staging과 production이라는 두 개의 배포를 구성해요:
deployment "staging" {
inputs = {
aws_region = "us-east-1"
instance_count = 1
environment = "staging"
}
}
deployment "production" {
inputs = {
aws_region = "us-west-1"
instance_count = 3
environment = "production"
}
}
이 구성을 실행하면 HCP Terraform은 같은 컴포넌트 구성을 사용하는 두 개의 별도 배포를 만들어요. staging 배포는 us-east-1 리전을 사용하고 인스턴스가 하나이며, production 배포는 us-west-1 리전을 사용하고 인스턴스가 세 개예요.
변수 집합 참조 (Reference variable sets)
다음 예시에서 production 배포는 ID가 varset-SEtkL6Bq91XujTsR인 HCP Terraform의 변수 집합에서 database_password와 api_key를 검색해요:
store "varset" "secrets" {
id = "varset-SEtkL6Bq91XujTsR"
category = "terraform"
}
deployment "production" {
inputs = {
database_password = store.varset.secrets.db_password
api_key = store.varset.secrets.api_key
instance_count = 5
}
}
Stack 배포에서 HCP Terraform의 변수 집합을 참조하는 방법에 대해 더 알아보려면 store 블록을 참고해요.
ID 토큰으로 인증 (Authenticate with identity tokens)
다음 예시에서 production 배포는 identity_token.aws.jwt의 JWT를 사용해 aws 프로바이더와 OIDC 인증을 수행해요:
identity_token "aws" {
audience = ["aws.workload.identity"]
}
deployment "production" {
inputs = {
aws_region = "us-west-2"
role_arn = "arn:aws:iam::123456789012:role/my-oidc-role"
aws_token = identity_token.aws.jwt
}
}
Stacks에는 워크로드 ID 토큰(일명 JWT 토큰)을 만드는 내장 identity_token 블록이 있어요. 이 토큰을 사용해 Stacks을 Terraform 프로바이더와 안전하게 인증할 수 있어요. 더 알아보려면 Stack 인증을 참고해요.
Stack 간 값 전달 (Pass values between Stacks)
다음 예시에서 application 배포는 vpc_id 출력을 노출하고 networking이라는 업스트림 Stack에서 private_subnet_ids를 검색해요:
publish_output "vpc_id" {
description = "The networking Stack's VPC's ID."
value = application.network.vpc_id
}
upstream_input "network_stack" {
type = "stack"
source = "app.terraform.io/<ORG>/<PROJECT>/networking"
}
deployment "application" {
inputs = {
subnet_ids = upstream_input.network_stack.private_subnet_ids
instance_count = 3
}
}
구성을 적용한 후 같은 프로젝트의 모든 Stack이 upstream_input 블록을 선언해 application 배포의 vpc_id 출력을 참조할 수 있어요. Stacks을 함께 연결하는 방법에 대해 더 알아보려면 한 Stack에서 다른 Stack으로 데이터 전달을 참고해요.
배포 파괴 (Destroy a deployment)
배포를 파괴하려면 deployment 블록에 destroy 인자를 true로 설정해요. 다음 예시에서 web 배포는 파괴용으로 표시돼요:
deployment "web" {
inputs = {
aws_region = "us-west-1"
instance_count = 2
environment = "production"
}
destroy = true
}
이 배포에 대한 plan을 실행하면 HCP Terraform은 web 배포를 파괴해요. plan을 적용한 후 구성에서 web 배포 블록을 제거할 수 있어요.