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 Kafka Basic

About JVM Warm up

About ZGC

Spring Boot Actuator readiness, liveness probes on k8s

About G1 GC

sneak peek jitpack

About idempotent

C 언어 구조체의 포인터 멤버 변수

Synology NAS에 MariaDB 10에 Mysql workbench로 원격접속하기

About Websocket minimize data size and data transfer cost on cloud