`deployment_auto_approve` 블록 참조

deployment_auto_approve 블록 참조 (deployment_auto_approve block reference)

deployment_auto_approve 블록을 사용해 특정 조건에 기반해 배포 plan을 자동으로 승인하는 규칙을 정의해요. 이 페이지에서는 deployment_auto_approve 블록의 구성 모델, 지원 인자, 그리고 예시를 다룰게요.

출처: 문서

본문

deployment_auto_approve 블록을 사용해 특정 조건에 기반해 배포 plan을 자동으로 승인하는 규칙을 정의해요.

배경 (Background)

deployment_auto_approve 블록은 특정 조건이 충족될 때 배포 plan을 자동으로 승인하는 규칙을 정의해요.

deployment_group 블록은 하나 이상의 deployment_auto_approve 블록을 참조할 수 있어요. 배포 그룹의 plan이 자동으로 적용되려면 deployment_auto_approve 블록 안의 모든 검사가 통과해야 해요.

기본적으로 각 Stack에는 empty_plan이라는 deployment_auto_approve 규칙이 있으며, 이 규칙은 변경 사항이 없는 plan을 자동으로 승인해요.

구성 모델 (Configuration model)

deployment_auto_approve 블록은 다음 인자를 지원해요:

  • deployment_auto_approve "<NAME>" 블록
    • check 블록
      • condition
      • reason 문자열

완전한 구성 (Complete configuration)

사용 가능한 모든 인자는 다음 deployment_auto_approve 블록에 정의돼 있어요:

deployment_auto_approve "<NAME>" {
  check {
    condition = <CONDITION>
    reason    = "<REASON>"
  }
}

사양 (Specification)

deployment_auto_approve 블록은 다음 구성을 지원해요.

deployment_auto_approve "<NAME>"

deployment_auto_approve 블록은 Stack 안에서 자동 승인 규칙의 고유한 이름 역할을 하는 레이블을 요구해요.

deployment_auto_approve 블록에서 다음 인자가 지원돼요:

인자 설명 타입 필수?
check 규칙에 대한 조건과 이유를 포함하는 블록이에요. 블록 필수

check

check 블록은 deployment_auto_approve 블록이 plan을 자동으로 승인하려면 충족되어야 하는 조건을 포함해요. deployment_auto_approve 블록은 적어도 하나의 check 블록을 포함해야 해요.

deployment_auto_approve "<NAME>" {
  check {
    condition = <CONDITION>
    reason    = "<REASON>"
  }

  check {
    condition = <CONDITION>
    reason    = "<REASON>"
  }
}

check 블록은 다음 인자를 지원해요:

인자 설명 타입 필수?
condition Terraform이 평가하는 식이에요. 식이 true로 평가되면 check 블록은 통과해요. 필수
reason 조건이 false로 평가될 때 표시할 메시지예요. 수동 승인이 필요할 때 HCP Terraform에 오류 메시지가 표시돼요. 문자열 필수

condition

condition 인자는 검사가 통과하려면 true로 평가되어야 하는 식을 포함해요. condition 인자는 현재 배포 plan에 대한 정보를 포함하는 context 변수에 접근할 수 있어요.

deployment_auto_approve "<NAME>" {
  check {
    condition = context.<ATTRIBUTE>
    # ...
  }
}

배포 plan 컨텍스트 (Deployment plan context)

condition 인자는 현재 배포 plan에 대한 정보를 포함하는 context 변수에 접근할 수 있어요. context 변수는 다음 인자를 포함해요:

인자 설명 타입
operation HCP Terraform이 수행하는 작업으로, "plan" 또는 "apply" 중 하나예요. 문자열
success 작업이 성공하는지 여부예요. false이면 errors 인자가 실패를 설명하는 진단 메시지를 포함해요. 불리언
plan 현재 plan에 대한 데이터를 포함하는 오브젝트예요. 오브젝트
errors 작업의 진단 오류 메시지 오브젝트예요. 오브젝트의 집합
warnings 작업의 진단 경고 메시지 오브젝트예요. 오브젝트의 집합

context.errorscontext.warnings의 진단 메시지 오브젝트는 다음 인자를 포함해요:

인자 설명 타입
summary 진단 메시지의 간략한 요약이에요. 문자열
detail 진단 메시지에 대한 자세한 정보예요. 문자열

context.plan 오브젝트는 다음 인자를 포함해요:

