Github Actions 로 AWS ECS deployment

Github Actions 을 이용해서 spring boot 프로젝트를
Docker , ECR, ECS 를 이용해서 배포하는 과정을 블로깅 하려고 한다.

Github repository 랑 AWS 계정은 다 있다는 전제하에 진행 한다.

aws cli 를 사용해도 되는데 제일 쉽게 console 을 이용한 가내수공업을 해보려고 한다.
우선 ECS cluster 를 먼저 생성한다. 파란색 버튼 눌러!


깜빡하고 언급 안했는데, fargate 를 사용할 것이다.
fargate 에 대한 설명은 aws 들어가서 참고 하세요.

클러스터 이름은 알아서 기입해주고,
VPC 는 체크해주면 알아서 생성 해준다.
혹은 체크하지 않고 AWS default VPC 를 사용해도 된다.
혹은 VPC 를 스스로 생성해서 사용해도 된다.
그리고 CloudWatch 컨테이너 인사이트 활성화는 꼭 체크해주자, CloudWatch 를 이용해서 로그를 볼 수 있어서 유용하다.




다음에 해주어야 할 것이! 바로 작업 정의 ! task-definition 생성이다.
시퍼런 버튼 눌러서 생성해 주면 된다.

역시 또한 fargate 를 사용할 것이다.

작업 정의 이름은 알아서 기입해주고,
작업 역할과 작업 실행 IAM 역할이 가장 중요하다.
AmazonECSTaskExecutionRolePolicy 와 관련된 내용인데, 이 정도만 언급하고 생략하겠다.

컨테이너 정의에서 컨테이너 추가 버튼을 눌러서,
사전에 ECR 에 등록된 이미지를 세팅 해 준다.


작업 메모리 및 작업 CPU 도 알맞게 설정 한다.
컨테이너 이름은 알아서 기입해주고, 이미지는 ECR 이미지 URL 을 넣어준다.

그 다음은 처음에 생성한 클러스터에 들어가서 서비스를 생성 해 준다.
역시 fargate를 이용할 것이다.
배포는 롤링 업데이트로 설정한다.
블루 그린 배포는 추가적으로 설정해줘야 할 것이 있어서 넘어간다.



다음으로 넘어가면, vpc 설정 및 로드 밸런서 설정이다.
제일 중요한 부분인데, aws default vpc 를 사용해도 된다.
하지만 load balancer 의 경우 새롭게 설정 해줘야 한다.
이 부분은 aws에 기본 지식이 있다고 생각하고 생략하겠다.



이제 돌아와서 Github Actions 에 대해서 적어 보겠다.
github repository 에서 Actions 로 들어간다.

지원 되는 것들이 많은데, 아래와 같이 ECS 를 선택해 준다.
그러면 Github Actions 의 문법에 맞게 템플릿이 생성되고 환경변수만 세팅 해주면 된다.
환경변수는 Settings > Secrets 을 이용하면 쉽게 적용이 가능하다.



github action을 사용하기 위해서는 프로젝트 폴더에 .github/workflows/*.yml 이 있어야 된다.

master branch 로 push 혹은 pull_request 가 merge 될 때에 trigger 된다.
지정한 region 에 사전에 세팅한 access-key 와 secret-access-key 를 이용하여 aws 에 로그인 한다.
그리고 ECR repository 에 Dockerfile 을 이용해서 빌드한 이미지를 푸시 한다.
그리고 새롭게 빌드한 이미지를 작업 정의에 새롭게 렌더링 하여 ECS 에 배포한다.
필요한 환경에 대한 정보는 appspec.yaml 을 이용한다.


Docker 이미지를 빌드 하고 푸시 할 때
구글에서 만든 jib 을 이용하면 편하긴 한데, Github actions 와 시너지가 잘 맞는지는 모르겠다.
일반 DockerHub Repository 에 푸시할 때는 정말 간편하게 사용할 수 있었다.
https://github.com/GoogleContainerTools/jib

쓸데 없는 소리는 그만하고, Dockerfile 작성법도 생략하겠다.
https://docs.docker.com/engine/reference/builder/


이제 ECS 에서 제일 중요한 작업 정의 json 이다.
해당 json 에서 fargate 서비스가 어떤 작업을 실행 할 것인지에 대한 명세이다.
아래 document 를 참고.
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html

그리고 또 필요한 yaml 파일이 appspec.yaml 이다.
아래 document 를 참고.
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/reference-appspec-file-example.html




Github Actions 성공 시

참고 github repository : https://github.com/ndgndg91/inflearn_jpa

댓글

이 블로그의 인기 게시물

About JVM Warm up

About idempotent

About Kafka Basic

About ZGC

sneak peek jitpack

Spring Boot Actuator readiness, liveness probes on k8s

About Websocket minimize data size and data transfer cost on cloud

About G1 GC

대학생 코딩 과제 대행 java, python, oracle 네 번째