본문 바로가기
Infrastructure as Code

Devops Day 49 (5.15) Sprint Terraform x AWS_Full Stack 애플리케이션 구성

by Jackykim 2023. 5. 18.

Bare Minimum requirement :

Getting Started :
IaC 코드를 작성하려면 먼저 AWS Management Console을 이용해 먼저 최종 인프라 상태를 만들어놓고, 잘 작동하는지 확인한 다음, 이를 해당하는 리소스를 하나씩 코드로 옮기는 방법을 사용하는 방식을 사용해 보면 좋습니다.

다음 자습서를 순서대로 따라 합니다. 먼저 AWS Management Console을 통해 최종 결과물을 따라 해보고, 예상 상태가 무엇인지 먼저 파악해야 합니다.

모든 리소스를 만들 때에는 반드시 이름을 붙여놓도록 합시다.

참고: https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html

 

Step 1 : 자습서: DB 인스턴스에 사용할 Amazon VPC 생성
1. VPC 및 서브넷 생성

- 프라이빗 서브넷과 퍼블릭 서브넷이 각각 두 개, 총 네 개가 있어야 합니다.

 

1.1 AWS Console Management에 들어가 VPC 기입하고 VPC 페이지에서 “VPC 생성”

VPC 등 만 선택 후 사진 하이라이트된 부분 처럼 선택 하고 DNS는 기본 값으로 설정

 

2. VPC 보안 그룹 생성

- 퍼블릭 웹 서버가 사용할 VPC 보안 그룹을 만들어야 합니다.

- 프라이빗 DB 웹 서버가 사용할 VPC 보안 그룹을 만들어야 합니다.

VPC의 퍼블릭 EC2 인스턴스에 연결하려면 VPC 보안 그룹에 인바운드 규칙을 추가해야 합니다. 이를 통해 인터넷에서 트래픽을 연결할 수 있습니다


2.1 AWS VPC 데시보드에 들어가 보안 -> 보안 그룹 -> 보안 그룹 생성

- SSH에서 Amazon EC2 인스턴스에 액세스하도록 허용합니다. 이렇게 하면 Amazon EC2 인스턴스에 연결하여 웹 서버 및 다른 유틸리티를 설치할 수 있습니다. 또한 EC2 인스턴스에 연결하여 웹 서버의 콘텐츠를 업로드할 수도 있습니다.

- 새 인바운드 규칙에 다음 값을 설정하여 웹 서버에 대한 HTTP 액세스를 허용합니다.
- VPC는 1.1에서 생성한 VPC 선택

 

2.2 프라이빗 DB 인스턴스에 대한 VPC 보안 그룹 생성

AWS VPC 데시보드에 들어가 보안 -> 보안 그룹 -> 보안 그룹 생성

- VPC는 1.1에서 생성한 VPC 선택
- 인바운드 규칙은 MYSQL / Aurora로 선택하고 2.1에서 생성한 terraform 보안 그룹 선택, 이렇게 하면 웹 서버에서 DB 인스턴스에 연결할 수 있습니다.
3. DB 서브넷 그룹 생성

- RDS 인스턴스가 사용할 VPC 서브넷 그룹을 만들어야 합니다.

3.1 Amazon VPC 콘솔이 아닌 Amazon RDS 콘솔에 연결해야 합니다 -> AWS RDS에 들어가 서브넷 선택합니다.

- 가용 영역 선택 후 그전에 생성한 Private 서브넷 선택 후 생성

 

Step 2 : EC2 인스턴스 생성
만들어야 하는 사양은 다음과 같습니다.
- AMI: Ubuntu Server 18

- 인스턴스 타입: t2.micro

- 사용자 데이터

#!/bin/bash

echo "Hello, World" > index.html

nohup busybox httpd -f -p ${var.server_port} &

- 키 페어: 수동으로 만들고 EC2에 할당합니다.

 

2.1 Terraform 파일 생성 / 실행 하고 싶은 로컬 디렉토리 생성하고 디렉토리에 인프라 생성할 파일 생성 합니다. “touch main.tf” 이후 디렉토리 선택 및 dependencies 설치하기 위해 terraform init 실행 합니다.

2.2 Main.tf 에 ec2 생성할 코드를 작성합니다.

- AWS IAM에 들어가 새로운 사용자 생성하여 필요한 권한 / 정책 할당하고 access key 새로 받습니다.
- Server_port 변수가 필요하여 포트번호 3000으로 설정 했습니다.

이상없으면 정상적으로 Terraform 통해 AWS EC2가 생성됩니다.

EC2 생성하면서 이슈 및 해결 방법 :
이슈 1 : Dependency 없음 error
해결 : main.tf 파일이 있는 로컬 디렉토리에 들어가 terraform init으로 설치

이슈 2 : 서버 변수 (parameter) 설정 안됨
해결 : variable “server_port”에 포트번호 3000 할당

이슈 3 : AWS AMI 잘 못 선택 (arm64로 선택)
해결 : 아키텍처 ami X86_64 이미지로 다시 선택

이슈 4: EC2 키 페어 못 찾음 / 없음
해결 : AWS EC2 데시보드 들어가 키 페어 선택하여 새로운 키 페어 생성합니다. .pem 파일로 생성하여 내용 다운받고 해당 로컬 디렉토리에 복사 하였습니다

이슈 5 : EC2 권한 없음
해결 : 새로 생성한 IAM 사용자에 EC2 권한 부여

Step 3 : DB 인스턴스 생성
3.1 AWS RDS 페이지에 들어가 새로운 데이터베이스를 생성합니다 (EC2 생성한 리전과 동일해야함)
3.2 데이터베이스 설정
3.2.1 표준 생성 선택
3.2.2 MySQL 선택  
3.2.3 Free tier Template 선택
3.2.4 인스턴스와 사용자명 + 비밀번호 기입
3.2.5 Burstable classes (db.t3.micro) 선택
3.2.6 스토리지 섹션에서 기본값으로 유지 합니다. (Auto Scaling 미선택함 (요금 증가)
3.2.7 컴퓨팅 리소스에서 EC2 컴퓨팅 리소스에 연결을 선택 합니다 -> 생성한 EC2 선택합니다 (EC2는 작동해야합니다)
3.2.8 데이터베이스 인증 섹션에서 암호 인증이 선택 되어 있는지 확인합니다.
3.2.9 모두 확인 후 이상 없으면 데이터베이스 생성합니다
.

데이터베이스 생성 참고 :
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateDBInstance.html

 

Step 4 애플리케이션 로드 밸런서 및 Auto Scaling Group 적용
4.1 AWS EC2 Load Balancer 데시보드에 들어가 애플리케이션 로드 밸런서 생성합니다.
Target Group가 없는 경우 하나 생성하여 연결 하면 됩니다.

4.2 AWS EC2 데시보드에 들어가 Auto Scaling -> 시작 구성에 들어가 Auto scaling 하나 생성합니다. EC2에 사용한 AMI / 인스턴스 타입 선택하고 생성합니다

지금 상단에서 진행한 모든 작업을 Terraform 코드로 진행 해야합니다.