GitHub Actions - 2. CD를 위한 AWS 설정

Kim, Beomgoo·2022년 10월 7일
0

CI/CD

목록 보기
3/5

이전 포스트에서는 GitHub Actions를 통해 Pull Request시 자동으로 테스트를 수행하는 CI 과정을 구현했었다.
이번 포스트부터는 AWSEC2, S3, CodeDeploy 서비스를 이용해 배포까지 자동화하는 CD 과정을 구현해 보자.

1. 배포 과정 소개

대충 서비스들 다이어그램

2. AWS EC2 인스턴스 생성 및 설정

EC2 인스턴스를 생성하는 자세한 과정은 생략하고, 대략적인 흐름만 나타내도록 한다.

2.1. EC2 인스턴스 생성


인스턴스를 추가한 뒤, 나중에 설정할 CodeDeploy에서 인스턴스를 식별할 수 있도록 태그를 추가해 준다.

2.2. 인스턴스의 역할 설정

인스턴스를 생성한 뒤, EC2 인스턴스에서 CodeDeploy에 접근할 수 있도록 해주는 권한을 부여해야 한다.
IAM의 역할로 들어간 뒤 역할을 생성한다. 아래와 같이 사용 사례에 EC2를 체크해준다.

그 다음 권한 정책에서 AmazonEc2RoleforAWSCodeDeploy를 선택하여 역할을 생성해 준다.

EC2 인스턴스 설정에서 IAM 역할을 다음과 같이 수정해 준다.

2.3. Ubuntu 인스턴스 추가 설정

Ubuntu 운영체제로 인스턴스를 생성했다면 다음과 같은 추가 과정을 거쳐야 한다.

1. Code Deploy Agent 설치

$ sudo apt update
$ sudo apt install ruby-full
$ sudo apt install wget

$ aws s3 cp s3://aws-codedeploy-ap-northeast-2/latest/install . --region ap-northeast-2
$ chmod +x ./install
$ sudo ./install auto

설치가 제대로 되었는지 확인하기 위해 아래 명령어를 입력한다.

$ sudo service codedeploy-agent status

2. Java 설치

$ sudo apt-get install openjdk-11-jre-headless

3. AWS S3 버킷 생성

빌드한 프로젝트를 중간에서 저장하여 CodeDeploy에 전달하기 위해 S3 버킷을 이용한다.
다음과 같이 버킷을 생성한다.

4. CodeDeploy 어플리케이션 생성

4.1. CodeDeploy 역할 생성

아래와 같이 역할을 생성한다. 서비스 사용 사례는 CodeDeploy를 선택한다.

권한 정책은 AWSCodeDeployRole을 선택하여 역할을 생성한다.

4.2. 어플리케이션 생성

아래와 같이 CodeDeploy 어플리케이션을 생성한다. 컴퓨팅 플랫폼은 EC2/온프레미스를 선택한다.

생성한 어플리케이션에서 배포 그룹을 생성한다.

서비스 역할은 위 4.1.에서 만든 역할을 사용한다. 배포 유형현재 위치를 선택한다.

환경 구성에서는 위에서 만든 EC2 인스턴스를 태그를 통해 선택한다. 일치하는 고유한 인스턴스가 한 개 이상 나타나야 나중에 정상적으로 동작한다.

배포 설정CodeDeployDefault.AllAtOnce를 선택한다. 로드 밸런싱 활성화는 해제한다.

5. IAM 사용자 생성

다음 포스트에서 진행할 GitHub Actions Workflow 수행 시 AWS S3와 CodeDeploy에 접근해야 하므로, 접근 권한을 가진 IAM 사용자를 생성해야 한다.
아래와 같이 IAM 사용자를 생성한다. 액세스 유형은 CLI 스크립트를 통해 접근하므로 액세스 키-프로그래밍 방식 액세스를 선택해준다.

생성할 IAM 사용자에 정책을 연결해야 한다. 기존 정책 직접 연결을 클릭하여 AmazonS3FullAccessAWSCodeDeployFullAccess를 선택한다.

사용자를 최종적으로 생성하였다면 아래와 같은 화면을 볼 수 있다. 액세스 키 ID비밀 액세스 키는 public으로 오픈되지 않도록 주의한다. 비밀 액세스 키는 현재 화면에서만 확인할 수 있고 다시는 볼 수 없으므로 CSV 파일을 다운받거나 따로 기록해 놔야 한다.

참고 자료

profile
하나에 하나를 보탠다

0개의 댓글