지금까지 만들었던 AWS 환경에서 EC2 인스턴스와 RDS 데이터베이스를 효율적으로 관리하고, Spring Boot 애플리케이션을 실행 및 테스트하는 자동화된 Shell 스크립트들을 정리했습니다. AWS 콘솔 화면에서 수행해아 했던 복잡한 반복 작업을 Shell 스크립트로 자동화, 단순화해 봤습니다. 이 포스트에서는 전체 프로세스를 단계별로 설명하고, 각 스크립트의 기능을 소개합니다.
1. 자동화 개요
이번 프로젝트에서는 AWS CLI를 활용하여 다음 작업을 자동화했습니다.
- EC2 및 RDS 인스턴스 조회 ( lsec2.sh, lsrds.sh )
- EC2 인스턴스 및 RDS 데이터베이스 기동 ( start-ec2-apserver.sh, start-rds-fromsnapshot.sh )
- RDS 스냅샷을 활용한 데이터베이스 복원 ( start-rds-fromsnapshot.sh )
- Spring Boot 애플리케이션 실행 ( start-ec2-apserver.sh )
- curl 명령어를 이용한 API 테스트 ( aws-test-curl.sh )
- 테스트 완료 후 RDS 및 EC2 인스턴스 종료 ( stop-ec2-apserver.sh, stop-rds-dbserver.sh )
- EC2와 RDS 연결을 위한 보안 그룹 설정 ( set-sq-ingresse-ec2rds.sh )
2. Shell 스크립트 실행 순서
아래의 순서대로 Shell 스크립트를 실행하면, EC2 및 RDS 인스턴스를 가동하여 Spring Boot 애플리케이션을 실행하고 테스트한 후, 모든 자원을 정리할 수 있습니다.
1) EC2 및 RDS 인스턴스 목록 조회
먼저, 현재 AWS에 존재하는 EC2 및 RDS 인스턴스를 조회합니다. 첨부 파일 lsec2.sh와 lsrds.sh 쉘 명령을 사용하여 AWS 리전에서 실행 중인 EC2 및 RDS 인스턴스의 목록을 조회할 수 있습니다.
- lsec2.sh는 현재 실행 중인 EC2 인스턴스의 상태, 퍼블릭 IP 등을 조회합니다
- lsrds.sh는 실행 중인 RDS 데이터베이스 정보를 확인합니다
# EC2 목록 조회
bash lsec2.sh
![]() |
# RDS 목록 조회
bash lsrds.sh
![]() |
2) RDS 스냅샷을 사용한 데이터베이스 복원
만약 데이터베이스가 중단(삭제)된 경우, 기존 RDS 스냅샷을 이용하여 복원합니다.
스크립트 분석 (start-rds-fromsnapshot.sh):
- Database 복원에 사용 가능할 RDS 스냅샷 목록을 출력됨
- 수동으로 만든 Database 스냅샷 필요, 없을 경우 만들고 다시 시도하세요. - 선택한 스냅샷을 기반으로 새 RDS 인스턴스를 복원하고 복원된 데이터베이스 상태를 출력함.
- 복원이 시작되면 database생성까지 시간이 몇분 이상 소요됩니다.
- 복원하려고 하는 DB 인스턴스가 이미 있는 실행 중인 경우 DB 정보가 출력됩니다. - EC2 보안 그룹에서 mySql 서비스 포트 접근이 가능하도록 RDS 보안 그룹 설정
- 이때 database에 접속 권한이 필요한 EC2 instnace ID를 입력해야 하는데, lsec2.sh 명령을 사용하여 미리 ID를 복사해두었다 사용하면 좋습니다. 참고로 이 부분은 set-sq-ingresse-ec2rds.sh 쉘 스크립트를 사용해서도 처리 가능합니다.
3) EC2 인스턴스 기동 및 Spring Boot 실행
EC2 인스턴스를 기동하고, Spring Boot 애플리케이션을 실행합니다.
스크립트 분석 (start-ec2-apserver.sh):
- 현재 region에 EC2 Instance 목록이 출력되면, Spring boot를 기동할 EC2 인스턴스에 이름을 입력함
- EC2 인스턴스가 중지되어 있으면 인스턴스를 기동함.
- EC2 인스턴스의 기동 상태가 출려되면 인스턴스 접속를 위한 Public IP주소를 확인함
- SSH로 인스턴스에 접속하여 Spring Boot 애플리케이션 실행함.
- 이때 ssh 접속을 위한 .pem 파일이 필요하며, Spring boot appliction 실행 환경은 EC2 인스턴스에 이미 구성되어 있어야 합니다.
- 이때 실행 중인 Spring boot 프로세스가 있는지 확인하고, 없으면 DB접속정보가 있는 appdb.properties 파일을 config파일로 하여 프로세스를 기동 합니다.
- 기동시 nohup으로 백그라운드로 기동하며, 프로세스의 표준출력, 에러출력을 모두 nohup.out 파일에 출력 하도록 합니다.
- Spring boot 기동이 완료되면 nohup.out 파일을 tail하여 프로세스 기동상태 로그를 단말에 출력, 모니터링 합니다.
4) Spring Boot REST API 테스트
Spring Boot 애플리케이션이 정상적으로 동작하는지 확인하기 위해 API 호출 테스트를 실행합니다.
응용시에는 aws-test-curl.sh의 호출 내용을 각자의 Application에 맞게 테스트 시라니오를 변경하여 테스트 하면 됨.
스크립트 분석 (aws-test-curl.sh):
- 서버 IP 입력 및 REST API 테스트aws-test-curl.
- POST, PUT, DELETE, GET 요청을 실행하여 데이터베이스 연동을 검증.
5) EC2와 RDS 간 연결 포트 개방
EC2 Spring Boot에서 RDS mySql 데이버베이스로 접근할 수 있도록 보안 그룹을 설정합니다.
스크립트 분석 (set-sq-ingresse-ec2rds.sh):
- EC2 인스턴스의 보안 그룹 ID 확인.
- RDS 인스턴스의 보안 그룹 ID 조회.
- RDS 보안 그룹에 EC2 보안 그룹에서 TCP 3306 포트 접근 허용
6) 테스트 완료 후 EC2 및 RDS 종료
테스트가 끝난 후 EC2 및 RDS를 종료하여 불필요한 비용 발생을 방지합니다.
스크립트 분석(stop-ec2-apserver.sh, stop-rds-dbserver.sh):
- stop-ec2-apserver.sh: EC2 인스턴스를 중지하고 상태 확인
- stop-rds-dbserver.sh: RDS 데이터베이스를 삭제하여 비용 발생 방지
3. 상세 코드 분석
1) start-ec2-apserver.sh (EC2 기동 & Spring Boot 실행)
- 중지된 EC2 인스턴스를 기동.
- 퍼블릭 IP를 가져와 SSH 접속 후 Spring Boot 실행.
2) start-rds-fromsnapshot.sh (RDS 복원)
- 스냅샷을 기반으로 새로운 RDS 인스턴스 생성.
- 보안 그룹을 설정하여 EC2에서 접근 가능하도록 조정.
3) aws-test-curl.sh (Spring Boot API 테스트)
- REST API를 호출하여 DB 연동 상태 확인.
4) stop-ec2-apserver.sh (EC2 종료)
- EC2 인스턴스를 중지하여 비용 절감.
5) stop-rds-dbserver.sh (RDS 삭제)
- 사용이 끝난 RDS 데이터베이스 삭제.
4. 결론
이 블로그에서는 AWS CLI와 Shell 스크립트를 활용하여 EC2 및 RDS 자동화 작업을 수행하는 방법을 설명했습니다. 이를 통해 손쉽게 서버 및 데이터베이스를 관리하고, 비용 절감 효과를 얻을 수 있습니다.
✨ 핵심 정리
✔ AWS CLI로 EC2 및 RDS 상태 조회
✔ EC2 기동 및 Spring Boot 실행 자동화
✔ RDS 스냅샷을 활용한 DB 복원
✔ 보안 그룹 설정으로 EC2-RDS 연결 허용
✔ Spring Boot REST API 테스트 자동화
✔ 테스트 종료 후 EC2 및 RDS 정리로 비용 절감
추천 추가 학습:
- AWS CLI 공식 문서: https://docs.aws.amazon.com/cli/latest/userguide/
- Bash 스크립트 기본 문법: https://www.gnu.org/software/bash/manual/bash.html
이제 이 스크립트를 활용하여 AWS에서 자동화된 서버 운영을 시작해보세요!