[스프링 부트와 aws로 혼자 구현하는 웹 서비스] 책으로 배포 공부를 하고있는데, 이제 웹의 기초 개발은 마쳤고 aws에서 배포를 세팅하는 단계에 왔다. 근데 이책.. 이전에도 공부하면서 알고 있었지만 n년전 책이라 버전차이가 있어서 최근에 맞춘 설정들이 필요해서 그것들을 정리해서 올려보려고 한다. 또 곧 있을 프로젝트 배포에 시간소요가 있으면 안되니까..
위 사진에서 [인스턴스 시작]버튼을 누르면 되는데 그러면 선택항목들이 쭉 나온다. 차례대로 보여주면
여기서 책을 따라가면 amazonLinux를 선택해야 한다.(버전은 다르다.책에서는 아마존1이지만 선택을 아마존2로 했다. 그렇게 선택한 이유는 아마존 리눅스 기본이미지로 되어있기 때문이다. 이점이 나중에 터미널에서 로컬과 연결하는 설정할때 명령어의 차이가 좀 생긴다.)
이를 AMI(amazon machine image)를 선택한다고 하는데, ami는 ec2 인스턴스를 시작하는데 필요한 정보를 이미지로 만들어 둔 것을 이야기한다. 인스턴스라는 가상 머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지로 생각하면 된다고 책자에 적혀있다.
t2: 요금 타입
micro : 사양
만약 아마존을 프리티어로 사용하고 싶다면 이 인스턴스 유형을 사용해야 과금방지가 된다.
크레딧 : 일종의 CPU를 사용할 수 있는 포인트 개념
인스턴스 크기에 따라 정해진 비율로 CPU 크레딧을 계속 받게 되며, 사용하지 않을 때는 크레딧을 축적하고, 사용할 때 이 크레딧을 사용한다. 크레딧이 모두 사용되면 더이상 ec2를 사용할 수 없다.
이 부분 주의 해야한다. 아마 처음 시작한다면 기존 키 페어를 선택하지 않고 새로 생성해야할 것이다. 키페어는 처음만 다운로드 받을 수 있다.
이 친구는 인스턴스에 접근하기 위한 pem key(비밀키)이다. 일종의 마스터키이기 때문에 절대 유출해서는 안된다.
[편집 버튼 클릭]
여기서는 보안그룹 이름이랑 설명만 변경해준다. 유의미한 이름으로 변경해주어야한다.
이거는 계속 볼거다. 중요한것이기도 하고.
계속 보는 이유는 이 작업을 하던 네트워크에서 끊기고 다른 환경에서 작업하면 변경해주어야하기 때문에 그렇다.(필자는 사정상 계속 네트워크가 변경되었는데 이부분에서 애를 좀 먹었다.)
세팅은 총 세가지
이렇게 설정해주면 된다.
tip)
필자가 얘기했던 것처럼 네트워크가 한번이라도 끊겼다 다시 연결했는데 작업이 안된다면 여기 인바운드 보안 그룹 규칙 편집을 하여 ssh유형의 소스 유형을 다시 한번 "내 ip"로 변경하면 원본의 값이 바뀔것이다.
30 GiB
gp2 (-> 과금방지)
로 설정
인스턴스를 중지하고 다시 시작하면 매번 ip가 변경되기 때문에 고정 Ip를 만들어주면 편하다. 탄력적 ip는 이와 같은 문제를 해결해준다.
[탄력적 ip 주소 할당 버튼 클릭]
여기서는 별다른 설정이 필요없다. 할당해주고 만들어둔 인스턴스와 연결하면 된다.
인스턴스를 선택하면 아래 프라이빗 ip 주소도 자동으로 선택할 수 있게 된다. 연결을 해주도록 하자.
cp [pem key를 내려받은 위치] ~/.ssh
cd ~/.ssh
chmod 600 ~/.ssh/[pem key 이름]
vim ~/.ssh/config
아래는 config file content
#[주석]
Host [service name]
HostName [ec2의 탄력적 ip 주소]
User ec2-user
IdentityFile ~/.ssh/[pem key name].pem
다 끝나면 :wq명령어 작성(->저장 & 종료)
chmod 700 ~/.ssh/config
이제 ssh [config에 등록한 서비스명] 명령어를 실행하면 ec2에 접속할 수 있다.
java 버전은 사용하고 있는 버전이랑 맞추었기 때문에 17로 다운로드하였다.
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
sudo rpm -ivh jdk-17_linux-x64_bin.rpm
sudo alternatives --config java
java -version
alternative 할때 17 버전으로!
.
.
.
sudo yum install 뭐시기가 가장 많이 나와있는데 필자 경험으론 안된다. 그래서 위와 같이 순차적으로 명령어를 입력해주면 완료.
sudo rm /etc/localtime
sudoln -s /usr/share/zoneinfo/Asia/Seoul
위 명령어는 타임존을 한국 시간으로 변경한 것이다.
아래 명령어는 hostname을 변경시켜준다.
sudo hostnamectl set-hostname [원하는이름].localdomain
sudo reboot ---> 재부팅 후 다시 접속
sudo vim /etc/hosts
127.0.0.1 [등록한HOSTNAME]
:wq
이 사진처럼 아래에 추가해주는 것이다.(필자의 hostname은 awsStudy이다.)
curl [hostname]
명령어를 실행했을 때 잘 등록했다면 (7) Failed ~~뭐시기가 뜰거다. 아직 80포트로 실행된 서비스가 없음을 의미하는 것이다.
19년도 책이니까 4년 정도 지난건데, 하나 진행할 때마다 문제가(특히 버전차이 문제가) 하나 이상 있는 것 같다. 심지어는 자료가 매우 부족한 것 같다. 22년도 말 글을 확인해도 책이랑 비슷한 해결방안을 내놓는데 통하지 않는 것이 대다수였다. 생각보다 복잡하고 다시 검색하려니 골치아파서 직접 기록하고 다시 사용할 생각에 글을 작성해보았다. 근데 다 끝내고 글을 쓰려니 기억이 가물가물. 항상 이게 문제다. 문제는 해결해야 글을 쓰던가 하는데 다 해결하면 기억이 안난다. 심지어는 docs 페이지를 따로 만들어두었으면 좀 저장을 해야하는데 정신이 없어서 몇개 누락시키고... 좀더 주의하자. 최근에 접한 문제들은 신규 버전이어서 레퍼런스가 부족하니 꼼꼼하게 작성하려고 노력해보자.