Elastic Beanstalk + Elastic Cloud + docker 설정
Last updated
Last updated
Dockerfile 의 이미지를 ECR 에 올리고 Dockerrun.aws.json 을 Beanstalk 에 배포하면 ECR의 이미지를 가져와 컨테이너로 실행하는 플로우
ECR
도커 허브의 레파지토리와 같은 기능을 함
IAM인증을 통해 간편하게 이미지를 push/pull할 권한관리를 해줌
이후에 젠킨스를 적용할때도 잘 쓰임
beanstalk 환경 및 애플리케이션 생성
플랫폼을 도커로 설정
ECR 에서 레파지토리 생성 & IAM권한 주기
Amazon Elastic Container Registry (ECS) 에 리포지토리 생성, 이름만 설정해주면됨
그후에 “푸시명령보기”를 보면 cli로 이미지를 푸시할 수 있는 방법이 나와있음
AWS CLI 설정하고 IAM권한주고 이미지 올려주면됨
Aws cli 다운 https://devlos.tistory.com/37 (MAC기준)
IAM 권한
사용자 권한 추가
사용자에 ‘권한추가’로 들어가서 ‘기존정책직접연결’ 누르고 AmazonEC2ContainerRegistryFullAccess 연결해주면됨
Beanstalk 에 연결된 IAM 인스턴스 프로파일: aws-elasticbeanstalk-ec2-role 에도 권한추가해줘야함
역할의 aws-elasticbeanstalk-ec2-role 에 AmazonEC2ContainerRegistryReadOnly로 권한 연결해주면됨
https://devlog-wjdrbs96.tistory.com/324
배포
Dockerrun.aws.json 파일 작성후 이파일을 배포
다중 컨테이너로 구성하는 이유
spring boot 와 filebeat는 각각 컨테이너로 관리해주고 volume으로 로그를 관리 해줘야 jar를 배포한 컨테이너가 죽어도 로그가 사라지지 않고 filebeat도 따로 컨테이너로 돌아가야 영향받지 않음
https://cloudinfrastructureservices.co.uk/dockerfile-vs-docker-compose-whats-the-difference/
volume 컨테이너로 로그관리
volume 컨테이너 생성하여 호스트os에도 저장, jar 와 filebeat 컨테이너 사이 로그폴더 공유가능함https://joont92.github.io/docker/volume-container-추가하기/
beanstalk 환경 및 애플리케이션 생성 (공통)
beanstalk 세팅 변경
프록시 서버 없음으로 설정, 환경속성 설정
보안 키페어 설정
ECR 에서 레파지토리 생성 & IAM권한 주기 (공통)
docker-compose.yml 파일 생성, 이미지 업로드 및 배포
파일
Dockerfile
이미지 생성후 ECR에 업로드
filebeat.yml
paths → filebeat컨테이너 내의 수집할 파일경로
Dockerfile
jar파일 빌드 및 이미지 생성후 ECR에 업로드
docker-compose.yml
<aside> 💡 volumes의 경로가 중요함, 인스턴스 유형이 변경됨에 따라 app의 logs파일 경로가 /logs or /usr/local/logs 로 달랐음. 로그수집 안되면 eb ssh 로 직접 접속해서 volume 경로 확인하기
</aside>
beanstalk 환경 및 애플리케이션 생성 (공통)
beanstalk 세팅 변경
프록시 서버 없음으로 설정
인스턴스 유형 t4g.medium으로 설정 (너무 낮으면 logstash 실행안됨)
ECR 에서 레파지토리 생성 (공통)
logstash 파이프라인 생성
elatic cloud의 키바나에서 pipeline1으로 logstash 파이프라인을 생성
docker-compose.yml 파일 생성, 이미지 업로드 및 배포
파일
logstash.yml
elatic cloud의 키바나에서 pipeline1으로 logstash 파이프라인을 생성하고 연결
Dockerfile
docker-compose.yml