지난 팀프로젝트에서 CI/CD를 구축했었는데, 마지막에 마무리를 잘 못한 것도 있고 프로세스 정리를 해야 머리에 남을 것 같아서 기록해보려 합니다.
CI/CD의 개념과 첫 설명에 대한 내용은 이전 블로그를 참고해주시면 되고, 1편에서는 AWS에서 CD를 위한 설정을 하는 단계로 진행해보겠습니다. 순서는 아래와 같습니다. 본 포스트는 이 포스트를 참고해 작성했습니다.
1. EC2 생성
2. 터미널로 EC2에 접속하기
3. EC2에 Tag 추가(CodeDeploy에서 어떤 인스턴스에 실행할 지 구분하는 값)
4. IAM 역할 추가 후 EC2에 등록 (EC2 인스턴스에서 S3에 올려놓은 파일에 접근할 수 있게 권한을 추가하는 과정)
5. S3 버킷 생성
6. EC2 서버에 CodeDeploy Agent 설치
7. CodeDeploy 전용 IAM 역할 만들기
8. CodeDeploy 애플리케이션 생성
9. Github Actions에서 사용할 IAM 사용자 추가
1. EC2 생성
가장 먼저 프로젝트를 배포할 인스턴스를 만들어야 한다. EC2 인스턴스 생성 과정과 ssh로 접속하는 과정은 이 블로그를 참고했습니다.
2. 터미널로 EC2에 접속하기
위 단계에서 생성한 EC2 인스턴스에 터미널로 접속 해보겠습니다.
인스턴스 생성과정에서 만들었던 키페어를 원하는 위치에 저장한 뒤 해당 파일에 대한 권한을 설정합니다.
2.1 키페어 파일에 접근권한을 먼저 설정해줍니다.
chmod 400 {~/키페어 위치/키페어 이름.pem}
2.2 터미널로 ec2에 접속하기
터미널에 다음과 같이 입력해 ec2에 접속을 합니다.
ubuntu 환경에서 따라하시면 되고, 다른 환경이라면 공식 문서를 통해 진행하시면 될 것 같습니다.
ssh -i {키페어 위치} ubuntu@{Public IPv4 주소}
위 명령어를 입력 후 아래와 같은 내용을 확인할 수 있습니다.
아래와 같은 내용이 뜬다면 ec2 접속에 성공한 것입니다.
3. EC2에 Tag 추가
여기에서 Tag는 CodeDeploy가 어떤 인스턴스에 배포할지 구분을 해야하는데, 그 인스턴스를 구분하기 위해 ec2에 설정하는 값을 의미합니다.
3.1 EC2 설정에서 태그 관리 선택
인스턴스 상세 정보에 들어가 오른쪽 상단의 "작업"을 누르고 "인스턴스 설정 > 태그 관리" 를 눌러 태그를 추가해줍니다.
3.2 태그 추가
원하는 이름을 key 항목에 추가한 뒤 저장을 눌러 인스턴스에 태그를 추가해줍니다.
3.2 태그 확인
인스턴스 정보 하단에 AccountBookServer-tag-key 태그가 추가된 것을 확인할 수 있습니다.
4. IAM 역할 추가 후 EC2에 등록
EC2 인스턴스에서 S3에 올려놓은 파일에 접근할 수 있도록 권한을 추가해줘야 합니다.
4.1 IAM 역할 관리 페이지로 이동
"IAM 페이지 -> 역할 -> 역할 만들기" 를 통해 역할을 만듭니다. 기존에 존재하는 역할은 신경쓰지 않으셔도 됩니다.
4.2 EC2 엔티티 선택
IAM의 역할을 연결할 서비스를 선택합니다. 엔티티 유형은 AWS 서비스, 사용 사례는 EC2로 설정하시면 됩니다.
4.3 S3 접근 권한 추가
EC2 인스턴스에서 S3에 접근할 수 있도록 AmazonS3FullAccess를 검색해 해당 권한을 추가해줍니다.
4.4 이름 설정
마지막으로 역할에 원하는 이름을 설정한 뒤 생성을 완료합니다.
4.3 과정에서 S3에 대한 접근을 추가했는데, 하단에 해당 권한이 추가된 것을 확인할 수 있습니다.
4.5 EC2 인스턴스에서 IAM 연결
IAM 역할을 생성했으니, 이 역할을 ec2 인스턴스에 연결해주는 과정이 필요합니다.
"EC2 인스턴스 관리 페이지 -> 작업 -> 보안 -> IAM 역할 수정" 으로 이동합니다.
4.6 EC2 인스턴스에서 IAM 연결
이전에 만든 EC2 전용 IAM 역할을 선택한 뒤, 저장을 누르면 연결이 완료 됩니다.
5. S3 버킷 생성
AWS S3 버킷이란 이미지 또는 zip 파일을 저장하기 위한 Storage Service 입니다.
CI로 테스트 및 빌드를 완료한 프로젝트 코드를 압축해서 S3에 저장한 후, EC2 서버에서 S3에 접근해서 압축한 파일을 가져오기 위해 사용합니다.
5.1 S3 버킷 생성
"S3 메뉴 -> 버킷 만들기" 과정을 통해 버킷을 생성합니다.
5.2 일반 구성과 객체 소유권 설정
원하는 버킷 이름과 region을 선택하고, ACL은 비활성화를 선택합니다.
5.3 액세스, 버킷 버전, 암호화 비활성화
나머지 설정은 기본값을 변경할 필요없이 그대로 두고 다음으로 넘어가면 됩니다.
5.4 S3 버킷 생성 완료
버킷 생성이 완료되면 아래와 같이 버킷을 확인할 수 있습니다.
6. EC2 서버에 CodeDeploy Agent 설치
EC2가 Ubuntu 환경인 경우는 EC2에 접속한 뒤 아래의 명령어를 순서대로 작성하면 CodeDeploy Agent를 설치할 수 있습니다.
EC2 환경이 Ubuntu가 아니거나, 버전이 다르다면 공식 문서를 확인해주세요.
$ sudo apt update
$ sudo apt install ruby-full
$ sudo apt install wget
$ cd /home/ubuntu
$ wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
$ chmod +x ./install
$ sudo ./install auto > /tmp/logfile
$ sudo service codedeploy-agent status
정상적으로 설치가 된다면 sudo servie codedeploy-agent status 명령어를 쳤을 때 아래와 같은 결과가 나와야 합니다.
7. CodeDeploy 전용 IAM 역할 만들기
배포를 도와주는 CodeDeploy를 사용하기 위한 IAM 역할을 만들어 줍니다.
7.1 IAM 메뉴에서 역할 선택
"IAM 페이지 -> 역할 만들기" 과정으로 역할을 생성합니다.
생성을 클릭한 뒤 나오는 페이지는 다음과 같으며, 엔티티 유형은 AWS 서비스, 사용 사례는 CodeDeploy 기본으로 선택합니다.
7.2 CodeDeploy 권한 추가
AWSCodeDeployRole 권한을 추가해 줍니다.
7.3 IAM 이름 설정
원하는 이름만 설정하고, 나머지는 기존에 설정된 그대로 진행하면 됩니다.
이름을 생성한 뒤 오른쪽 하단에 "역할 생성"을 눌러 마무리 합니다.
8. CodeDeploy 애플리케이션/배포그룹 생성
이제 우리가 사용할 CodeDeploy 앱을 생성합니다.
8.1 CodeDeploy 애플리케이션 생성
"CodeDeploy 페이지 -> 배포 -> 애플리케이션 -> 애플리케이션 생성 버튼" 의 과정으로 애플리케이션을 생성하기 시작합니다.
원하는 이름과 컴퓨팅 플랫폼을 "EC2/온프레미스"로 설정한 뒤 애플리케이션을 생성합니다.
8.2 CodeDeploy 배포 그룹 생성
CodeDeploy 애플리케이션을 생서한 뒤 애플리케이션에서 사용하는 배포 그룹을 생성합니다.
"CodeDeploy 페이지 -> 배포 -> 애플리케이션 -> 배포그룹 생성" 의 과정으로 진행하시면 됩니다.
8.3 CodeDeploy 배포 그룹 생성
원하는 배포 그룹 이름, 역할, 유형을 설정합니다.
서비스 역할은 위에서 만든 IAM을 선택하시면 됩니다.
8.4 EC2 인스턴스 선택
CodeDeploy 배포 그룹을 어떤 인스턴스에서 동작시킬 지 선택해야합니다.
이전에 EC2에 설정한 태그를 선택해주시면 됩니다.
8.5 나머지 설정 후 배포 그룹 생성
AWS Systems Manger는 크게 중요하지 않은 것 같으니 한 번만으로 설택하고, 로드 밸런싱은 체크를 해제 합니다.
설정을 완료한 뒤 배포 그룹 생성을 눌러 마무리합니다.
여기까지 하면 EC2/S3/CodeDeploy 생성과 IAM 역할 생성 및 권한 설정을 위한 과정을 모두 마쳤습니다.
다음 포스트에는 Github Actions에서도 S3와 CodeDeploy에 접근할 수 있게 접근 권한을 설정하는 것과 배포를 위한 코드를 추가하는 과정으로 진행할 예정입니다. 감사합니다.
Reference
https://bcp0109.tistory.com/363
'DevOps' 카테고리의 다른 글
[자동배포] GitHub Actions, AWS S3, CodeDeploy로 자동 배포 구축하기 -2- (0) | 2023.07.21 |
---|---|
[CI/CD] Github Actions와 AWS S3, CodeDeploy로 자동 배포 하기 전 관련 개념 (0) | 2023.05.01 |
[Docker] Spring Boot 프로젝트 Docker로 배포하기 (0) | 2022.07.27 |