인프라 구축기
지금까지 인프라 아키텍처를 설계 및 구축하고, 발생한 오류를 해결하는 과정을 인프라 구축기에 담았다. 그러나 내용이 많고, 난잡할 수 있기 때문에 하나의 글에서 진행 상황과 앞으로의 진행 내용을 정리하려고 한다.
진행한 내용
인프라 아키텍처 설계 및 구축
- 인프라 아키텍처 설계
- 인프라 구축 및 통신 테스트
- 인프라는 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)를 활용한 상태 파일 관리 방식 도입
인프라 구축기 (9) - Terraform terraform.tfstate 삭제 이슈
인프라 구축기Terraform으로 aws 인프라를 지속적으로 관리하던 중 큰 문제 하나를 마주쳤다. 실수로 Terraform의 상태 파일인 terraform.ftstate를 삭제한 것이다. 이번 글에서는 해당 이슈를 해결한 과정
sanseo.tistory.com
Terraform IAM에 동일한 정책 사용
- 다른 모듈에서 같은 정책을 적용하면, 하나를 apply 하면 다른 하나의 역할에서 정책이 사라지는 이슈
- "aws_iam_policy_attachment"의 roles, users가 추가되는 것이 아니라 갱신되는 것이라 추측
- 이에 따라 역할에 맞는 정책을 각각 작성하여 적용하도록 코드 수정
인프라 구축기 (10) - IAM 생성 코드 추가
인프라 구축기이전에 인프라 구축기 (3)에서 Terraform 코드를 작성할 때, 인스턴스에 사용되는 IAM 역할과 사용자는 AWS 웹에서 생성한 뒤 apply 하는 방식으로 진행했었다. Terraform으로 관리되는 리소
sanseo.tistory.com
인프라 구축기 (11) - lambda IAM role 수정
인프라 구축기인프라 구축기 (8)에서 lambda의 IAM role을 설정할 때, 아래와 같이 AmazonEC2FullAcess와 AmazonRDSFullAccess를 적용하였다. 인프라 구축기 (10)에서 instance와 storage의 IAM role을 Terraform으로 적용할
sanseo.tistory.com
Redshift 사용자 권한 미적용
- 올바르게 권한 적용을 했지만, 특정 테이블의 권한만 생성되지 않음
- 테이블의 Owner가 권한을 부여하는 사람이 아니기 때문에 발생
- Owner를 변경해 해결 및 동일 이슈 방지를 위한 엔지니어링 팀의 스키마 권한 (SELECT, ALTER) 제거
[DB] Redshift 특정 테이블의 권한이 생성되지 않는 문제
Redshift 특정 테이블의 권한이 생성되지 않는 문제Redshift에서 그룹에 대한 권한을 추가했지만, 특정 테이블에 대한 권한만 추가되지 않는 문제가 발생하였다. 결론적으로는 권한을 생성하는
sanseo.tistory.com
진행 예정 내용
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 |
인프라 구축기
지금까지 인프라 아키텍처를 설계 및 구축하고, 발생한 오류를 해결하는 과정을 인프라 구축기에 담았다. 그러나 내용이 많고, 난잡할 수 있기 때문에 하나의 글에서 진행 상황과 앞으로의 진행 내용을 정리하려고 한다.
진행한 내용
인프라 아키텍처 설계 및 구축
- 인프라 아키텍처 설계
- 인프라 구축 및 통신 테스트
- 인프라는 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)를 활용한 상태 파일 관리 방식 도입
인프라 구축기 (9) - Terraform terraform.tfstate 삭제 이슈
인프라 구축기Terraform으로 aws 인프라를 지속적으로 관리하던 중 큰 문제 하나를 마주쳤다. 실수로 Terraform의 상태 파일인 terraform.ftstate를 삭제한 것이다. 이번 글에서는 해당 이슈를 해결한 과정
sanseo.tistory.com
Terraform IAM에 동일한 정책 사용
- 다른 모듈에서 같은 정책을 적용하면, 하나를 apply 하면 다른 하나의 역할에서 정책이 사라지는 이슈
- "aws_iam_policy_attachment"의 roles, users가 추가되는 것이 아니라 갱신되는 것이라 추측
- 이에 따라 역할에 맞는 정책을 각각 작성하여 적용하도록 코드 수정
인프라 구축기 (10) - IAM 생성 코드 추가
인프라 구축기이전에 인프라 구축기 (3)에서 Terraform 코드를 작성할 때, 인스턴스에 사용되는 IAM 역할과 사용자는 AWS 웹에서 생성한 뒤 apply 하는 방식으로 진행했었다. Terraform으로 관리되는 리소
sanseo.tistory.com
인프라 구축기 (11) - lambda IAM role 수정
인프라 구축기인프라 구축기 (8)에서 lambda의 IAM role을 설정할 때, 아래와 같이 AmazonEC2FullAcess와 AmazonRDSFullAccess를 적용하였다. 인프라 구축기 (10)에서 instance와 storage의 IAM role을 Terraform으로 적용할
sanseo.tistory.com
Redshift 사용자 권한 미적용
- 올바르게 권한 적용을 했지만, 특정 테이블의 권한만 생성되지 않음
- 테이블의 Owner가 권한을 부여하는 사람이 아니기 때문에 발생
- Owner를 변경해 해결 및 동일 이슈 방지를 위한 엔지니어링 팀의 스키마 권한 (SELECT, ALTER) 제거
[DB] Redshift 특정 테이블의 권한이 생성되지 않는 문제
Redshift 특정 테이블의 권한이 생성되지 않는 문제Redshift에서 그룹에 대한 권한을 추가했지만, 특정 테이블에 대한 권한만 추가되지 않는 문제가 발생하였다. 결론적으로는 권한을 생성하는
sanseo.tistory.com
진행 예정 내용
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 |