`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은 stagingproduction이라는 두 개의 배포를 구성해요:

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_passwordapi_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 배포 블록을 제거할 수 있어요.

더 알아보기 (Learn more)