서론
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가지의 과정을 거치는데 다음과 같다.
- Lightsail 인스턴스 생성 후 SSH 키페어 생성
- IAB 사용자 생성 및 AWS AccessKey 발급 받기
- Lightsail에 aws-cli 설치
- Lightsail에 configure 설정
- Github 프로젝트(리포지토리)에 SecretKey 등록
- Github Action의 Workflow 생성
- 프로젝트에
./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_key
와 Access_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
- 위에서도 말했듯이 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편 참고