🛠️

컨퍼런스 신청 플랫폼 미션 실습환경 구성 가이드

VPC, Subnet, Route Table, Security Group 등 망 구성은 앞선 강의 및 미션을 통해 학습한 지식을 바탕으로 직접 진행해보세요!
각자의 상황에 따라, 캡쳐와는 다른 값을 설정해야 할 수 있습니다!
Amazon Linux 2023 AMI 환경을 기준으로 작성하였습니다.

1. RDS 구성하기

DB 식별자는 각 모듈을 구분할 수 있게 적절히 지정해주시면 됩니다.
마스터 사용자 이름과 암호, 그리고 DB 생성 후 만들어지는 URL 등을 각 애플리케이션 application-prod.properties 혹은 yml 파일에 기입하시면 됩니다.
spring: datasource: url: jdbc:mysql://analysis-1.cluster-cvj9m8lve12s.ap-northeast-2.rds.amazonaws.com:3306/analysis?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false&useUnicode=yes&characterEncoding=UTF-8 username: root password: password1! flyway: enabled: true baseline-version: 1 baseline-on-migrate: true jpa: database-platform: org.hibernate.dialect.MySQL8Dialect open-in-view: false properties: hibernate: format_sql: true show-sql: true
YAML
복사
깃헙 저장소에 제공하는 DDL 및 초기 데이터를 워크벤치로 추가하기 위해, public access를 허용해줍니다.
DB 사용을 위해 내부망 용도의 서브넷과 보안그룹을 적절히 지정 혹은 생성해줍니다.
slow query, error log 등 수집하고 싶은 로그도 체크해줍니다.

2. Launch Template 작성하기

Auto Scaling Group에서 자동으로 생성할 EC2 템플릿을 생성합니다.

0) VPC DNS 호스트이름 활성화

VPC 설정 편집에서 DNS 호스트 이름 활성화를 체크합니다.

1) Amazom Linux 이미지 선택

이미지는 최신 버전이 보안상 안전합니다.
Ubuntu 이미지로 진행해도 괜찮습니다. 다만 aws cli를 설치하는 시간을 줄이고자 이번 미션에서는 amazon linux로 가이드합니다.

2) 설정

인스턴스 유형, Key pair, 서브넷, 보안그룹, Public IP 자동할당, IAM 권한 설정 등 WAS에 적용할 정책을 설정합니다.
AMI를 활용하신 분들은 필요한 패키지를 미리 받아두었을 경우, Public IP 할당을 하지 않아도 좋습니다.
S3에서 배포스크립트 혹은 배포본(jar 파일 등)을 받기 위해서는 S3 권한 정책이 추가된 역할을 부여해야 합니다. (AmazonS3FullAccess 등)
Cloudwatch agent를 활용하여 정보를 수집하기 위해서는 Cloudwatch 권한 정책이 추가된 역할을 부여해야 합니다. (CloudWatchAgentServerPolicy 등)

3) 시작 명령어 작성

#!/bin/bash sudo yum install -y amazon-cloudwatch-agent sudo aws s3 cp s3://[S3버킷 경로]/config.json /opt/aws/amazon-cloudwatch-agent/bin/config.json sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json sudo yum install -y java-17-amazon-corretto aws s3 cp s3://[S3버킷 경로]/conference-0.0.1-SNAPSHOT.jar /home/ec2-user java -jar -Dspring.profiles.active=prod /home/ec2-user/conference-0.0.1-SNAPSHOT.jar
Bash
복사
고급 세부 정보 가장 하단에 위치해 있어요.
S3 버킷 경로는 자신의 S3 버킷 및 파일이 위치한 경로를 지정해주시면 됩니다.
EC2가 정상적으로 실행된 후에 동작해야 할 명령어들을 입력합니다. 배포 상황에 따라 내용은 달라질 수 있습니다.
jar 파일을 s3에 직접 업로드해주셔도 좋고, github action 등을 통해 main branch 머지 시에 버전을 빌드 후 s3로 업로드하도로 구성하셔도 좋습니다.

3. Auto Scaling Group 구성

1) Launch Template 설정

Launch Template 보안 패치 등의 이유로 버전이 바뀐다면 추후 Auto Scaling Group 상 템플릿 버전만 바꿔도 보안 패치가 이루어집니다.
특정 버전으로 배포할 게 아니라면, Latest로 설정해두어도 좋습니다.

2) 네트워크 설정

WAS 용도로 사용할 예정이므로 외부망 2개 서브넷을 설정해줍니다.

3) 로드밸런서 생성

EC2 앞단에 부하분산 용도의 로드밸런서를 생성합니다.
Application Load Balancer 로 생성해야 이 후 WAF 등을 추가할 수 있습니다.

4) 타겟 대상 생성

로드밸런서의 트래픽을 전달할 대상그룹을 생성합니다.
우리가 앞서 작성해둔 LaunchTemplate을 통해 생성되는 EC2 인스턴스가 타겟 대상 그룹에 속하게 됩니다.

5) 그룹 크기 지정

생성하길 희망하는 EC2 인스턴스 갯수, 최소 갯수, 최대 갯수 등을 설정합니다. EC2 인스턴스를 모두 중지해둘 땐, 원하는 용량을 0으로 지정하면 됩니다.
크기 조정 설정값을 통해 CPU 사용률, 네트워크 트래픽 등 특정 지표가 임계값에 이를 때, 서버를 최대 몇대까지 구성할지 설정해둘 수 있어요.

6) 종료 정책 구성

이 정책은 Auto Scaling Group 을 생성한 후에 편집을 통해 설정할 수 있어요.
기본 정책으로 둔다면, 그룹 크기를 줄일 때 임의로 서버를 종료시킵니다.
Launch Template 버전, 오래전에 생성된 인스턴스 순으로 먼저 종료시키도록 종료 정책을 구성해봅니다.

4. DNS

route53에서 생성할 수도 있고, 지하철 노선도 미션과 같이 무료 도메인 사이트 등을 활용하여 DNS 설정을 하여도 괜찮습니다.

5. TLS

1-a) 인증서 생성 (ACM)

만약 무료 도메인 사이트를 활용한다면, CNAME 정보를 입력하면 잠시 후 검증 상태가 “성공”으로 바뀐 것을 확인할 수 있습니다.
route53을 통해 도메인을 구매했다면, “route53에서 레코드 생성” 버튼을 클릭 후 레코드를 생성하면 됩니다.

1-b) 인증서 가져오기

lets encrypt를 통해 생성한 인증서를 활용할 경우, “가져오기” 버튼을 클릭한 후 기존에 생성한 인증서 정보를 기입합니다.
BEGIN CERTIFICATE와 END CERTIFICATE 까지 포함하여야 합니다.
인증서 본문 -> cert.pem
프라이빗 키 -> privkey.pem
체인 -> chain.pem

2) ALB에 인증서 적용하기

ALB에서 인터넷구간에서 요청받을 포트를 HTTPS로 변경하고, HTTPS 통신시 사용할 인증서를 지정해줍니다.