Skip to content

operations integrated build destroy

JJong-03 edited this page Jun 18, 2026 · 4 revisions

운영 — 통합 Build/Destroy

계층별 소유권과 보존 경계를 기준으로 Foundation, IoT, Hub, data-pipeline, reporting, Dashboard, Spoke를 생성·삭제하는 표준 순서다.

공통 안전 규칙

  1. 각 Terraform root의 backend, state owner, state 목록, 실제 AWS 리소스를 확인한다.
  2. refresh-only plan과 normal/destroy plan에 예상하지 않은 create/update/delete가 있으면 중단한다.
  3. state가 비었거나 접근 불가이면 새 환경이라고 가정하지 않는다.
  4. plan 파일, tfstate, tfvars, 인증서, webhook, 비밀번호를 커밋하지 않는다.
  5. 영구 계층은 runtime wrapper로 삭제하지 않는다.

현재 통합 기준 Terraform state는 S3 backend로 통일하고 root별 key로 분리한다. 다만 apply/destroy 전에는 항상 해당 root의 backend key, state list, 실제 AWS 리소스 소유권을 재확인한다. Terraform provider 검증은 고정된 Terraform 환경에서 다시 확인해야 하며, state 접근 실패나 예상하지 않은 drift가 있으면 중단한다.

infra/data-pipeline 등 A-side Terraform root의 validate는 Terraform 1.15.0+ 환경에서 수행한다. 낮은 Terraform 버전이나 provider schema handshake 문제가 있는 환경에서 실패하면 인프라 변경으로 해석하지 말고 도구 버전부터 맞춘다.

계층과 보호 정책

계층 생성 진입점 삭제 진입점 기본 정책
Foundation build-foundation.sh DESTROY_FOUNDATION=true destroy-foundation.sh 보호
IoT/Factory K3s Secret build-iot-factory-a.sh 또는 IoT scripts DESTROY_IOT=true destroy-all.sh 보호
Hub build-hub.sh destroy-hub.sh --yes 재생성 가능
Data pipeline build-data-pipe.sh destroy-data-pipe.sh 재생성 가능, 데이터 보호
Reporting build-reporting.sh destroy-reporting.sh 재생성 가능, report 객체 보호
Dashboard DNS Terraform 수동 별도 영구 폐기 절차 보호
Dashboard permanent Terraform 수동 별도 영구 폐기 절차 보호
Dashboard runtime build-data-dashboard.sh destroy-data-dashboard.sh --yes 재생성 가능
Spoke registration register-spoke-factory-*.sh Hub와 함께 제어 경로 소멸 K3s workload/Secret 보호

필수 보호 대상은 Foundation, IoT Thing/Policy/Certificate, Factory K3s Secret, Dashboard permanent/DNS, S3 data/report/image objects다.

통합 Build 순서

1. Foundation

최초 1회만 생성한다.

scripts/build/build-foundation.sh

S3 data bucket, ECR, DynamoDB, GitHub OIDC, Admin UI Route53/ACM을 만든다.

2. Dashboard DNS/permanent

Dashboard를 사용할 때 최초 1회 별도 생성한다.

terraform -chdir=infra/data-dashboard-dns init
terraform -chdir=infra/data-dashboard-dns plan
terraform -chdir=infra/data-dashboard-dns apply

terraform -chdir=infra/data-dashboard-permanent init
terraform -chdir=infra/data-dashboard-permanent plan
terraform -chdir=infra/data-dashboard-permanent apply

DNS NS 위임과 permanent ACM/CloudFront 준비가 끝나야 runtime과 web 배포를 검증할 수 있다.

3. IoT certificate와 K3s Secret

기존 인증서와 Secret이 있으면 재생성하지 않는다. 신규 factory만 Thing/Policy/Certificate를 등록하고 해당 K3s에 Secret을 설치한다.

scripts/iot/register-thing.sh
scripts/iot/register-k3s-secret.sh

4. Hub

scripts/build/build-hub.sh
scripts/build/build-admin-ui-after-ns.sh

