-
Notifications
You must be signed in to change notification settings - Fork 0
operations integrated build destroy
계층별 소유권과 보존 경계를 기준으로 Foundation, IoT, Hub, data-pipeline, reporting, Dashboard, Spoke를 생성·삭제하는 표준 순서다.
- 각 Terraform root의 backend, state owner, state 목록, 실제 AWS 리소스를 확인한다.
- refresh-only plan과 normal/destroy plan에 예상하지 않은 create/update/delete가 있으면 중단한다.
- state가 비었거나 접근 불가이면 새 환경이라고 가정하지 않는다.
- plan 파일, tfstate, tfvars, 인증서, webhook, 비밀번호를 커밋하지 않는다.
- 영구 계층은 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다.
최초 1회만 생성한다.
scripts/build/build-foundation.shS3 data bucket, ECR, DynamoDB, GitHub OIDC, Admin UI Route53/ACM을 만든다.
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 applyDNS NS 위임과 permanent ACM/CloudFront 준비가 끝나야 runtime과 web 배포를 검증할 수 있다.
기존 인증서와 Secret이 있으면 재생성하지 않는다. 신규 factory만 Thing/Policy/Certificate를 등록하고 해당 K3s에 Secret을 설치한다.
scripts/iot/register-thing.sh
scripts/iot/register-k3s-secret.shscripts/build/build-hub.sh
scripts/build/build-admin-ui-after-ns.shHub infra, SlowCollector EKS access reconcile, ArgoCD/Grafana/LB Controller 순서다.
필수 FastCollector 환경변수를 운영 환경에 설정한 뒤:
scripts/build/build-data-pipe.shFoundation과 Hub가 먼저 존재해야 한다.
scripts/build/build-reporting.shFoundation S3와 Bedrock 접근이 필요하다.
scripts/build/build-data-dashboard.shpermanent remote state와 DNS zone이 먼저 존재해야 한다.
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-nsscripts/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 단일 실행
scripts/destroy/destroy-hub.sh --plan-only
scripts/destroy/destroy-hub.sh --yesFoundation, IoT, data-pipeline, reporting, Dashboard, Spoke K3s를 유지한다.
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일반 운영 절차가 아니다.
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 운영
- 시스템 아키텍처
- 제어 & 데이터 플레인
- Dashboard VPC 설계
- 하드웨어 배치
- Hub EKS 네임스페이스
- Tailscale Mesh VPN
- 데이터 생명주기
- 데이터 조회 모델
- 실시간 갱신 구조
- IoT 데이터 계약
- Reporting Pipeline
- 로컬 스토리지
- 클라우드 스토리지
- Edge Agent
- Edge AI 탐지
- Factory-A Log Adapter
- Dummy Sensor
- Edge IoT Publisher
- Lambda Data Processor
- Risk Normalizer
- Risk Score Engine
- Pipeline Status Aggregator
- Graph Aggregator 5m
- Cloud Infra Collector
- Daily Report Generator
- Risk Alert Dispatcher
- Image Snapshot Pipeline
- Dashboard Backend
- Dashboard Web
- AI 채팅 어시스턴트