AWS 기반 대규모 마이크로서비스 인프라 운영 노하우

J-USER·2023년 3월 3일
0

DevOps

목록 보기
7/10
post-thumbnail

Intro

최근 AWS에 관해 공부를 하다가 AWS 유튜브 채널에 상당히 좋은 내용들이 많아 들으며 일부 내용을 발췌하면서 조금 이해하기 쉽게, 간략하게 정리할 예정이다. 시간이 된다면 전문을 한번 보는것을 추천한다.

(출처 : https://www.youtube.com/watch?v=9PTdO7DM6XQ&t=1580s)

운영을 고려한 Terraform 구조화

엔터프라이즈급 특히 대규모 인프라를 구축할 경우 고려해야할 세 가지 Terraform을 쓸 수 있는지 알아BOZA

관리 범위 쪼개기

처음 Terraform을 접하는 테린이 (필자..)의 경우 하나의 폴더에 리소스를 추가하면서 시작하게 된다.

이럴 경우 큰 단점이 있는데

  • terraform plan, terraform apply 시간이 오래걸림
  • 팀 규모가 커지면, 병목 현상이 일어나기 쉽다

그렇다면 BestPractice는 뭘까?

MS단위로 쪼개는걸 베이스로 한다.

동일 코드 기반의 인프라 구성

  • 환경 별 리소스 차이를 최소화하라.

    환경 별로 다를 수 있는거 알지만, 최소한 Prod 에 있는 리소스는 모든 환경별로 기본적으로 포함 하고 있어야한다.

  • 당연하겠지만 동일 코드로 DEV -> STG -> PROD 환경으로 단계적으로 승격한다.

  • terraform workspaces : 분리된 tfstate 공간을 제공한다. ex) terraform workspaces select dev, terraform workspaces select qa..

  • 그러나 실수하기 매우 쉽기 때문에 테라폼 apply를 자동화 한 경우에만 쓰는걸 권장한다.

재사용 가능한 공용모듈

  • 일관된 인프라 관리가쉬워 지고 신규 서비스 추가가 용이하다.
  • 주로 VPC, ECS, EKS, ALB , ServerGroup 은 공용모듈로 사용하기 때문에 작성시 재사용성을 항상 고려해야한다.

Terraform 폴더 구조

메인 레포의 폴더 구조를 설명하자면, 아래와 같다.

  • 주로 메인 레포와 MS 레포로 대분류를 한다.
  • 환경을 별도 account 로 관리하기 때문에 account별로 중분류를 한다.
  • account 별 region 별로 소분류를 한다.
    - 사용하는 MS 모듈 호출만 한다. (버저닝 필요)
    - vpc
    • vpc는 remote storage(s3)에 저장하면 vpc에서 만든 서브넷ID 등을 다른 폴더에서 참조해서 사용할 수 있다.

그리고 MS 레포의 폴더링 구조는 모든 리소스를 포함하는걸 기본으로 한다.

iam은 글로벌리소스인데 ms모듈에 있는게 맞아?

  • ms에서 이게 빠지거나..담당자 바뀌다보면 어딧는지 못찾아..
  • nameing 규칙만 잘 지켜줘..

Terraform 모듈 코드 테스트

모듈을 테스트 가능한가? 인프라에 반영해봐야 아는거 아냐??

  • 공용모듈만 새로운 버전으로 업뎃 했을때 A MS는 되고 B MS는 안되면 어떡할려?
  • region 에 따라 안될수도 있음 (특히 중국 region)
  • terraform 버전에 따라 다를 수 있음

이런걸 미리 테스트 해봐야 된다.

아니 그니까 어떤 테스트가 가능한데??

코드 테스트

  • Linting
    - 정적 코드 분석으로 잠재적 버그 찾기!
    -terraform fmt
    -terraform validate
  • Dry-run
    -terraform plan
  • 단위/통합 테스트
    - CI 툴 사용
    ex) InSpec , awspec(젤 많이씀!) , terratest(go)
  • 보안 준수 검수
profile
호기심많은 개발자

0개의 댓글