해당 자료는 총 5개 파트로 나누어서 자료를 정리할 예정이다.
part 1. IAM user 권한 설정
part 2. ECR repo 세팅
part 3. EB 설정 후 샘플 코드 서버 세팅
part 4. Spring Boot 프로젝트 내부 설정
part 5. github action 세팅
Part 4. Spring Boot 프로젝트 내부 설정
part 3을 못 보셨다면 먼저 보시길 바란다.
https://dexlee.tistory.com/171
Intro.
EB 커스텀 설정, 도커 이미지 만들기, EB 환경에서 이미지 실행 json파일에 대해서 알아보겠다.
1. EB 커스텀 설정
1) .ebextensions
- eb 커스터마이징 설정
[1] .ebextensions/00-set-timezone.config
commands:
set_time_zone:
command: ln -f -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
[2] .ebextensions/alb-http-to-https-redirection-full.config
Resources:
AWSEBV2LoadBalancerListener:
Type: 'AWS::ElasticLoadBalancingV2::Listener'
Properties:
DefaultActions:
- Type: redirect
RedirectConfig:
Protocol: HTTPS
Port: '443'
Host: '#{host}'
Path: '/#{path}'
Query: '#{query}'
StatusCode: HTTP_301
LoadBalancerArn:
Ref: AWSEBV2LoadBalancer
Port: 80
Protocol: HTTP
AWSEBV2LoadBalancerListener443:
Type: 'AWS::ElasticLoadBalancingV2::Listener'
Properties:
Certificates:
- CertificateArn: https 인증서 arn 넣기
DefaultActions:
- Type: forward
TargetGroupArn:
Ref: AWSEBV2LoadBalancerTargetGroup
LoadBalancerArn:
Ref: AWSEBV2LoadBalancer
Port: 443
Protocol: HTTPS
80 포트로 들어와도 443 포트로 연결시켜주는 설정이다.
2) .platform
- nginx 등 eb 설정이 아닌 설정 파일을 보관하는 디렉토리
[1] .platform/nginx/nginx.conf
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 33193;
events {
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";
}
server {
listen 80 default_server;
access_log /var/log/nginx/access.log main;
client_header_timeout 600;
client_body_timeout 600;
keepalive_timeout 600;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
gzip off;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
include conf.d/elasticbeanstalk/*.conf;
}
client_max_body_size 1024M;
}
2. 도커 이미지 만들기
1) Dockerfile
# EC2 인스턴스 타입이 ARM이기 때문에 arm64v8/amazoncorretto 사용
FROM arm64v8/amazoncorretto:8u332-al2
# linux update timezone
RUN yum install -y tzdata curl && yum install -y mysql
# timezone settings
RUN cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime
ARG JAR_FILE=/build/libs/*.jar
COPY ${JAR_FILE} application.jar
EXPOSE 5000
ENTRYPOINT ["java","-jar", "/application.jar"]
2) Dokerrun.aws.json
- EB에서 ECR에 pull 요청을 해 이미지를 받아오는 실행 파일
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "777750262439.dkr.ecr.ap-northeast-2.amazonaws.com/home-main:latest",
"Update": "true"
},
"Ports": [
{
"ContainerPort": 5000,
"HostPort": 5000
}
]
}
AWSEBDockerrunVersion 는 Dockerrun.aws.json 파일의 버전을 나타낸다.
docker compose를 사용하지 않는 다면 v1을 사용한다.
references
1) EB에 대한 모든 것.(Dockerrun.aws.json 에 대한 설명도 포함)
https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/awseb-dg.pdf
2) Dockerrun.aws.json
https://dev.to/aws-builders/aws-elastic-beanstalk-ft-docker-for-deploying-simple-web-app-5co7
3) docker 최적화
4) cmd vs entrypoint in Dockerfile
https://bluese05.tistory.com/77
5) base image for arm
https://hub.docker.com/r/arm64v8/amazoncorretto/
6) .ebextensions
https://stackoverflow.com/questions/25399685/amazon-elastic-beanstalk-change-timezone
https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/awseb-dg.pdf#ebextensions
7) eb http to https
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-httpredirect.html
8) .platform, nginx
https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/java-se-nginx.html
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html