Terraform을 활용하여 AWS 클라우드 인프라를 관리하는 Infrastructure as Code 프로젝트입니다.
이 프로젝트는 DeeFacto 플랫폼의 AWS 인프라를 Terraform으로 관리하며, 개발 환경(dev)을 중심으로 구성되어 있습니다. IoT 데이터 수집, 실시간 분석, AI 기반 리포트 생성까지 포함한 종합적인 데이터 파이프라인을 구축합니다.
- VPC: 멀티 AZ 기반 네트워크 인프라
- EKS: Kubernetes 클러스터 (v1.33)
- EC2: Jenkins, Bastion, Edge Computer 인스턴스
- S3: 다양한 용도의 스토리지 버킷
- ECR: Docker 컨테이너 이미지 저장소
- RDS: 관계형 데이터베이스
- ElastiCache: 인메모리 캐시 (Redis)
- OpenSearch: 검색 및 분석 엔진
- Lambda: 서버리스 컴퓨팅
- Kinesis: 실시간 데이터 스트리밍
- Kinesis Firehose: 데이터 전송 서비스
- AWS Glue: ETL 및 데이터 크롤링
- Bedrock: AI 기반 리포트 생성
- CloudWatch: 모니터링 및 이벤트 관리
- Route53: DNS 관리
- CloudFront: CDN 서비스
- IoT Core: IoT 디바이스 연결
- SQS: 메시지 큐 서비스
- IAM: 접근 제어 및 권한 관리
iac/
├── layers/
│ └── dev/ # 개발 환경
│ ├── vpc/ # VPC 네트워크 구성
│ ├── eks/ # EKS 클러스터
│ ├── ec2/ # EC2 인스턴스 (Jenkins, Bastion, Edge)
│ ├── s3/ # S3 버킷들
│ ├── ecr/ # ECR 리포지토리
│ ├── rds/ # RDS 데이터베이스
│ ├── elasticache/ # ElastiCache 클러스터
│ ├── opensearch/ # OpenSearch 도메인
│ ├── lambda/ # Lambda 함수들
│ ├── kinesis/ # Kinesis 스트림
│ ├── kinesis_firehose/ # Kinesis Firehose
│ ├── glue/ # AWS Glue (ETL, 크롤러, 워크플로우)
│ ├── bedrock/ # AWS Bedrock (AI 에이전트)
│ ├── cloudwatch/ # CloudWatch 이벤트 규칙
│ ├── route53/ # DNS 레코드
│ ├── cloudfront/ # CloudFront 배포
│ ├── sqs/ # SQS 큐
│ ├── iot/ # IoT Core
│ ├── iam/ # IAM 역할 및 정책
│ ├── auto_scaling/ # Auto Scaling 그룹
│ └── sg/ # 보안 그룹
├── modules/ # 재사용 가능한 모듈
└── README.md
-
저장소 클론
git clone <repository-url> cd iac
-
AWS 자격 증명 설정
aws configure
-
Terraform 초기화
cd layers/dev/vpc terraform init -
인프라 배포
terraform plan terraform apply
각 서비스별로 독립적으로 배포할 수 있습니다:
# VPC 네트워크 배포
cd layers/dev/vpc
terraform init && terraform apply
# EKS 클러스터 배포
cd layers/dev/eks
terraform init && terraform apply
# EC2 인스턴스 배포
cd layers/dev/ec2
terraform init && terraform apply
# S3 버킷 배포
cd layers/dev/s3
terraform init && terraform apply
# AWS Glue ETL 파이프라인 배포
cd layers/dev/glue
terraform init && terraform apply
# Bedrock AI 에이전트 배포
cd layers/dev/bedrock
terraform init && terraform apply- CIDR: 10.0.0.0/16
- Public Subnets: 2개 AZ (ap-northeast-2a, 2b)
- Private Subnets: 2개 AZ (ap-northeast-2a, 2b)
- NAT Gateway: Private 서브넷의 아웃바운드 트래픽 처리
- VPC Endpoints: S3 등 AWS 서비스 직접 접근
- Kubernetes 버전: 1.33
- 서비스 CIDR: 172.20.0.0/16
- Managed Node Groups: 자동 스케일링 지원
- 애드온: CoreDNS, kube-proxy, VPC CNI, EBS CSI Driver 등
- Jenkins: CI/CD 파이프라인 (t3.small)
- Bastion: 보안 접근 게이트웨이 (t2.micro)
- Edge Computer: IoT 데이터 처리 (t3a.medium)
- terraform: Terraform 상태 파일 저장
- frontimage: 프론트엔드 이미지 저장
- rawdata: 원시 데이터 저장 (Kinesis Firehose 대상)
- mesdata: MES 데이터 저장
- report: AI 생성 리포트 저장
- glueassets: AWS Glue 자산 저장
- Kinesis Stream: 실시간 데이터 스트리밍
- Kinesis Firehose: S3로 데이터 전송
- AWS Glue:
- 크롤러: S3 데이터 스키마 자동 감지
- 워크플로우: 5분마다 자동 실행
- ETL Job: 데이터 요약 및 RDS 적재
- OpenSearch: 실시간 데이터 검색 및 분석
- Bedrock: AI 기반 리포트 자동 생성
- AWS Bedrock: Claude 3 Haiku 모델 기반 AI 에이전트
- 리포트 생성 에이전트
- MES 데이터 분석 에이전트
- CloudWatch: 이벤트 기반 자동 스케일링 관리
- 모든 S3 버킷은 퍼블릭 액세스 차단
- VPC 내부 통신은 Private 서브넷 활용
- EKS 클러스터는 Private/Public 엔드포인트 모두 활성화
- IAM 역할 기반 접근 제어
- 보안 그룹을 통한 세밀한 네트워크 접근 제어
- EC2 인스턴스는 최소 권한 원칙 적용
각 레이어별로 variables.tf 파일에서 설정 가능한 변수들을 확인할 수 있습니다:
- VPC: CIDR 블록, 가용 영역
- EKS: 클러스터 이름, 노드 그룹 설정
- S3: 버킷 이름, 정책 설정
- Glue: 데이터베이스, 크롤러, 워크플로우 설정
- Bedrock: AI 모델, 에이전트 설정
Terraform 상태는 S3 버킷(deefacto-terraform-tfstate-apne2)에 저장되며, 버전 관리가 활성화되어 있습니다.
terraform plan
terraform applyterraform destroyterraform show
terraform state list- CloudWatch: 인프라 모니터링 및 알람
- EKS 로깅: 클러스터 제어판 로그
- Glue 로깅: ETL 작업 실행 로그
- Lambda 로깅: 서버리스 함수 실행 로그
- IoT 디바이스 → IoT Core → Lambda → OpenSearch
- S3 Raw Data → Glue Crawler → Glue Job → RDS
- 분석 데이터 → Bedrock AI → 리포트 생성 → S3 Report
프로젝트 관련 문의사항이나 이슈가 있으시면 GitHub Issues를 통해 연락해 주세요.
이 프로젝트는 MIT License 하에 배포됩니다.
주의: 프로덕션 환경에 배포하기 전에 모든 설정을 검토하고 테스트해 주세요.
DeeFacto Development Team 🚀