Github Action을 이용해 AWS Lightsail CI/CD 파이프라인 구축하기 1편

JJ·2023년 3월 3일
4

이번에야말로

목록 보기
3/4
post-thumbnail

서론

AWS Lightsail 인스턴스에 서버를 띄울 일이 있었는데 CI/CD를 적용해보기로 했다. 하지만 EC2에 관련된 내용이 주로 있었고 Lightsail에 관련된 내용은 거의 없어서 이번 기회에 잘 정리 해놓으려고 한다.

Lightsail을 선택한 이유

대부분 서버를 EC2로 띄우던데 EC2는 복잡하고 다양한 옵션을 사용하기 위해 쓴다고 했다. Lightsail을 사용한 이유는 복잡성을 낮추고 저렴한 가격에 이용할 수 있어서 사용했고 그렇게 큰 서비스를 운영하지 않아서 (이후에 서버가 크면 EC2로 마이그레이션 하기도 쉽다) Lightsail을 선택했다. Lightsail을 사용해봤을 때 느낀점은 EC2보다 매우 쉽고 편리하며 관리하기도 쉬웠다.

아마존 라이트세일 요금의 모든 것
아마존 라이트세일이란?

Github Action을 이용한 Lightsail CI/CD 파이프라인 구축 과정

참고: 작업 환경은 Nodejs서버입니다.

CI/CD를 구축하고자 하는데 Lightsail은 EC2처럼 Codedeploy가 없어서 조금 해맸다.

CI/CD를 구축하기 위해 총 7가지의 과정을 거치는데 다음과 같다.

  1. Lightsail 인스턴스 생성 후 SSH 키페어 생성
  2. IAB 사용자 생성 및 AWS AccessKey 발급 받기
  3. Lightsail에 aws-cli 설치
  4. Lightsail에 configure 설정
  5. Github 프로젝트(리포지토리)에 SecretKey 등록
  6. Github Action의 Workflow 생성
  7. 프로젝트에 ./workflow/deploy.yml 파일 작성 (2편에서 다룰 예정)

1. Lightsail 인스턴스 생성 후 SSH 키페어 생성

  • Lightsail 인스턴스를 생성하는 중간에 SSH 키 페어를 생성하는 창이 나온다.
  • 키페어를 생성하면 .pem 파일이 생성되는에 한번밖에 발급 받지 못하니 절대 잃어버리면 안된다.(나는 구글 드라이브에 저장해놓았다.)
  • 키페어를 발급받으면 아래와 같은 파일이 나온다.

  • 윈도우에서는 .pem파일을 메모장으로 열면 읽을 수 있고 맥에서는 cat 명령어를 통해 .pem 파일을 읽을 수 있다.
  • 제일 위 ---BEGIN RSA PRIVATE KEY---- 부터 제일 마지막 ---END RSA PRIVATE KEY--- 을 포함한 값이 SSH 키페어이다. (나중에 Github Secret_key 등록할 때 중간에 있는 암호키만 등록했더니 자꾸 오류가 생겼다.)

2. IAB 사용자 생성 및 AWS AccessKey 발급 받기

IAB 콘솔

  • Github Action에서 AWS-Lightsail에 접근하기 위해서는 액세스 키, 액세스 아이디가 필요하다.
  • 액세스 키와 액세스 아이디는 IAB 콘솔에서 발급 받을 수 있는데 AWS 상단에 계정 - 고급 - IAB 콘솔로 이동을 클릭하면 들어갈 수 있다.

IAB 콘솔에서 액세스 키와 액세스 아이디 발급 받기.

  • IAB 콘솔에 들어가서 그룹을 생성하고 (그룹 이름은 사용자 정의로 한다) 그룹에 사용자를 추가한다.
  • 사용자를 생성할 때 보안 키를 다운받을 수 있는데 .cvs 파일로 다운받을 수 있다.
  • 이 파일에 Access_keyAccess_Id가 들어가있다. 이 파일 역시 한 번밖에 다운로드 받지 못하니 꼭 저장해놓자.
  • 나는 emotion-aws라는 그룹과 lightsail-emotion-container라는 사용자를 생성했다.
  • 그리고 사용자를 클릭해서 들어가면 보안 자격증명 탭이 있는데 해당 탭에서 액세스 키를 확인할 수 있다. (액세스 아이디는 .csv에 있다)

