해당 글은 2024년 4월 11일에 생성된 인스턴스를 기준으로 작성되었습니다. (Ubuntu 22.04로 만들었지만 20.04로 만들어도 문제없습니다! 직접 만들어서 확인해 봤습니다.)
💡 프로젝트 기술스택 : SpringBoot + MySQL + JDK 17
1. EC2 인스턴스 만들기
AWS에 로그인한 후 EC2를 클릭하여 인스턴스를 시작합니다.
인스턴스의 이름을 작성하고 AMI를 선택합니다. 저는 우분투 22.04로 만들었지만, 20.04로 만들어도 괜찮습니다.
다음으로 키 페어를 만들어줍니다. 저는 기존의 키 페어를 사용했지만, 처음 만드시는 분들은 만들어 주셔야 합니다. 만드는 방법은 바로 아래에 나와있습니다.
새 키 페어 생성 버튼을 누른 후 키 페어 이름과 RSA를 선택한 뒤 생성합니다.
네트워크 설정은 보안 그룹만 건드렸습니다. <보안 그룹 생성>을 선택할 경우 디폴트 값으로 만들어주지만, 저는 미리 만들어둔 보안 그룹을 선택하였습니다. 나중에 8080과 같은 주요 포트로 접속이 안될 수도 있기 때문에, 필요한 포트를 인바운드 규칙으로 미리 열어둔 보안그룹을 만들어두고 선택하는 것이 좋습니다. (8080, 22, 3306 등)
제가 만든 보안 그룹은 위와 같습니다. 필요한 포트만 열어두는 것을 추천드립니다. 아웃바운드 규칙은 건들지 않았습니다.
스토리지는 프리티어 마지노선인 30으로 구성해 주었습니다. 마지막으로 인스턴스 생성 버튼을 누르면 됩니다.
2. 탄력적 IP 연결
다음으로 인스턴스에 부여해 줄 탄력적 IP를 만들어야 합니다.
탄력적 IP 만들기를 클릭한 후 위와 같이 선택하여 만들어줍니다. 서울을 기준으로 만들었습니다. (ap-northeast-2 == 서울)
다음으로 만들어진 탄력적 IP를 인스턴스에 연결하기 위해 탄력적 IP 주소 연결 버튼을 눌러줍니다.
미리 만들어둔 EC2 인스턴스와 그에 해당하는 프라이빗 IP 주소를 선택하여 연결합니다. 탄력적 IP를 만들어두고 인스턴스를 연결하지 않으면 비용이 발생합니다. 반드시 만들자마자 연결해 주세요.
3. EC2 역할 부여
AWS IAM에 들어가 역할을 생성할 겁니다.
역할 생성에 들어가 다음과 같이 선택합니다.
권한 정책에서 AmazonEC2FullAccess를 선택합니다.
이름을 작성해 준 뒤 생성 버튼을 누릅니다. 이름은 직접 만든 EC2 역할이라는 것을 알기 쉽게 정합니다.
만들어둔 EC2로 다시 돌아갑니다.
작업 > 보안 > IAM 역할 수정을 선택합니다.
방금 만든 EC2 역할을 부여합니다.
4. EC2 Ubuntu 서버에 JDK, MySQL 설치
다시 인스턴스 상태창으로 돌아와 연결 버튼을 선택합니다.
위 방법으로 Ubuntu 환경에 접속합니다.
// JDK 설치
sudo apt update
sudo apt install openjdk-17-jdk
// MySQL 설치
sudo apt update
sudo apt install mysql-server
프로젝트 환경이 Java + MySQL이기 때문에 위 명령어를 입력하여 JDK와 MySQL를 설치합니다.
MySQL은 권한을 부여해야 하기 때문에 추가 명령어가 있습니다. 아래 명령어를 입력해 줍니다.
// MySQL 환경 접속
sudo mysql -u root -p
// 접속 후 권한 부여 (계정ID와 비밀번호는 따옴표 있어야 됨)
use mysql
create user '계정 ID'@'%' identified by '비밀번호';
grant all on *.* to '계정 ID'@'%';
FLUSH PRIVILEGES;
// 프로젝트에서 사용하는 DB 생성 (DB이름은 따옴표 없어도 됨)
CREATE DATABASE DB이름 DEFAULT CHARACTER SET UTF8;
// 권한 확인
show grants for '계정 ID'@'%';
// 종료
exit
이후 MySQL 설정 파일 중 bind address 정보를 수정해야 합니다.
cd /etc/mysql/mysql.conf.d
sudo nano mysqld.cnf // 대부분 vi를 쓰는데 저는 nano가 훨씬 편합니다...
파일을 열어보면 bind-address가 127.0.0.1일 텐데, 위 사진과 같이 0.0.0.0으로 수정합니다.
5. 사용자 생성
다시 AWS IAM으로 가서 사용자를 만들어 줍니다. (아까는 역할을 만듦)
사용자 이름을 작성한 후 직접 정책 연결을 선택하여 3개의 정책을 부여합니다.
- AmazonEC2FullAccess
- AWSCodeDeployFullAccess
- AWSCodeDeployRole
그리고 생성 버튼을 누르면 사용자가 생성됩니다.
생성된 사용자를 클릭하면 액세스 키 만들기 버튼이 있습니다. 이 버튼을 누릅니다.
저는 기타를 누르고 넘어갔습니다. 사용 사례를 묻는 이유는 액세스 키가 노출될 경우 큰 보안 문제가 발생하기 때문입니다. 노출되지 않도록 조심해야 합니다.
설정 태그를 간단하게 입력하고 넘어가면 액세스 키와 비밀 액세스 키가 발급됩니다. 절대 노출되면 안 됩니다. 바로 밑에 .csv 파일 다운로드 버튼이 있으니 해당 버튼을 눌러 파일로 안전하게 보관하는 것을 추천드립니다.
6. 환경변수 설정
프로젝트 내 application.yml 파일에 환경변수가 작성되어 있다면 우분투 환경 내에 설정해주어야 합니다. 저는 /etc/environment 파일에 작성합니다. 환경 변수 적용은 알고 계시는 다른 방법을 사용하셔도 무관합니다.
cd ~
sudo nano /etc/environment
파일을 열어보면 PATH 한 줄이 적혀있습니다. 바로 아래에 환경변수 정보들을 입력합니다.
다 모자이크 처리해서 가독성이 떨어지지만 위처럼 필요한 환경변수 값을 입력합니다. 위 환경변수가 필요한 이유는 로컬 빌드 목적도 있지만, 자동화배포 목적도 있기 때문에 자동화배포를 원한다면 작성해야 합니다.
- AWS_ACCESS_KEY_ID == 위에서 만든 사용자 액세스 키
- AWS_SECRET_ACCESS_KEY == 위에서 만든 사용자 비밀 액세스 키
- DB_USERNAME == 위에서 권한을 준 MySQL 계정의 아이디
- DB_PASSWORD == 위에서 권한을 준 MySQL 계정의 비밀번호
- DB_URL == DB 연결을 위한 URL (jdbc:mysql://위에서 EC2에 연결한 탄력적 IP:3306/trip) ➡️ 위에서 부여해 준 탄력적 IP가 EC2의 Public IP입니다.
MySQL를 연결하기 위해서는 반드시 EC2에 연결된 보안 그룹 인바운드 규칙으로 3306 포트가 열려있어야 합니다.
여기까지 하면 EC2 우분투 환경 세팅이 끝납니다. 다음으로는 CodeDeploy 애플리케이션 및 배포 그룹 생성, S3 버킷 생성 및 권한 부여를 작성하겠습니다.
'Dev > AWS' 카테고리의 다른 글
[AWS] EC2 + CodeDeploy + S3 + GithubActions 조합으로 자동화배포 구축하기 - (3) GithubActions 연동 (0) | 2024.06.24 |
---|---|
[AWS] EC2 + CodeDeploy + S3 + GithubActions 조합으로 자동화배포 구축하기 - (2) CodeDeploy 및 S3 세팅 (0) | 2024.04.15 |
[AWS] io.awspring 라이브러리를 활용하여 SpringBoot & Amazon S3 연동하기 (0) | 2024.03.12 |
[AWS] CodeDeploy의 scripts/deploy.sh를 제대로 작성해보자 (1) | 2024.01.29 |
[AWS] EC2 배포 일주일 삽질 스토리 (feat. 환경변수) (1) | 2024.01.27 |