[프로젝트 배포] AWS EC2 인스턴스 생성

승등·2024년 5월 26일

배포

목록 보기
1/3

팀프로젝트로 진행했던 여행 정보 공유 SNS 프로젝트 둘레둘레 를 배포해보려 한다.

AWS EC2, RDS, S3를 사용하여 직접 배포해보는 것을 1차 목표로 하며,
Github Action, Docker를 활용한 CI/CD 구축을 2차 목표로 한다.


AWS EC2 인스턴스 생성

인스턴스 시작

AWS EC2 대시보드의 인스턴스 > 인스턴스 에서 인스턴스 시작 으로 생성한다.

1. OS 선택

이름 설정 후 AMI를 선택한다.(Ubuntu Server 24.04 LTS(HVM), SSSD Volum Type)

AMI (Amazon Machine Image)

  • EC2 인스턴스 생성을 위해 필요한 설정, 정보 등을 이미지로 만들어 둔 것.

2. 인스턴스 유형 및 키페어 선택

인스턴스 유형을 선택하고(프리티어에서는 t2.micro 외의 선택지가 없다.) 키 페어를 선택한다.

키 페어가 존재하지 않을 시 새 키 페어 생성 으로 키 페어를 생성해준다.
프라이빗 키는 EC2 인스턴스 접근 시 사용하므로 유출되지 않도록 주의해서 관리해야 한다.

3. 네트워크 설정

보안 그룹을 새로 생성하거나 기존 보안 그룹 중에서 선택할 수 있다.
현재는 생성된 보안 그룹이 없으므로 기존 보안 그룹 선택 시 default로 설정된 보안 그룹만 선택할 수 있다.

4. 스토리지 구성

스토리지의 경우 프리 티어는 최대 30GB까지 허용된다고 한다. 최대치를 넘지 않도록 설정해둔다.


여기까지 완료했다면 나머지 고급 세부 정보는 변경하지 않고 인스턴스 시작을 눌러 생성한다.

생성된 인스턴스는 대기 중으로 표시된다.


보안 그룹 설정

생성한 인스턴스의 보안 그룹 설정을 변경해준다.

1. 인바운드 규칙 편집

최초 편집 시 SSH 연결을 위한 22포트 설정만 존재한다.

HTTP를 추가해주고 사용자 지정 TCP로 spring boot의 기본포트인 8080도 추가해준다.
추후 무중단 배포를 위해 서버를 추가할 경우 해당 포트도 추가해주면 된다.


탄력적 IP 주소 할당

AWS EC2 인스턴스는 서버를 종료 후 재시작 할 시 매번 새로운 IP가 할당된다.
탄력적 IP는 이러한 문제를 해결하기 위해 외부에서 접근 가능한 고정 IP다.

주의 - 탄력적 IP 생성 후 인스턴스에 연결하지 않으면 비용이 발생한다.
반드시 생성 후 인스턴스에 연결하고 인스턴스 삭제 시 탄력적 IP도 함께 삭제할 수 있도록 한다.

네트워크 및 보안 > 탄력적 IP 에서 탄력적 IP 주소 할당을 선택하여 새로운 탄력적 IP를 할당받는다.

기본 설정에서 수정할 요소는 없다.

할당 된 탄력적 IP를 앞서 생성한 인스턴스에 연결한다.

인스턴스의 정보를 살펴보면 퍼블릭 IPv4주소에 탄력적 IP로 설정된 것을 확인할 수 있다.


로컬에서 EC2 인스턴스 서버 접속

터미널을 실행하여 로컬에서 앞서 생성한 EC2 서버로 접속을 시도 해보려한다.
윈도우 환경에서는 putty와 같은 별도 클라이언트를 사용하는 편이 편리하다고 하지만 설치되어 있는 git bash로 접속을 시도하였다.

홈 디렉토리에 .ssh 디렉토리를 생성한다.(.ssh 디렉토리가 존재할 경우 생략)

mkdir ~/.ssh

앞서 키-페어 생성 단계에서 다운로드 받은 .pem 파일이 존재하는 디렉토리에서 .pem 파일을 찾아 .ssh 디렉토리로 복사한다.

cp (pem 키 파일) ~/.ssh/

.ssh 디렉토리로 이동하여 내부 파일을 조회하면 정상적으로 복사된 파일을 확인 할 수 있다.

pem 키 권한을 변경하고 vim 으로 config 파일을 작성한다.

아래와 같이 호스트 정보를 등록한다.

	Host Dulle-Dulle
        HostName 43.200.224.187
        User ubuntu
        IdentityFile ~/.ssh/Dulle-Dulle-Springboot.pem

vim 을 사용할 때는 i를 눌러 insert모드로 변경 후 입력, 입력을 완료한 후에는 esc를 누른 후 :wq 명령어를 입력하여 저장 및 종료할 수 있다.

설정 파일도 권한을 변경해준 후 앞서 등록한 호스트로 EC2 인스턴스에 접속한다.

관련 트러블 1

ssh 최초 접속 시 아래와 같이 신뢰 여부를 묻는다.

해결

  • ssh-keyscan 커맨드를 통해 자동으로 known_hosts에 등록할 수 있다.

관련 트러블2

관련 설정을 모두 완료하였으나 아래와 같이 권한이 거부되었다.

해결

  • 여러 요인들이 있지만 이 경우는 vim으로 등록한 confing 파일의 host내용이 잘못된 경우였다.
    다른 레퍼런스를 참조하여 작성하다 User 이름을 잘못 등록해준 것이 원인이었다.
    기존에는 ec2-user를 등록해두었으나 Ubuntu AMI의 경우 사용자 이름으로 ubuntu를 등록해주어야 한다.
    참고 - [AWS] EC2 ssh 접속 시 Permission denied 현상

JDK 설치

프로젝트와 동일한 버전의 JDK17을 설치해줬다.
(amazon corretto17의 경우 아래와 같은 절차를 거쳐야 설치가 가능하다.)
참고

wget -O - https://apt.corretto.aws/corretto.key | sudo gpg --dearmor -o /usr/share/keyrings/corretto-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/corretto-keyring.gpg] https://apt.corretto.aws stable main" | sudo tee /etc/apt/sources.list.d/corretto.list
 sudo apt-get install -y java-17-amazon-corretto-jdk

java -version 으로 현재 버전 확인

openjdk version "17.0.11" 2024-04-16 LTS
OpenJDK Runtime Environment Corretto-17.0.11.9.1 (build 17.0.11+9-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.11.9.1 (build 17.0.11+9-LTS, mixed mode, sharing)

레퍼런스

https://velog.io/@leeeeeyeon/AWS-EC2로-서버-환경을-만들어보자
https://bcp0109.tistory.com/356
https://dev-coco.tistory.com/107

profile
기록, 코딩보다 어렵다-!

0개의 댓글