Github Action을 활용한 배포 자동화 CI/CD - (1) EC2 생성하기

유아 Yooa·2023년 1월 7일
1

CI/CD

목록 보기
1/9
post-thumbnail

Overview

지난 해커톤에서 구축했던 서버 환경을 다시 한번 세팅보는 것을 목표로 한다.

  • AWS EC2 인스턴스에 docker를 활용한 Springboot 서버 배포
  • Github Actions를 활용한 CI/CD 구축
  • AWS RDS, S3 설정
  • Nginx ssl 적용 및 reverse proxy 설정

최종적인 소프트웨어 아키텍처는 다음과 같다.


1. EC2 인스턴스 생성

EC2는 AWS에서 제공하는 클라우드 컴퓨팅 서비스로, 아마존이 사용자들에게 독립된 컴퓨터를 임대해주는 서비스이다.

  • EC2를 사용해 가상 서버를 구축하고, 보안 및 네트워킹을 구성해서 빠르게 애플리케이션을 배포할 수 있다.
  • 인스턴스 유형, OS, 소프트웨어 패키지 등을 선택할 수 있고, memory/cpu/storage/booting partition size 등을 선택할 수 있는 유연한 클라우드 호스팅 서비스이다.

AWS 홈페이지에 접속해 로그인한다.

1-1. AWS Region 설정하기

콘솔창 우상단 reion을 서울로 설정한다.
region에 따라 인스턴스 위치가 결정되어 외국으로 하면 속도가 낮을 수 있다.

1-2. EC2 서비스 메뉴로 이동하기

상단 검색창에 'ec2'를 입력해서 이동한다. 즐겨찾기를 해두면 사진과 같이 메인 대쉬보드 상단에 고정되어 있어서 이동이 편하다.

1-3. 인스턴스 생성하기

ec2 메뉴로 접속하면 대쉬보드가 출력된다. 현재는 생성된 인스턴스가 없기 떄문에 실행중인 인스턴스가 0개임을 확인할 수 있다.


좌측 메뉴에 인스턴스를 클릭해 새로운 인스턴스를 생성할 수 있다.

인스턴스 시작 버튼을 클릭한다.

이름은 비워놓아도 상관없다.

✅ AMI 및 인스턴스 유형 선택

AMI (Amazon Machine Image)는 인스턴스를 시작하는데 필요한 정보를 제공하는 이미지로, 서버 구성을 무엇으로 할지 선택하는 것이라 생각하면 된다. 한 AMI로 여러 인스턴스를 생성할 수 있다.

필자는 프리티어를 사용할 것이기 때문에 Ubuntu LTS 버전을 선택했다.


인스턴스 유형도 프리 티어이기 때문에 t2.micro를 선택했다.

✅ 키 페어 생성

키 페어는 EC2 서버에 ssh 접속을 하기 위해 생성해야 한다.

새 키 페어 생성을 클릭해 원하는 이름을 입력해 생성한다.
생성하면 자동으로 my-tamla-key.pem 파일이 다운로드 되고, ssh 환경에 접속하기 위해서는 해당 키 파일이 존재하는 위치로 가서 ssh 명령어를 실행하면 된다.

한번 다운로드 받은 후에는 재다운받을 수 없기 때문에 안전한 곳에 저장해둔다.

✅ 네트워크 및 스토리지 선택

네트워크 설정은 EC2에 접속을 허용하는 ACL을 생각하면 된다. 생성 이후에 보안 그룹을 별도로 설정할 것이기 때문에 내 IP에서만 ssh 트래픽 접속이 가능하도록 설정해준다.

프리티어는 최대 30까지만 지원하기 때문에 스토리지 부분도 변경해준다. 볼륨 유형은 범용 SSD로 선택해야 한다.

만약 Provisioned IOPS SSD(프로비저닝된 IOPS SSD)를 선택한다면 사용하지 않아도 활성화한 기간만큼 비용이 발생하게 된다.

✅ 인스턴스 시작하기

다른 세부 설정은 기본 값으로 두고 이상이 없다면 인스턴스 시작을 클릭한다.

인스턴스가 성공적으로 생성된 것을 확인할 수 있다.

이제 탄력적 IP를 설정하고 보안 그룹을 추가해보자.


2. 탄력적(Elastic) IP

EC2 인스턴스를 생성할 때는 항상 새로운 IP를 할당한다. 인스턴스를 중지하고 재시작하는 경우에도 새로운 IP가

탄력적 IP란 외부에서 인스턴스에 접근 가능한 고정 IP이다. 고정적인 IP를 가질 수 있도록 탄력적 IP 주소를 할당해주어야 한다.

탄력적 IP를 만들고 EC2에 연결하지 않으면 과금이 되기 때문에 주의해야 한다. 필요한 만큼만 생성하는 것이 중요하다.

2-1. 탄력적 IP 할당하기


좌측 메뉴 스크롤을 내리다보면 네트워크 및 보안 > 탄력적 IP를 찾을 수 있다.

아무것도 할당받은게 없기 때문에 새로운 IP 주소를 추가해보자.