Hub infra, SlowCollector EKS access reconcile, ArgoCD/Grafana/LB Controller 순서다.

5. Data pipeline

필수 FastCollector 환경변수를 운영 환경에 설정한 뒤:

scripts/build/build-data-pipe.sh

Foundation과 Hub가 먼저 존재해야 한다.

6. Reporting

scripts/build/build-reporting.sh

Foundation S3와 Bedrock 접근이 필요하다.

7. Dashboard runtime

scripts/build/build-data-dashboard.sh

permanent remote state와 DNS zone이 먼저 존재해야 한다.

8. Spoke reconnect

HUB_ONLY_RECONNECT=true scripts/build/register-spoke-factory-a.sh
HUB_ONLY_RECONNECT=true scripts/build/register-spoke-factory-b.sh
HUB_ONLY_RECONNECT=true scripts/build/register-spoke-factory-c.sh

신규 GitOps 배포일 때만 reconnect 모드 대신 sync를 허용한다.

build-all.sh를 사용할 경우 실제 순서는 Foundation(opt-in) → preflight → Hub → data-pipeline → reporting → Dashboard runtime → Admin UI → IoT다. Dashboard DNS/permanent와 Spoke registration은 wrapper 밖이다.

scripts/build/build-all.sh --data-pipe --reporting --data-dashboard --admin-ui-after-ns

통합 검증

scripts/build/verify-complete.sh
scripts/ops/check-spoke-publisher-safety.sh
curl -fsS https://api.aegis-pi.cloud/healthz
curl -fsS https://api.aegis-pi.cloud/readyz
curl -fsSI https://dashboard.aegis-pi.cloud/

추가로 다음을 확인한다.

  • IoT Rule factory-a/b/c enabled
  • S3 raw와 processed에 최신 객체
  • DynamoDB LATEST, GRAPH#5M, CLOUD#infra/LATEST
  • reporting Step Functions와 reports/daily/
  • ECS desired/running, ALB target, RDS/Redis
  • ArgoCD applications와 Spoke publisher 단일 실행

Destroy 범위 선택

Hub-only

scripts/destroy/destroy-hub.sh --plan-only
scripts/destroy/destroy-hub.sh --yes

Foundation, IoT, data-pipeline, reporting, Dashboard, Spoke K3s를 유지한다.

Runtime 전체

destroy-all.sh 기본값은 Dashboard runtime → reporting → data-pipeline → Hub를 삭제하고 Foundation/IoT/Dashboard permanent/DNS를 보존한다.

scripts/destroy/stop-dummy-generators.sh
scripts/destroy/destroy-all.sh

내부적으로 Dashboard runtime과 Hub에는 --yes를 전달한다. reporting/data-pipeline은 Terraform 대화형 destroy를 사용하므로 실행 전 각 root의 수동 destroy plan을 반드시 검토한다.

특정 계층 보존:

DESTROY_DATA_DASHBOARD=false \
DESTROY_REPORTING=false \
DESTROY_DATA_PIPE=false \
scripts/destroy/destroy-all.sh

Foundation/IoT 영구 폐기

일반 운영 절차가 아니다.

1. generator 정지
2. Dashboard runtime, reporting, data-pipeline 삭제
3. Hub 삭제
4. IoT/K3s Secret 삭제 여부 별도 승인
5. S3 객체와 DynamoDB/ECR/Route53 복구 또는 폐기 승인
6. DESTROY_FOUNDATION=true로 Foundation 삭제

Foundation 삭제는 S3 data/report/image objects, DynamoDB, ECR, Admin UI DNS/ACM을 잃을 수 있다. 단순 비용 절감 목적으로 실행하지 않는다.

관련 문서: Hub 재구축, Dashboard 운영, Data Pipeline 운영

Aegis-Pi Wiki

· 대표 문서 목록은 홈의 문서 탐색 표 참조

시작하기

요구사항

핵심 개념

아키텍처

컴포넌트 (Edge → Cloud → Dashboard)

Dashboard & 운영

시나리오 · 사례 · 참조

Clone this wiki locally