매번 build를 하고, 빌드된 jar파일을 EC2 서버에 접근해서 올리는 작업은 번거롭기 때문에 GithubAction, CodeDeploy를 통해 배포 자동화를 설정한다. 한 번 설정해두면 번거로운 작업이 사라지게 되어서 개발에만 집중할 수 있다.
구축할 파이프라인의 진행할 순서를 간단하게 요약하면 다음과 같다.
- Github에 코드를 Push하면 Github Action이 자동으로 실행되며 빌드&테스트를 한다.(CI)
- 문제가 없다면 압축파일(.zip)을 만들어서 AWS S3에 업로드한다.
- CodeDeploy를 실행하여 S3에 있는 코드를 EC2에 배포한다.
1. IAM 설정 셋팅
Github Action이 S3와 CodeDeploy에 접근하기 위해 해당 권한을 가지는 IAM 사용자 계정을 생성한다.
1) IAM 계정 생성
1. 좌측 메뉴 바 - 엑세스 관리 - 사용자로 이동하고 사용자 생성 버튼을 클릭한다.
2. 사용자의 이름을 지정하고 다음 버튼을 클릭한다.
3. 기존 정책 직접 연결을 선택하고 다음 3가지 권한 정책을 추가한다.
- AmazonEC2FullAccess
- AmazonS3FullAccess
- AWSCodeDeployFullAccess
4. 성공적으로 IAM 사용자가 생성되었다.
2) 키페어 발급
1. 생성한 사용자의 세부 정보에서 엑세스 키 만들기 버튼을 클릭한다.
2. 기타를 선택한다.
3. 본인이 구분하기 쉬운 태그 값을 입력하고 엑세스 키 만들기 버튼을 클릭한다.
4. 키 페어를 다운로드하여 안전하게 보관한다.
3) 깃허브에 IAM 사용자 키 설정
배포하는 프로젝트의 깃허브 레포로 접속하여 Settings - Secrets and variables - Actions로 이동하여 저장해둔 AWS IAM 사용자 키를 설정한다.
- AWS_ACCESS_KEY_ID : 액세스 키 ID
- AWS_SECRET_ACCESS_KEY : 비밀 액세스 키
해당 설정으로 Github Action을 통해 S3와 CodeDeploy에 접근할 수 있게 된다.
2. EC2 설정 셋팅
1) 인스턴스 생성
- 애플리케이션 및 OS 이미지
ubuntu 20.04 버전을 추천한다. 22.04 버전 사용 시 ruby 버전 관련 이슈가 있다고 한다.
- 인스턴스 유형
- 키 페어
- 보안그룹
스프링 부트에 내장된 톰캣 웹 서버는 8080 포트를 기본으로 사용한다. 따라서 8080 포트를 열어준다.
2) 탄력적 IP 설정
2023.10.27 - [DevOps/AWS] - [AWS] 탄력적 IP(Elastic IP) 설정하기
3) 태그 추가
CodeDeploy를 생성할 때 어떤 인스턴스에서 수행할지 구분하는 값으로 태그를 사용하기 때문에 필요하다.
1. EC2 인스턴스로 이동하고 작업 - 인스턴스 설정 - 태그 관리를 클릭한다.
2. 원하는 키 이름을 지정하고 저장 버튼을 클릭한다.
3. EC2 인스턴스 정보에서 등록된 태그를 확인할 수 있다.
4) CodeDeploy Agent 설치
CodeDeploy의 명령을 EC2에서 수행하기 위해 EC2에 CodeDeploy agent를 설치한다.
1. EC2에 접속한다.
2. CodeDeploy agent를 설치한다.
sudo apt update
sudo apt install ruby-full
sudo apt install wget
cd /home/ubuntu
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
sudo ./install auto
sudo ./install auto
3. 설치를 확인한다.
sudo service codedeploy-agent status
5) Java 설치
sudo apt update
sudo apt install openjdk-11-jdk
프로젝트에서 사용한 버전에 맞게 자바를 설치한다.
6) EC2 전용 IAM 역할 추가 및 연결
EC2 인스턴스에서 S3 접근할 수 있도록 IAM 역할을 생성해야 한다.
1. 좌측 메뉴바 - 엑세스 관리 - 역할로 이동하고 역할 만들기 버튼을 클릭한다.
2. 엔티티 유형으로 AWS 서비스, 사용 사례로 EC2를 선택한다.
3. 다음 두 가지 권한 정책을 추가한다.
- AmazonS3FullAccess
- AWSCodeDeployFullAccess
4. 이름을 지정하고 역할을 생성한다.
5. IAM 역할을 지정 EC2 인스턴스를 선택하고 작업 - 보안 - IAM 역할 수정을 클릭한다.
6. IAM 역할을 연결한다.
3. RDS 셋팅
개발용으로 H2 데이터베이스를 사용했다.
프로덕션 레벨에서는 MySQL을 사용하기 위해 RDS로 DB를 구축한다.
4. S3 설정 셋팅
1) S3 버킷 생성
빌드한 프로젝트 코드를 압축해서 S3에 저장한 후 EC2 서버에서 S3에 접근해서 압축한 파일을 가져오기 위해 사용한다.
1. 좌측 메뉴 바 - 버킷 - 버킷 만들기 버튼을 클릭한다.
2. 이름만 지정하고 나머지는 기본 설정값으로 생성한다.
5. CodeDeploy 설정 셋팅
1) CodeDeploy 전용 IAM 역할 추가 및 연결
1. 좌측 메뉴바 - 엑세스 관리 - 역할로 이동하고 역할 만들기 버튼을 클릭한다.
2. 엔티티 유형으로 AWS 서비스, 사용 사례로 CodeDeploy를 선택한다.
3. 이름을 지정하고 역할을 생성한다.
2) 애플리케이션 생성
1. 좌측 메뉴 바 - 애플리케이션 - 애플리케이션 생성 버튼을 클릭한다.
2. 애플리케이션 이름을 지정하고 컴퓨팅 플랫폼으로 EC2/온프레미스를 선택한다.
3) 배포 그룹 생성
1. 방금 생성한 애플리케이션에서 배포 그룹 생성 버튼을 클릭한다.
2. 배포 그룹 이름을 지정하고 서비스 역할로 CodeDeploy 전용으로 생성한 IAM 역할을 선택한다.
3. 환경 구성에서 태그를 통해 CodeDeploy를 동작시킬 EC2 인스턴스를 선택한다.
이때 EC2 인스턴스에서 태그를 추가해야 선택할 수 있다.
4. 나머지 설정은 다음과 같이 설정하고 배포 그룹을 생성한다.
→ 2편에서 이어집니다.
'DevOps > AWS' 카테고리의 다른 글
[AWS] RDS 구축하기 (0) | 2023.12.03 |
---|---|
[AWS] 스프링 부트 프로젝트 배포 자동화하기 (2) (0) | 2023.12.03 |
[AWS] 탄력적 IP(Elastic IP) 설정하기 (0) | 2023.10.27 |
[AWS] SSH를 통한 EC2 인스턴스 외부 접속 (0) | 2023.09.19 |
[AWS] MySQL & PHP 설치 및 Nginx와 연동 (0) | 2023.04.24 |