정책 추가

  • 사용자를 생성할 때 정책을 선택해야하는데 추가한 정책은 아래와 같다.
  • EC2는 EC2 전용 CodeDeploy정책이 있는데 Lightsail은 전용 CodeDeploy정책이 없기 때문에 AWSCodeDeplyFullAccess라는걸 찾았다.
  • 이름에서 유추하듯 AWSCodeDeplyFullAccess는 AWS에 코드를 배포할 수 있는 모든 권한인것 같아 이 정책을 추가했다.
  • 추후에 S3를 이용할 수 있을것 같다 미리 S3관련 정책도 추가해놓았다.

3. Lightsail에 aws-cli 설치

  • aws-cli를 설치하는 이유는 configure를 설정하기 위함이다.

  • 나중에 나오겠지만 Github Action에서 lightsail에 접근하기 위해서 아까 IAB 콘솔에서 발급받은 AccessKey와 AccessId를 configure에 등록해주어야 한다.

  • aws-cli를 설치하는 방법은 아래와 같다.

sudo apt-get update && sudo apt-get install awscli
  • aws-cli가 잘 설치되었는지 확인하려면 버전을 확인하면 된다.
aws --version

4. Lightsail Configure 설정

  • 위에서도 말했듯이 configure를 설정하는 이유는 Github Action에서 접근하기 위함이다.
  • aws configure를 설정하려면 아래와 같이 명령어를 입력하면 된다.
aws configure
  • 순서대로 Access Key Id 와 AWS Secret Access Key, region, output format을 설정할 수 있다.

  • Access Key Id 와 AWS Secret Access Key는 아까 IAB 콘솔에서 발급받은 키다.

  • region은 AWS의 물리적 위치를 설정할 수 있는데 나는 ap-northeast-2(서울)로 설정했다.

  • output format은 json으로 설정했다.

5. Github 프로젝트에 SecretKey 등록

  • 이제 아까 발급받은 모든 키들을 (SSH 키페어, AWS ACCESS KEY, AWS ACCESS ID 등) Github Action에서 사용할 수 있게 Secret Key를 등록해보자.
  • 우선 Github 프로젝트(리포지토리)에 설정창을 클릭한다.

  • 그리고 Secret and variables 탭을 클릭하면 해당 리포지토리의 secrets key를 생성할 수 있다.
  • 해당 키들을 설정하는 이유는 Github Action에서 CI/CD를 구축할 때 .yml 파일의 환경변수 값으로 불러오기 위해 설정한다.
  • SecretKey를 사용하지 않고 .yml파일에 그대로 작성해버린다면 보안에 심각한 위험이 있기 때문에 꼭 SecretKey를 사용하자.
  • 나는 아래와 같이 SecretKey를 등록했다.

각 키는 아래와 같다.

  • AWS_ACCESS_KEY_ID : IAB 콘솔에서 발급 받은 ACCESS_ID
  • AWS_SECRET_ACCESS_KEY: IAB 콘솔에서 발급 받은 ACCESS_KEY
  • LIGHTSAIL_HOST: 라이트세일 인스턴스의 public IP
  • LIGHTSAIL_SSH_KEY: 인스턴스를 생성할 때 발급받은 SSH 키페어.
    • 아까도 말했지만 ---BEGIN RSA PRIVATE KEY---- 부터 제일 마지막 ---END RSA PRIVATE KEY--- 을 포함한 값까지 SSH 키페어이다.

6. Github Actions Workflow 생성

  • 나는 이미 워크플로우를 생성해서 해당 창이 뜨지만 워크플로우를 생성하지 않았다면 첫 생성할 수 있는 페이지가 뜬다.
  • 해당 페이지에서 new workflow 버튼을 눌러주면 새로운 워크플로우가 생성된다.

7. .yml 파일을 작성하고 CI/CD 구축

2편 참고

0개의 댓글