`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.errors와 context.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.total이 0과 같은지 확인해요:
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"].total이 0인지 확인하고 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.success가 true인지 확인하고 작업이 오류 없이 성공할 때만 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.total이 5보다 작아야 하고, context.plan.changes.remove가 0이어야 하며, 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."
}
}