인프라 구축기
지금까지 인프라 아키텍처를 설계 및 구축하고, 발생한 오류를 해결하는 과정을 인프라 구축기에 담았다. 그러나 내용이 많고, 난잡할 수 있기 때문에 하나의 글에서 진행 상황과 앞으로의 진행 내용을 정리하려고 한다.
진행한 내용
인프라 아키텍처 설계 및 구축
- 인프라 아키텍처 설계
- 인프라 구축 및 통신 테스트
- 인프라는 Terraform을 활용해 구성 (단, EC2 Keypair만 AWS 웹에서 생성)
- VPC, 인스턴스 등 인프라 요소 생성 (VPC 구성, instance/storage 구성)
- 내부 통신 동작 확인 (Bastion Host -> Private Subent, Private EC2 -> Other Instance)
Local -> Private EC2 (Airflow) Web Server 접속
- Bastion Host에서 nginx를 활용한 웹 접근 (Local -> Private EC2 웹 접속)
- 각 EC2에 80, 443 포트를 추가해 HTTP 접근
Airflow, Redshift 사용자 생성 및 권한 설정
- Airflow, Redshift 사용자 생성 및 권한 설정
- Airflow 및 Redshift 사용자 생성
- Airflow
- 관리자 계정
- 엔지니어링 팀의 각 인원 (3명)
- Redshift
- 관리자 계정
- 엔지니어링 팀의 각 인원 (3명)
- 분석팀 (2명)
- Airflow
- Airflow 및 Redshift 권한 설정
- Airflow
- 관리자 : Airflow Role의 Admin
- 엔지니어링 팀 : Airflow Role의 User
- Redshift
- 관리자 : SuperUser
- 엔지니어링 팀 : raw_data, analytics 스키마의 USAGE 및 내부 테이블의 모든 권한
- 분석 팀 : raw_data, analytics 스키마의 USAGE 및 내부 테이블의 SELECT 권한
- Airflow
Lambda 활용 AWS 인스턴스 시작 / 중지 자동화
- Lambda 활용 AWS 인스턴스 시작 / 중지 자동화
- daily_start_service.py, daily_stop_service.py 작성 및 적용
- 목표 : 인스턴스 실행 시간을 줄여 비용 절감
- 매일 10 AM(UTC+9) 인스턴스 시작
- 매일 10 PM(UTC+9) 인스턴스 중지
발생했던 이슈
Local -> Private EC2 (Airflow) Web Server 접속
- Private Subnet EC2에만 8080 port 적용 (보안 그룹 수정 전)
- Private Subnet EC2에서는 curl 정상 작동, 그러나 Bastion Host에서는 동작 X
- http 포트인 80을 보안 그룹에 추가하지 않아서 발생한 결과
- airflow_web_access_sg에 http, https 포트 추가 후 Bastion Host 인바운드 그룹에 추가
- Bastion Host에서도 Private Subnet EC2와 같은 curl 결과 확인
- Nginx의 동작 과정을 제대로 알지 못해 주소 창에 Private Subnet의 IP 입력
- Nginx의 Reverse Proxy 개념을 간단히 숙지한 뒤 Bastion Host의 public ip로 접속
Terraform 폴더 구성 방식
- 초기 구성 방식 : 최상단에 main.tf를 배치해 한 곳에서 모든 AWS 리소스를 관리할 수 있도록 통합
- 한 곳에서 모든 리소스를 관리 가능하여 편함
# tree /f
aws-terraform
│
│ main.tf
│
├───instance
│
├───storage
│
├───lambda
│
└───vpc
- 최종 구성 방식 : 각 폴더에서 관련 AWS 리소스만 관리하도록 분리
- 리소스를 분리하여 관리하므로 각 리소스의 독립성 보장
# tree /f
aws-terraform
│
├───instance
│
├───storage
│
├───lambda
│
└───vpc
Terraform .tfstate 파일 삭제
- 실수로 Terraform의 .tfstate 파일을 삭제해 이미 apply된 AWS 요소와 일치시키는 작업을 진행
- 같은 실수를 방지하기 위해 원격 저장소 (S3)를 활용한 상태 파일 관리 방식 도입
Terraform IAM에 동일한 정책 사용
- 다른 모듈에서 같은 정책을 적용하면, 하나를 apply 하면 다른 하나의 역할에서 정책이 사라지는 이슈
- "aws_iam_policy_attachment"의 roles, users가 추가되는 것이 아니라 갱신되는 것이라 추측
- 이에 따라 역할에 맞는 정책을 각각 작성하여 적용하도록 코드 수정
Redshift 사용자 권한 미적용
- 올바르게 권한 적용을 했지만, 특정 테이블의 권한만 생성되지 않음
- 테이블의 Owner가 권한을 부여하는 사람이 아니기 때문에 발생
- Owner를 변경해 해결 및 동일 이슈 방지를 위한 엔지니어링 팀의 스키마 권한 (SELECT, ALTER) 제거
진행 예정 내용
Redshift Serverless -> Redshift
- Redshift Serverless는 첫 사용 시 $300의 비용을 지원
- 그러나 사용 비용이 만만치 않기에 지원금을 모두 사용하면 Redshift와 가격 비교 후 변경 고려
- 변경 시 Redshift Serverless의 데이터를 백업 후 Redshift로 복원하는 과정 필요
시각화 툴 구축
- Tableau 혹은 Metabase를 EC2에 구축하여 Private에 존재하는 Redshift와 연결해 시각화 진행
'Infra > [인프라 구축기] Terraform 활용 AWS 인프라 구축' 카테고리의 다른 글
인프라 구축기 (15) : Public EC2 Tableau 구축 (0) | 2024.11.15 |
---|---|
인프라 구축기 (14) : EC2 인스턴스 추가 및 lambda 함수 수정 (0) | 2024.11.11 |
인프라 구축기 (12) - S3에 있는 Terraform 상태 파일 활용하기 (0) | 2024.11.02 |
인프라 구축기 (11) - lambda IAM role 수정 (1) | 2024.10.29 |
인프라 구축기 (10) - IAM 생성 코드 추가 (2) | 2024.10.26 |