
EC2 배포해보기
AWS 기초 에서 VPC, EC2 를 생성하며 간단하게라도
AWS 의 네트워크 구조를 파악해보았다
그리고 AWS Parameter Store 에서 String 기반 파라미터 저장소 같은
개념으로 AWS의 서비스가 있다는 것도 파악했다
이제 EC2에 스프링 부트를 수동 배포해서 포어그라운드, 백그라운드로 실행해보자
프로젝트 준비
간단히 스프링부트 프로젝트에
Actuator 의존성을 통한 기본 url 로 헬스 체크만 하는 기능으로 준비했다
그리고 추가로 AWS Parameter Store 에서 변수를 가져올 수 있도록 준비했다
${변수명} 세팅을 Info로 가져오도록 했다
Jar 로 배포하여 EC2 내에서 JVM 을 통해 작동시킬 예정이다
Build
// 그래들을 통해 bootJar 를 하던
// gradlew 커맨드를 사용하던
./gradlew clean bootJar
// 프로젝트를 빌드하여 Jar 를 만들자EC2 내 Java 설치
dnf
패키지 관리자로 리눅스의 소프트웨어 설치/삭제 도구이다
// SSH 로 EC2 접속 후
sudo dnf install java-[version]-amazon-corretto -yIAM 역할 수정
IAM 제어를 통해 Parameter Store 의 값을 지정 가능
하므로 역할 수정이 필요하다
이제 체크 후 역할을 생성하고 EC2에서 IAM 역할을 지정해주면
Parameter Store 에서 변수를 가져올 수 있다
Jar 배포
SSH 를 통해 파일을 복사해 가져오려면 scp 명령어를 사용해야한다
이 때 키페어 파일을 사용하는데, 키페어의 파일 권한이 너무 오픈되어도
사용할 수 없어 보통 chmod 를 통해 읽기 권한만 준 상태로 사용한다 (400)
// 배포시
scp -i <키페어경로> <로컬파일> <사용자>@<EC2의 IP>:~/app.jar
// 가져오기
scp -i <키페어경로> <사용자>@{EC2-IP}:~/app.log ./기본 AMI 사용시 기본 사용자 이름
Amazon Linux
ec2-user
CentOS
centos 또는 ec2-user
Debian
admin
Fedora
fedora 또는 ec2-user
RHEL
ec2-user 또는 root
SUSE
ec2-user 또는 root
Ubuntu
ubuntu
Oracle
ec2-user
Bitnami
bitnami
이제 Jar 를 SSH 를 통해 배포했다면
java -jar app.jar 명령어를 실행하면 포어그라운드로 실행된다
추가로 만약 프로파일을 설정한 것을 사용한다면java -jar app.jar --spring.profiles.active=[프로파일명]
백엔드로 실행하는 방법은 nohup 키워드를 사용하면 된다
nohup java -jar app.jar --spring.profiles.active=[프로파일명]
만약 실행 기록을 남겨야한다면 > 키워드를 통해 리다이렉션 경로, 파일을 지정하고
2>&1 을 통해 표준에러를 출력으로 바꾸면 된다 (표준 출력 + 표준 에러 전부 기록)
그리고 마지막 & 키워드로 백그라운드에서 실행할 것을 명시해주자
nohup java -jar app.jar --spring.profiles.active=[프로파일명] > ~/[로그파일명].log 2>&1 &
Actuator 의 info 에 Parameter Store 변수를
가져오도록 세팅한 사항에 대해 무사히 잘 가져오고 있다
이런 수동 배포는 어지간한 일이 아닌 이상 사용할 일은 없을 것이다
그러므로 다음엔 CI/CD에 대해 포스트 해보려한다