AWS-CLI & Shell scrpit

8.4.AWS CLI와 Shell 스크립트를 활용한 EC2 & RDS 실행/종료 자동화 및 Spring Boot 서비스 테스트

backend 따라쟁이 2025. 2. 12. 22:58

지금까지 만들었던 AWS 환경에서 EC2 인스턴스와 RDS 데이터베이스를 효율적으로 관리하고, Spring Boot 애플리케이션을 실행 및 테스트하는 자동화된 Shell 스크립트들을 정리했습니다. AWS 콘솔 화면에서 수행해아 했던 복잡한 반복 작업을 Shell 스크립트로 자동화, 단순화해 봤습니다. 이 포스트에서는 전체 프로세스를 단계별로 설명하고, 각 스크립트의 기능을 소개합니다.

 

lsec2.sh
0.00MB
lsrds.sh
0.00MB
start-ec2-apserver.sh
0.00MB
start-rds-fromsnapshot.sh
0.00MB
set-sq-ingresse-ec2rds.sh
0.00MB
aws-test-curl.sh
0.00MB
stop-ec2-apserver.sh
0.00MB
stop-rds-dbserver.sh
0.00MB

1. 자동화 개요

이번 프로젝트에서는 AWS CLI를 활용하여 다음 작업을 자동화했습니다.

  1. EC2 및 RDS 인스턴스 조회 ( lsec2.sh, lsrds.sh )
  2. EC2 인스턴스 및 RDS 데이터베이스 기동 ( start-ec2-apserver.sh, start-rds-fromsnapshot.sh )
  3. RDS 스냅샷을 활용한 데이터베이스 복원 ( start-rds-fromsnapshot.sh )
  4. Spring Boot 애플리케이션 실행 ( start-ec2-apserver.sh )
  5. curl 명령어를 이용한 API 테스트 ( aws-test-curl.sh )
  6. 테스트 완료 후 RDS 및 EC2 인스턴스 종료 ( stop-ec2-apserver.sh, stop-rds-dbserver.sh )
  7. 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 쉘 스크립트를 사용해서도 처리 가능합니다.

(그림1) 출력된 RDS 스냅샷 목록에서 복원할 DB instance 이름을 복사해 입력.
(그림) 선택한 스냅샷을 기반으로 새 RDS 인스턴스를 복원하고 복원된 데이터베이스 상태가 출력됨(참고: 문자 q를 입력하면 조회화면 종료 다음 스텝으로 이동)

 

(그림3) Database에 접속 권한이 필요한 EC2 instnace ID를 입력
(그림2) EC2 인스턴스에서 mySql 서비스 포트 접근이 가능하도록 RDS 보안 그룹 설정, 완료되면 설정 정보가 출력됨

 

 

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하여 프로세스 기동상태 로그를 단말에 출력, 모니터링 합니다.

(그림1)EC2 Instance 목록이 출력되면, Spring boot를 기동할 EC2 인스턴스에 이름을 입력함

 

(그림2) EC2 인스턴스를 재기동하고, 기동된 인스턴스의 Public IP를 얻어옴.

 

(그림3) SSH로 인스턴스에 접속하여 Spring Boot 애플리케이션 실행함.

 

(그림4) 프로세스 기동 상태를 확인하고, 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 요청을 실행하여 데이터베이스 연동을 검증.

(그림) 쉘 스크립트의 테스트 시나리오로 EC2 인스턴스 Spring boot 서비스 로출

 

5) EC2와 RDS 간 연결 포트 개방

EC2 Spring Boot에서 RDS mySql 데이버베이스로 접근할 수 있도록 보안 그룹을 설정합니다.

 

스크립트 분석 (set-sq-ingresse-ec2rds.sh):

  • EC2 인스턴스의 보안 그룹 ID 확인.
  • RDS 인스턴스의 보안 그룹 ID 조회.
  • RDS 보안 그룹에 EC2 보안 그룹에서 TCP 3306 포트 접근 허용​ 

(그림1) EC2 인스턴스의 보안 그룹ID를 입력
(그림2) 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 데이터베이스를 삭제하여 비용 발생 방지​ 

(그림1) stop-ec2-apserver.sh: EC2 인스턴스를 중지하고 상태 확인​

 

(그림2) stop-rds-dbserver.sh: 삭제할 RDS 데이터베이스 DB instance Identifier 입력.

 

(그림3) RDS Database 삭제 명령이 실행된 후 몇분이상 경과되어야 deleting 상태에서 완전 상태로 넘어감.

 

3. 상세 코드 분석

1) start-ec2-apserver.sh (EC2 기동 & Spring Boot 실행)

 
aws ec2 start-instances --instance-ids $INSTANCE_ID
  • 중지된 EC2 인스턴스를 기동.
  • 퍼블릭 IP를 가져와 SSH 접속 후 Spring Boot 실행.

2) start-rds-fromsnapshot.sh (RDS 복원)

aws rds restore-db-instance-from-db-snapshot \
              --db-instance-identifier $RDS_INSTANCE \
              --db-snapshot-identifier $RDS_SNAPSHOT \
              --db-instance-class $TYPE \
              --engine $ENGINE
  • 스냅샷을 기반으로 새로운 RDS 인스턴스 생성.
  • 보안 그룹을 설정하여 EC2에서 접근 가능하도록 조정.

3) aws-test-curl.sh (Spring Boot API 테스트)

curl -X POST -H "Content-Type: application/json" -d "{ \"value\" : \"$value\" }" http://$ipaddr:8080/api/data
  • REST API를 호출하여 DB 연동 상태 확인.

4) stop-ec2-apserver.sh (EC2 종료)

aws ec2 stop-instances --instance-ids $EC2_INST
  • EC2 인스턴스를 중지하여 비용 절감.

5) stop-rds-dbserver.sh (RDS 삭제)

aws rds delete-db-instance --db-instance-identifier $RDS_INST --skip-final-snapshot
  • 사용이 끝난 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에서 자동화된 서버 운영을 시작해보세요!