AWS EC2 인스턴스에 도커로 CI/CD 배포를 하려던 중 SSH 접속에 문제가 발생하게 되었습니다.
그 이유는 AWS EC2 보안그룹 인바운드에 SSH 포트 IP 제한을 하였기 때문에 Github-Hosted Runner의 IP가 허용되지 않아 접속이 안되는 문제였습니다.
그래서 여러가지 방법을 알아보다가 2가지 방법을 발견하였습니다.
1번 방법으로 하기에는 Git Action이 작동될때마다 IP들이 추가되므로 보안적으로 찜찜하기 때문에 2번 방법으로 하기로 하였습니다.
Github Actions 워크플로에서 작업을 실행하는 데 사용되는 환경을 사용자 지정할 수 있는 시스템
(From. Github Docs)
즉 우리의 개인 PC, 노트북 등에 환경에서 Git Action을 동작하게 할 수 있는 것입니다.
또한 Agent가 Github쪽에 접근하는 방식이라 개인 환경 IP를 노출할 필요도 없죠!!
Repository -> Settings -> Actions -> Runners 에 들어가시면
저렇게 Self-Hosted Runner를 생성할 수 있습니다.
생성 버튼을 누르시게 되면 Runner의 OS 종류를 선택할 수 있습니다. 저 같은 경우는 개인 맥북을 사용하기 때문에 macOS로 선택해 구축을 하였습니다.
명령어들이 쭉 나열되어 있는데 저 명령어들을 로컬 머신에 순차적으로 입력하시면 됩니다.
(저 같은 경우는 개인 맥북)
./config.sh
파일을 실행하게 되면 Runner 이름, Runner Label, Git Action이 실행하면서 소스코드가 체크아웃 될 경로를 설정하게 됩니다.
(제가 이미 구축하고 작성하는 글이라 이 부분은 사진이 없어서 죄송합니다 ㅠㅠ)
모자이크 된 값은 Repository의 토큰값이라 가려놓았습니다.
아 참고로 ./run.sh
파일을 실행 해야지만 Git Action이 로컬 머신에서 작동하기 때문에
Git Action을 하기 전에 ./run.sh
가 잘 작동하고 있는지 확인해주세요!!
./run.sh
가 잘 작동하고 있는지 확인하는 법은 간단합니다.
./run.sh
실행 전에는 Runners에 확인을 하게 되면 Status가 Offine으로 되어있습니다.
로컬 머신 터미널에는 이런식으로 Github와 연결이 되었다고 표시가 됩니다.
Runners 에는 Status가 Idle로 변경된 것을 확인할 수가 있습니다.
이 상태가 되어야지 Git Action 워크플로 실행 시 설정된 Self-Hosted Runner로 동작을 수행합니다.
그러면 한번 프로젝트를 빌드하고 AWS EC2 배포하는 Git Action을 동작시켜볼까요??
name: Backend Dev Deploy to EC2
on:
push:
branches: [ runner-test-release/ec2 ]
jobs:
deploy:
runs-on: self-hosted # self-hosted 로 변경 (macOS라고 작성해도 상관없습니다.)
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
# 대충 프로젝트 빌드하는 작업들
# ...
# ...
# Github-Hosted-Runner 일때는 appleboy/ssh-action@master 사용했었으나
# appleboy/ssh-action@master 라이브러리가 Linux만 지원해서....
# 생으로 ssh 명령어 작성을 하여 수행하였습니다.
- name: EC2 Docker Deploy and Run
run: |
ssh -t -i {SSH KEY 파일입니다.} ec2-user@${{ secrets.EC2_HOST }} '
docker ps -aq | xargs docker stop | xargs docker rm &&
docker image prune -a -f &&
docker pull {도커 저장소}:"'$GITHUB_SHA'" &&
docker run -d -p 443:443 --name panda-instance {도커 저장소}:"'$GITHUB_SHA'"
'
성공적으로 수행을 하였고 실제로 프로젝트도 잘 배포가 되어 올라간 것을 확인하였습니다.
그리고 분명 IP 제한 문제로 Self-Hosted Runner를 구축을 한 것인데 Git Action을 수행해 보니까 문제 해결 이외에 한가지 더 장점이 있었습니다.
바로 Git Action 워크플로 수행시간이 매우 단축되었습니다.
기존에는 Git Action 수행시간이 5 ~ 6분 정도 소요가 되었는데 Self-Hosted Runner로 구축 이후에는 평균 2 ~ 3분 정도 소요되었습니다. 체감상 엄청 빨라졌어요 진짜
이것이 맥북??
Self-Hosted Runner 구축으로 얻은 이득
단점 아닌 단점은 IP제한을 저희 집 와이파이 IP로 해서 어디 이동하거나 하면 SSH 문제가 또 발생한다는 건데 이건 단점이라긴 보다 개인 맥북을 Runner로 등록한 이상 당연한거라서
이것을 해결하고 싶으면 개인 맥북이 아닌 Self-Hosted Runner를 위한 서버를 구축해서 거기서 Runner를 실행하면 될 것같습니다.
(이 방식이 훨씬 좋을 것 같습니다. 돌릴수 있는 서버만 여유가 있다면.....)
그냥 단순하게 Git Action 돌리다가 오류가 발생하여서 해결하려고 알아보다가 적용하게 되었는데
생각외로 장점들이 많은 것 같아서 많이 사용하게 될 것 같습니다.
나중에 CI/CD를 위한 빌드서버를 구축하면 참 좋은 것 같습니다.
앞으로는 Github-Hosted Runner 사용할 일은 거의 없을듯 ㅋㅋㅋㅋㅋ