변경사항은 딱히 없으니 바로 할당 버튼을 클릭한다.

2-2. 탄력적 IP 인스턴스와 연결하기


방금 생성한 탄력적 IP를 선택한 후 작업 > 탄력적 IP 주소 연결을 누른다.


현재 내 인스턴스 목록을 선택할 수 있고 연결된 프라이빗 IP까지 선택 가능하다.

연결 버튼을 클릭한 후, 인스턴스 정보를 확인하면 퍼블릭 IPv4 주소탄력적 IP 주소의 값이 동일하다는 것을 확인할 수 있다.

3. SSH 클라이언트로 서버 접속하기

ssh 접속 방법은 친절하게 안내되어 있다. 순서대로 시도해보자.

3-1. 키 페어 파일 위치로 이동하기


터미널을 실행해 다운받은 키 페어 파일 위치로 이동한다.

3-2. 키 파일 권한 변경하기

$ chmod 400 키페어이름.pem

키 파일의 권한을 변경한다.

3-3. ssh 접속하기

퍼블릭 DNS 또는 퍼블릭 IP를 사용해서 인스턴스에 접속할 수 있다.

ssh -i "키페어이름.pem" ubuntu@<퍼블릭DNS>

or

ssh -i "키페어이름.pem" ubuntu@<퍼블릭IP>

3-4. 호스트를 등록해 간편 접속하기

✅ ./ssh 디렉터리로 키 페어 파일 복사하기

$ cp 키페어이름.pem ~/.ssh/

✅ 키페어 파일의 권한 변경하기

$ cd ~/.ssh
$ chmod 600 키페어이름.pem

✅ ~/.ssh/config 파일 생성하기

$ vi ~/.ssh/config

이미 파일이 존재한다면 맨 아래에 입력하면 된다.
User는 ubuntu를 선택했다면 ubuntu이고 그 외는 ec2-user이다.

Host {원하는 호스트 이름}
User {유저 이름}
HostName {탄력적 IP}
IdentityFile {키 페어 파일 위치}

설정한 host 이름으로 간단하게 접속할 수 있다.

ssh mytamla

4. 보안 그룹 설정하기

보안 그룹은 AWS에서 제공하는 방화벽 기능이다. RDS 처럼 외부에서 함부로 접근하면 안되는 인스턴스는 허용된 IP에서만 접근하도록 설정이 필요하다.

  • 인바운드 : 외부에서 EC2 인스턴스 내부로의 접근을 허용
  • 아웃바운드 : EC2 인스턴스 내부에서 외부로의 접근을 허용

4-1. 현재 보안 그룹 확인


인스턴스 요약 하단에 보안 탭에서 확인 가능하다.
현재의 보안 그룹은 인스턴스 생성 시 자동으로 할당되는default 보안그룹이다.

22번 포트의 내 IP에 대해서 TCP 연결을 허용하도록 설정되어 있다. 새로운 보안 그룹을 만들어보자.

4-2. 보안 그룹 ID 리스트 확인하기


좌측 메뉴 중 탄력적 IP 상단에 보안 그룹 메뉴가 있다.

default로 생성된 보안 그룹은 launch-wizard-1이다. 보안 그룹은 인스턴스와 별개로 존재하기 때문에 한번 만들어두면 새로운 인스턴스에도 적용할 수 있다.

보안 그룹 생성 버튼으로 새로운 보안 그룹을 만들어보자.

4-3. 보안 그룹 생성하기

보안 그룹의 이름과 설명을 추가한다.

✅ 인바운드 규칙 편집하기


인바운드 규칙은 외부에서 EC2로 요청할 때 허용할 IP 대역을 설정하는 것이다.

로컬 PC에서 서버에 접속할 수 있게 SSH를 추가하고 소스를 내 IP로 추가한다. 소스를 선택하면 자동으로 IP가 추가되고, 특정 IP를 넣으려면 사용자 지정으로 추가할 수 있다.

여러 사람이 함께 작업하는 프로젝트라면 각각의 로컬 PC IP를 전부 추가해주어야 한다.

ssh, http, https와 같은 기본 프로토콜들과 스프링 부트 프로젝트까지 사용자 지정으로 추가해준다.

✅ 아웃바운드 규칙 편집하기

아웃바운드 규칙은 따로 설정할 필요가 없어서 그대로 둔다.

이후 보안 그룹 생성 버튼을 눌러주어 작업을 완료한다.

4-4. 보안 그룹 변경하기

인스턴스 요약 창으로 돌아와 우측 상단 작업 > 보안 그룹 변경 버튼을 눌러준다.


보안 그룹은 여러 개를 동시에 설정할 수 있다. 기존에 설정되었던 launch-wizard-1을 제거한 후 새로 생성한 보안 그룹을 추가한다.


보안 그룹이 적용된 것을 확인할 수 있다.


참고
https://bcp0109.tistory.com/356
https://velog.io/@kyj311/AWS-EC2-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

profile
기록이 주는 즐거움

0개의 댓글