Azure 기반의 Artemia 프로젝트 인프라스트럭처를 관리하는 Terraform 코드입니다.
환경별(dev, prod) 분리와 모듈화된 아키텍처를 통해 재사용 가능하고 확장 가능한 인프라를 제공합니다.
artemia-infra/
├── environments/
│ ├── dev/ # 개발 환경
│ │ ├── main.tf
│ │ ├── provider.tf
│ │ ├── backend.tf
│ │ ├── terraform.tf
│ │ ├── locals.tf
│ │ ├── variables.tf
│ │ ├── outputs.tf
│ │ └── terraform.tfvars
│ └── prod/ # 프로덕션 환경
│ ├── main.tf
│ ├── provider.tf
│ ├── backend.tf
│ ├── terraform.tf
│ ├── locals.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── terraform.tfvars
├── modules/ # 재사용 가능한 Terraform 모듈
│ ├── ai-ml/ # Azure OpenAI 서비스
│ ├── compute/ # Virtual Machines
│ ├── database/ # SQL Servers
│ ├── messaging/ # EventHubs (Kafka)
│ ├── monitoring/ # 모니터링 및 알림
│ ├── network/ # VNet, Subnet, NSG
│ ├── services/ # 서비스별 설정
│ └── storage/ # Storage Accounts
├── setup-backend.sh # 백엔드 스토리지 설정
├── set-arm-key.sh # Azure 액세스 키 설정
└── stop-vm.sh # VM 관리 스크립트
main.tf- 모듈 호출 및 리소스 그룹 정의provider.tf- Azure provider 설정backend.tf- 환경별 원격 상태 저장소 설정terraform.tf- Terraform 버전 요구사항locals.tf- 환경별 태그 및 로컬 변수variables.tf- 입력 변수 정의outputs.tf- 출력 값 정의terraform.tfvars- 환경별 변수 값 (gitignore됨)
Azure에서 Terraform 원격 상태 저장소를 설정하는 스크립트입니다.
기능:
- Azure 리소스 그룹 생성 (
artemia-rg) - 스토리지 계정 생성 (
artemiastatestore) - Terraform 상태 파일을 위한 blob 컨테이너 생성 (
tfstate)
사용법:
./setup-backend.shAzure Storage Account의 액세스 키를 환경변수로 설정하는 스크립트입니다.
기능:
- Azure Storage Account에서 액세스 키 조회
ARM_ACCESS_KEY환경변수로 설정하여 Terraform이 백엔드에 액세스할 수 있도록 함
사용법:
source ./set-arm-key.sh기존 Azure 리소스를 Terraform 상태로 가져오기 위한 명령어들을 포함한 스크립트입니다.
주의사항:
- 이 스크립트는 참고용으로만 사용하세요
- 실제로는 정상 동작하지 않을 수 있습니다
- 리소스 임포트 시에는 수동으로 각 명령어를 확인하고 실행하시기 바랍니다
# Azure CLI 로그인
az login
# 백엔드 스토리지 설정 (최초 1회만 실행)
./setup-backend.sh
# 환경변수 설정 (Terraform 실행 전 매번 필요)
source ./set-arm-key.sh# 개발 환경 디렉토리로 이동
cd environments/dev
# Terraform 초기화
terraform init
# 배포 계획 확인
terraform plan
# 인프라 배포
terraform apply# 프로덕션 환경 디렉토리로 이동
cd environments/prod
# Terraform 초기화
terraform init
# 배포 계획 확인
terraform plan
# 인프라 배포
terraform apply# 특정 모듈 디렉토리로 이동
cd modules/<module-name>
# 모듈 초기화
terraform init
# 모듈 테스트 (변수 파일 지정)
terraform plan -var-file="../../environments/prod/terraform.tfvars"- Resource Group:
artemia-rg(Korea Central) - Virtual Machines: Backend, Data, Elasticsearch
- Networking: VNet, Subnet, NSG, Load Balancer
- Database: Azure SQL Server with Azure AD 인증
- Storage: Terraform 상태 저장소 및 데이터 저장소
- Messaging: EventHub (Kafka)
- AI/ML: Azure OpenAI Cognitive Services
- Monitoring: Action Groups 및 Metric Alerts
- network: 네트워크 인프라 (VNet, Subnet, NSG, Load Balancer)
- compute: 가상머신 리소스 (Backend, Data, Elasticsearch)
- database: Azure SQL Server 및 Database
- storage: Storage Account 리소스
- messaging: EventHub 및 관련 리소스
- ai-ml: Azure OpenAI서비스
- monitoring: 모니터링 및 알림 설정
- Development:
dev/terraform.tfstate - Production:
prod/terraform.tfstate
각 환경에서 terraform.tfvars 파일을 통해 환경별 설정 관리:
- VM 크기 및 스토리지 타입
- 네트워크 설정
- 모니터링 임계값
- 인증 정보
modules/디렉토리에 모듈 생성- 개발 환경에서 테스트
- 프로덕션 환경에 적용
- SSH 키 인증 사용
- NSG 규칙 최소 권한 적용
- Azure AD 인증 우선 사용
- 환경별 완전 분리
- Azure CLI
- Terraform >= 1.0
- Azure 구독 권한
- SSH 키 페어 / Azure AD 설정 (VM 접근용)
- 작업 디렉토리: Terraform 명령은 해당 환경 디렉토리에서 실행
- 환경 변수:
ARM_ACCESS_KEY설정 후 Terraform 실행 - 변수 파일:
terraform.tfvars는 환경별 관리, git 커밋 금지 - 상태 파일: 환경별로 분리되어 있으므로 올바른 디렉토리에서 작업
- 모듈 의존성: 모듈 간 의존성 관계 고려하여 개발