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
•
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 통신시 사용할 인증서를 지정해줍니다.