Skip to content

choridev/beforegoing-aws-provisioning

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

AWS Infrastructure Provisioning Project for Beforegoing (Terraform)

1. 프로젝트 개요

이 프로젝트는 Terraform을 사용하여 AWS 클라우드 인프라를 코드로 관리(IaC, Infrastructure as Code)하기 위한 저장소입니다.

beforegoing이라는 서비스의 인프라를 개발(dev), 스테이징(stg), 프로덕션(prod) 환경으로 나누어 관리하며, 다중 리전(ap-northeast-1, ap-northeast-2) 배포를 지원하는 구조를 가지고 있습니다. 또한, Go로 작성된 자동화 스크립트를 통해 인프라 배포를 간소화합니다.

2. 주요 특징 및 기술 스택

  • Terraform 기반의 IaC: 모든 인프라 자원을 코드로 정의하여 일관성 있고 재현 가능한 환경 구축을 보장합니다.
  • 모듈식 아키텍처: 공통적으로 사용되는 리소스 그룹을 _module 디렉터리에서 모듈로 정의하여 코드 재사용성을 높이고 유지보수를 용이하게 합니다.
  • 다중 환경 및 리전 관리: beforegoingd(dev), beforegoings(staging), beforegoingp(prod)와 같이 환경별로 디렉터리를 분리하고, 리전(ap-northeast-1, ap-northeast-2)에 따라 구체적인 리소스를 배포합니다.
  • Go를 이용한 배포 자동화: terraform-auto 디렉터리 내의 Go 애플리케이션을 통해 복잡한 Terraform 명령어를 추상화하고, 설정 파일(config-*.yaml) 기반으로 특정 환경의 배포를 자동화합니다.
  • 기술 스택:
    • IaC: Terraform
    • Cloud: AWS
    • Automation: Go

3. 디렉터리 구조

프로젝트는 크게 terraformterraform-auto 두 부분으로 구성됩니다.

/
├── terraform/
│   ├── <서비스명>/                    # e.g., vpc, ecs, rds, s3
│   │   ├── _module/                 # 해당 서비스의 재사용 가능한 Terraform 모듈
│   │   └── teamund/                 # 모듈을 사용하여 실제 환경에 배포하는 코드
│   │       └── <환경명>_<리전>/        # e.g., beforegoingd_apnortheast1
│   └── variables/                   # 여러 환경에서 공통으로 사용하는 변수
│
└── terraform-auto/
    ├── beforegoingd/                # 개발 환경 자동화 스크립트
    └── beforegoingsp/               # 스테이징/프로덕션 환경 자동화 스크립트
  • terraform/<서비스명>/_module/: VPC, ECR, ECS Cluster 등과 같은 AWS 리소스를 생성하기 위한 범용 모듈이 위치합니다.
  • terraform/<서비스명>/teamund/<환경명>_<리전>/: 위 모듈을 가져와(source) 특정 환경과 리전에 필요한 변수(e.g., terraform.tfvars)를 주입하여 실제 인프라를 정의하는 곳입니다.
  • terraform-auto/: config-dev.yaml, config-stg.yaml 등의 설정 파일을 읽어 해당 환경에 맞는 Terraform 작업을 수행하는 Go 스크립트가 위치합니다. 이를 통해 수동 명령어 실행 시 발생할 수 있는 실수를 줄입니다.

4. 관리하는 AWS 리소스

본 프로젝트를 통해 프로비저닝되는 주요 AWS 리소스는 다음과 같습니다.

  • Networking: VPC, Route 53, CloudFront, Application Load Balancer
  • Compute: ECS, Lambda
  • Storage: S3, ECR
  • Database: RDS(MySQL), ElastiCache(Redis)
  • Security & Identity: IAM, WAF
  • API Management: API Gateway
  • Management & Governance: Resource Explorer

5. 사용 방법 (예시)

특정 환경의 인프라를 배포, 수정 또는 삭제하기 위해서는 해당 환경의 디렉터리로 이동하여 Terraform 명령어를 실행합니다.

예를 들어, 개발 환경(dev)의 ap-northeast-1 리전 VPC를 배포하는 경우:

# 1. 해당 환경의 디렉터리로 이동
cd /workspace/aws-provisioning/terraform/vpc/beforegoingd_apnortheast1

# 2. Terraform 초기화
terraform init

# 3. 변경 사항 계획 확인
terraform plan

# 4. 인프라 배포 (또는 수정)
terraform apply

6. 배포 자동화 (terraform-auto)

terraform-auto 디렉터리의 Go 스크립트는 위와 같은 수동 배포 과정을 자동화합니다. 예를 들어, beforegoingsp 디렉터리의 main.goconfig-stg.yaml 파일을 읽어 스테이징 환경에 필요한 모든 Terraform 작업을 순차적으로 실행할 수 있습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • HCL 88.8%
  • Go 6.5%
  • Python 4.7%