이 글은 제가 SpringBoot Application 을 AWS의 EB 배포시 만났던 문제와 해결했던 방법입니다.
우선 IAM을 생성해 두어야합니다.
IAM은 아래의 블로그를 참고 부탁드립니다.
https://velog.io/@_gyullbb/Elastic-Beanstalk-%EB%B0%B0%ED%8F%AC
그 후 보안그룹을 미리 만들어 두어야합니다.
(보안그룹 때문에 삽질을 엄청 했습니다....ㅠ)
- 저희는 Java 웹 서버를 배포할 예정이니 웹 서버 환경으로 시작하시면 됩니다.
- 해당 화면 위에 있는 환경정보는 알아서 기입하시면 되고 밑의 설정은 사용하시려는 Java version에 맞춰서 기입하시면 됩니다. 저는 Java17 환경에서 환경설정을 하고 있어서 Corretto 17 를 설정했습니다.
이 밑의 애플리케이션 코드에서는 저희가 사전 작업을 실행해야합니다.
우선, 지금 만들어 놓으신 local 파일을 zip 으로 묶어서 사용하셔야합니다.
- 만들어 놓으신 프로젝트에 있는 build.gradle 안에 아래와 같이 설정 값을 추가해주세요. bootJar 는 build.gradle 상단에 생성해주세요.
- 00-makeFiles.config
bootJar {
enabled = true
archiveFileName = 'application.jar'
}
.....
tasks.register('zip', Zip) {
dependsOn bootJar
archiveFileName = 'application.zip'
from 'build/libs'
from(projectDir) {
include '.ebextensions/**'
include '.platform/**'
include 'Procfile'
}
destinationDirectory = file("${buildDir}")
}
- 그리고 아래와 같이 프로젝트 최 상단 폴더에 .ebextenions 폴더와 .platform 을 만드셔서 아래와 같이 파일을 생성해주시고
- nginx.conf
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 33282;
events {
use epoll;
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include conf.d/*.conf;
map $http_upgrade $connection_upgrade {
default "upgrade";
}
upstream springboot {
server 127.0.0.1:8080;
keepalive 1024;
}
server {
listen 80 default_server;
location / {
proxy_pass http://springboot;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /var/log/nginx/access.log main;
client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;
# Include the Elastic Beanstalk generated locations
# include conf.d/elasticbeanstalk/healthd.conf;
}
}
- Procfile
해당 파일은 프로젝트 최상단 폴더에 생성해주시고 아래와 같이 기입만 해주시면 됩니다. web: appstart
- 위와 같이 설정해주시고 제가 위에서 보여드렸던 zip으로 만드시면 됩니다. 아래와 같이 gradle 설정에 추가 됐을겁니다.
이렇게 진행하시면 build 폴더에 zip 파일이 생성 됐을겁니다.
이렇게 진행하신 zip 파일을 로컬파일에 등록하시면 됩니다.
- 그후 아래와 같이 서비스 액세스 구성을 진행하시면됩니다.
역할은 IAM 에서 생성하시면 되고 키페어 또한 생서하시면되고, EC2 인스턴스 프로파일은 따로 생성해주셔야 합니다.
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/getting-started-create-iam-instance-profile.html
위의 링크를 들어가셔서 확인하시면됩니다. - 이제 인스턴스설정에 들어와서 해당 화면으로 진행하시면됩니다. 데이터베이스 항목도 동일하게 a, c 클릭하시면 됩니다.
- 아래와 같이 보안 그룹을 미리 생성해 놓은 것을 선택해서 진행하시면됩니다.
보안그룹은 반드시 미리 생성해주셔야 합니다. 왜냐하면 여기서는 생성이 불가능합니다.
나머지 용량, 로드밸런서는 자유롭게 설정해주시면 됩니다. 간단하게 만드실거면 굳이 설정안해주셔도 됩니다.
- 롤링 업데이트 및 배포 에서는 배포 정책을 한 번에 모두로 선택해주세요. - AWS가 제공하는 정보입니다.
한 번에 모두(All at once) - 새 버전을 모든 인스턴스에 동시에 배포합니다. 배포가 수행되는 동안 환경에 있는 모든 인스턴스가 잠시 서비스 중지됩니다.
롤링(Rolling) - 새 버전을 배치로 배포합니다. 각 배치는 배포 단계 동안 서비스에서 제외되므로 배치에 있는 인스턴스의 수만큼 환경의 용량이 감소합니다.
추가 배치를 사용한 롤링(Rolling with additional batch) - 새 버전을 배치로 배포하지만, 먼저 새로운 배치의 인스턴스를 시작하여 배포 프로세스 중에 모든 용량이 유지되도록 합니다.
변경 불가능(Immutable) - 변경 불가능 업데이트를 수행하여 새 버전을 새로운 인스턴스 그룹에 배포합니다.
트래픽 분할(Traffic splitting) - 새 버전을 새 인스턴스 그룹에 배포하고 수신되는 클라이언트 트래픽을 일시적으로 기존 애플리케이션 버전과 새 애플리케이션 버전 간에 분할합니다.
본인의 서비스에 맞는 옵션을 선택해주세요.
이제 아래와 같이 환경변수를 설정해주세요.
위의 3가지 항목은 기본적으로 생성되는 것이고, 아래 두가지가 제가 설정한 설정값 입니다.
JAVA_HOME 은 자바 환경변수 설정이고
SPRING_PROFIELS_ACTIVE 는 제가 생성한 application.yml 설정 파일입니다.
위와 같이 설정을 마치셨다면 아마 성공하셨을 겁니다...ㅎ
- 성공화면
'devops' 카테고리의 다른 글
[Docker] 1. 도커란 무엇인가? (0) | 2023.09.21 |
---|---|
[Jenkins] Main branch만 감지하기 (0) | 2023.08.30 |