[AWS] EC2와 Github Actions 연동

원준·2023년 6월 11일

AWS

목록 보기
6/10

1. 하는 이유

  • 로컬 환경에서 작업한 프로젝트 파일을 Github에 올린 후 EC2의 서버에서 다운로드를 다시 받는데 전부 수동으로 하기에는 일이 너무 많다.
  • 이에 맞게 Github에서는 Actions라는 항목이 존재한다.

2. Actions 란?

  • 우선 내가 이해한데로 적어주자면, 내가 할 일을 Github에서 자동으로 해주는 역할이다.
  • 쉽게 생각하면 Github의 인공지능의 역할이라고 생각하면 편하다.

3. EC2와 Actions 연동

  • 연동하기 위해서는 필요한 것이 몇개 있다.

1) .pem 파일

  • 로컬 환경(Windows)환경에서 EC2로 접속하려할때 ppk 파일이 필요한 것은 알고있다. Github의 인공지능이 EC2에 접속할려 할때에도 해당 파일은 동일하게 필요하다.
  • 단, Actions에서 사용하는 OS는 Windows가 아닌 Ubuntu(Linux)이기 때문에 ppk 파일을 pem 파일로 변환한다.

2) IP와 User

  • Putty로 접속할때 IP가 필요한데 Github에서도 동일하게 IP가 필요하니 챙겨놓자.
  • 또한 Putty로 접속하고 난 후 유저를 접속할때에도 필요하다.
  • 쉽게 생각하면 내가한 모든 과정들에 대해 인공지능 또한 필요하다는 것을 알아 두자.

3) 설정

  • 이제 해당 파일 및 정보들을 가지고 변수를 설정해줘야한다.
  • 변수 설정을 하는 이유는 Actions로 실행하는 것은 Public으로 공개되기 때문에 보안상 만드는 것이 좋다. 아니 필수다.


    HOST : EC2의 IP
    SSH_PRIVATE_KEY : ppk를 변환한 pem파일 안의 내용 전체
    USER : 접속할 유저 (기본적으로 ec2-user)

4) Actions 설정

  • 기본적인 필수 설정은 마쳤으니 자동으로 만들게 하자.

    'set up a workflow yourself' 을 누르면 만들기로 넘어간다.

  • 이제 코드를 작성하자
name: deploy

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches:
      - main


jobs:
  SSH:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: ssh to ec2
        uses: appleboy/ssh-action@master
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }} # 내가 변수로 저장한 pem key
          host: ${{ secrets.HOST }} # 내가 변수로 저장한 ip
          username: ${{ secrets.USER }} # 내가 변수로 저장한 User
          script: |
            cd Github/Data_Project_2 # 내가 Clone한 폴더 안으로 들어간다.
            git pull # 자동으로 pull해서 주기적 업데이트

  # 깃허브 레파지토리가 프라이빗으로 만들어져 있을때. 
  # git pull https://${{ secrets.GIT_USER }}:${{ secrets.GIT_PASSWORD }}@github.com/blockenters/streamlit_kmeans.git

5) 확인

  • 코드를 정상적으로 작성했다면, 한번 확인할 수 있다.

  • 틀리게 작성했다면 작동이 정상적으로 안될테니 확인하는 것이 좋다.

    성공 작성

  • 해당 표시가 안되어있다면, 코드를 다시 확인하거나 변수에 저장했던 값들을 다시 적어보자.

6) yml 설명 주석 추가

# Controls when the workflow will run
on: # 이럴때 실행 해달라
  # Triggers the workflow on push or pull request events but only for the main branch
  push: # push를 할때 
    branches: #어떤것이?
      - main #main이
   # main의 정보에 push될때마다 실행을 해달라

# 실행
jobs:
  SSH:
    runs-on: ubuntu-latest # 우분투 최신버전으로 컴퓨터를 준비하라 ()

    steps:
      - uses: actions/checkout@v3 # 레파지토리 참고하라
      - name: ssh to ec2 # ec2에 접속하라.
        uses: appleboy/ssh-action@master # 접속 제공 코드
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }} # 키페어 필요
          host: ${{ secrets.HOST }} # ip
          username: ${{ secrets.USER }} # 해당 유저 접속 
          script: | # 실행 할 코드
            cd Github/car_price_dash_board/  #경로 이동 (실제 존재하는 경로로 이동해야한다.)
            git pull # git pull
  
  # 깃허브 레파지토리가 프라이빗으로 만들어져 있을때. 
  # git pull https://${{ secrets.GIT_USER }}:${{ secrets.GIT_PASSWORD }}@github.com/blockenters/streamlit_kmeans.git
===============================================
    => 이후 로컬 작업 서버에서 git을 최신화로 다운받는다. (작업 서버 git pull)
profile
공부해보자

0개의 댓글