본문 바로가기

개발

[CI/CD] (4) CD 구축하기 - AWS

[CI/CD] (3) 설정 총정리에서 정리한 내용을 직접 구현하고, CI/CD 구축을 마무리해보겠습니다. 

 

1. AWS EC2

EC2 인스턴스 생성에 대한 자세한 내용은 아래 글 혹은 기타 EC2 생성 관련 글을 참고하시면 됩니다.

이번 프로젝트에서는 Ubuntu 20.04 버전을 이용했습니다.

https://lback.tistory.com/4  

 

(1) IAM 역할 부여

S3와 CodeDeploy에 대한 접근 권한을 부여하는 과정입니다. 

AWS 콘솔 - IAM - 역할 - 역할 만들기
AWSCodeDeployFullAccess, AmazonS3FullAccess 선택

위와 같이 설정하면 됩니다. 

 

이렇게 생성한 IAM 역할을 EC2에 부여하면 됩니다.

AWS 콘솔 - EC2 - 인스턴스 이름 우클릭 - 보안 - IAM 역할 수정

 

(2) JDK, CodeDeploy Agent 설치

JDK는 자신의 프로젝트에 맞는 버전을 설치하면 됩니다. 자세한 내용은 생략하겠습니다.

 

CodeDeploy Agent 설치의 경우 공식문서에 매우 잘 정리되어 있습니다. 

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html  

설명된 내용을 그대로 따라하시면 됩니다. (Ubuntu 기준)

 

2. AWS S3 

(1) S3 버킷 생성

S3 버킷 생성은 간단한 편이라 자세한 내용은 생략하겠습니다.

 

(2) IAM 사용자 생성

이후에 GitHub에서 S3에 접근할 것이므로, IAM 사용자를 미리 생성해줍니다. 

AWS 콘솔 - IAM - 사용자 - 사용자 생성

Console 액세스는 설정해주지 않아도 됩니다.

AmazonS3FullAccess, AWSCodeDeployFullAccess 선택

권한의 경우 GitHub에서 CodeDeploy도 이용할 것이므로, AmazonS3FullAccess와 AWSCodeDeployFullAccess까지 추가해줍니다.

 

마지막으로 access key를 생성해줍니다.

: AWS 콘솔 - 사용자 - 생성한 사용자 클릭 - 보안 자격 증명 - 액세스 키, 액세스 키 만들기

 

이후에 GitHub에서 이때 생성된 access key를 통해 자격을 증명하고 S3와 CodeDeploy를 이용할 수 있습니다. 

 

3. AWS CodeDeploy

(1) IAM 역할 부여

미리 IAM 역할을 생성해주고, 생성 시에 IAM 역할을 선택해줍니다. 

 

마찬가지로 'AWS 콘솔 - IAM - 역할 - 역할 생성'을 통해 생성하면 됩니다.

 

이때는 사용 사례로 EC2가 아닌 CodeDeploy를 선택하고, 미리 정의된 AWSCodeDeployRole을 선택하면 됩니다.

 

(2) CodeDeploy Application 생성

'AWS 콘솔 - CodeDeploy - 애플리케이션 - 애플리케이션 생성' 을 통해 생성하면 됩니다.

 

생성 시에는 이름과 EC2 대상인 것만 설정해주면 됩니다.

 

이후 '배포 그룹 생성'을 통해 배포 그룹을 명시해줍니다.

배포 그룹 이름을 입력하고, 서비스 역할은 앞서 생성한 CodeDeployRole을 부여한 역할을 선택하면 됩니다.

배포 유형의 경우 중단 배포 방식을 이용할 것이므로, 현재 위치를 그대로 유지하면 됩니다.

다음으로 EC2 인스턴스에 배포할 것이므로, 배포할 EC2 인스턴스를 선택해줍니다. 

생성했던 EC2의 이름을 태그로 선택해주면 됩니다. 

 

에이전트 설치는 앞서 EC2에서 직접 설치했으므로 넘어갑니다.

 

마지막으로 배포 구성은 기본 값을 이용하고, 로드 밸런싱 활성화 체크를 해제한 후(로드 밸런싱 이용 X) 배포 그룹을 생성해주면 됩니다. 이제 이 CodeDeploy Application이 실행될 때, 어떤 그룹에 배포해야 하는지 알 수 있습니다. 

 

 

이제 GitHub workflow만 작성해주면 되는데, 다음 글로 나눠서 작성하도록 하겠습니다.