인자 설명 타입
mode plan 모드로, "normal", "refresh-only", "import" 또는 "destroy" 중 하나예요. 문자열
applyable Terraform이 plan을 적용할 수 있는지 여부예요. 불리언
changes plan의 모든 변경 사항의 요약 오브젝트예요. 오브젝트
component_changes 각 컴포넌트 인스턴스에 대한 변경 요약 오브젝트예요. 오브젝트의 맵
replans 이 시퀀스의 재계획 횟수로, 0부터 시작해요. 정수
deployment 현재 배포에 대한 참조예요. 오브젝트

context.plan.component_changes의 오브젝트는 다음 인자를 포함해요:

인자 설명 타입
add 추가할 리소스의 수예요. 정수
change 변경할 리소스의 수예요. 정수
import 가져올 리소스의 수예요. 정수
remove 제거할 리소스의 수예요. 정수
total 리소스 작업의 총 수예요. 정수

context.plan.deployment의 오브젝트는 다음 인자를 포함해요:

인자 설명 타입
deployment_name 이 plan을 실행하는 배포의 이름이에요. 이 인자를 사용해 어떤 배포가 이 plan을 실행하는지 확인할 수 있어요. 예: context.plan.deployment.deployment_name == "production". 문자열

요약 (Summary)

  • 데이터 타입: 식
  • 기본값: 없음
  • 필수: 예

reason

reason 인자는 check가 왜 실패했는지 설명하는 사람이 읽을 수 있는 메시지를 제공해요. HCP Terraform은 조건이 false로 평가되고 수동 승인이 필요할 때 이 메시지를 표시해요.

check {
  condition = <CONDITION>
  reason    = "<REASON>"
}

요약 (Summary)

  • 데이터 타입: 문자열
  • 기본값: 없음
  • 필수: 예

예시 (Examples)

다음 예시는 deployment_auto_approve 블록의 일반적인 사용 사례를 보여줘요.

기본 자동 승인 예시 (Fundamental auto-approve example)

다음 예시에서 no_changes 규칙은 context.plan.changes.total0과 같은지 확인해요:

deployment_auto_approve "no_changes" {
  check {
    condition = context.plan.changes.total == 0
    reason    = "Plan contains too many changes for automatic approval."
  }
}

deployment_group "production" {
  auto_approve_checks = [
    deployment_auto_approve.no_changes
  ]
}

context.plan.changes.total 값이 0이면 plan은 리소스 업데이트를 포함하지 않아요. production 그룹의 배포에 대한 plan이 어떤 변경도 포함하지 않으면 no_changes 자동 승인 규칙이 그 plan들을 자동으로 승인해요.

특정 컴포넌트가 변경되지 않았을 때 자동 승인 (Auto-approve when specific components unchanged)

다음 예시에서 no_database_changes 자동 승인 규칙은 context.plan.component_changes["component.database"].total0인지 확인하고 database 컴포넌트에 리소스 변경이 없을 때만 plan을 자동으로 승인해요:

deployment_auto_approve "no_database_changes" {
  check {
    condition = context.plan.component_changes["component.database"].total == 0
    reason    = "Database component has changes that require manual review."
  }
}

성공적인 작업만 자동 승인 (Auto-approve successful operations only)

다음 예시에서 successful_plans 자동 승인 규칙은 context.successtrue인지 확인하고 작업이 오류 없이 성공할 때만 plan을 자동으로 승인해요:

deployment_auto_approve "successful_plans" {
  check {
    condition = context.success == true
    reason    = "Operation failed and requires manual intervention."
  }
}

여러 조건 (Multiple conditions)

다음 예시에서 safe_production_changes 자동 승인 규칙은 context.plan.changes.total5보다 작아야 하고, context.plan.changes.remove0이어야 하며, context.plan.deployment.deployment_name"production"이 아니어야 한다는 세 가지 조건을 평가하며, 자동 승인을 위해 세 검사 모두가 통과해야 해요:

deployment_auto_approve "safe_production_changes" {
  check {
    condition = context.plan.changes.total < 5
    reason    = "Too many changes for automatic approval."
  }

  check {
    condition = context.plan.changes.remove == 0
    reason    = "Resource removal requires manual approval."
  }

  check {
    condition = context.plan.deployment.deployment_name != "production"
    reason    = "Production deployments require manual approval."
  }
}

더 알아보기 (Learn more)