Github Actions 로 AWS ECS deployment
Github Actions 을 이용해서 spring boot 프로젝트를
Docker , ECR, ECS 를 이용해서 배포하는 과정을 블로깅 하려고 한다.
Github repository 랑 AWS 계정은 다 있다는 전제하에 진행 한다.
aws cli 를 사용해도 되는데 제일 쉽게 console 을 이용한 가내수공업을 해보려고 한다.
우선 ECS cluster 를 먼저 생성한다. 파란색 버튼 눌러!
클러스터 이름은 알아서 기입해주고,
VPC 는 체크해주면 알아서 생성 해준다.
혹은 체크하지 않고 AWS default VPC 를 사용해도 된다.
혹은 VPC 를 스스로 생성해서 사용해도 된다.
그리고 CloudWatch 컨테이너 인사이트 활성화는 꼭 체크해주자, CloudWatch 를 이용해서 로그를 볼 수 있어서 유용하다.
다음에 해주어야 할 것이! 바로 작업 정의 ! task-definition 생성이다.
시퍼런 버튼 눌러서 생성해 주면 된다.
컨테이너 정의에서 컨테이너 추가 버튼을 눌러서,
사전에 ECR 에 등록된 이미지를 세팅 해 준다.
작업 메모리 및 작업 CPU 도 알맞게 설정 한다.
컨테이너 이름은 알아서 기입해주고, 이미지는 ECR 이미지 URL 을 넣어준다.
그 다음은 처음에 생성한 클러스터에 들어가서 서비스를 생성 해 준다.
역시 fargate를 이용할 것이다.
배포는 롤링 업데이트로 설정한다.
블루 그린 배포는 추가적으로 설정해줘야 할 것이 있어서 넘어간다.
다음으로 넘어가면, vpc 설정 및 로드 밸런서 설정이다.
제일 중요한 부분인데, aws default vpc 를 사용해도 된다.
하지만 load balancer 의 경우 새롭게 설정 해줘야 한다.
이 부분은 aws에 기본 지식이 있다고 생각하고 생략하겠다.
이제 돌아와서 Github Actions 에 대해서 적어 보겠다.
github repository 에서 Actions 로 들어간다.
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
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
댓글
댓글 쓰기