말로만 듣던 CI/CD를 직접 구축해 볼 기회가 있어서 작성하게 되었습니다. 대부분 블로그 내용을 보면 꽤 오래 걸렸다는 내용이 있는데 간과했습니다. 실제로 해보니 생각보다 Detail 한 부분까지 챙겨서 구축하지 않는다면 에러는 쉽게 잡을 수 없다는 것을 알게 되었습니다.

우선 많이 사용하고 있는 GitHub이 아니라 Gitlab을 CI로 사용하고 있었기 때문에 CodeDeploy에서 Direct 연결이 불가하고 Gitlab에서 S3 Bucket으로 tar, zip 등 파일을 Upload 하는 형태로 제공을 해줘야 CodeDeploy에서 가져갈 수 있습니다.

우선 Gitlab 내용을 간략하게 정리했습니다. Gitlab에 있는 CI/CD 기능을 구현할 때 .gitlab-ci.yml 파일을 작성해야 하는데 크게 3단계로 작성 했습니다.

image는 banst/awscli 사용했는데 그 이유는 Gitlab -> S3로 Upload 할 때 awscli 명령을 통해서 진행하기 때문입니다.

variables는 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, S3_BUCKET 항목을 설정했는데 이는 Gitlab -> Settings -> CI/CD -> Variables에도 설정을 했습니다.

script는 명령어 형태로 작성이 가능하기 때문에 source를 압축 또는 아카이빙 해서 S3에 Upload 준비가 되어 있어야 하기 때문에 아래의 명령어 형태로 작성을 했습니다. 그리고 aws 명령어를 통해서 S3 버킷으로 올려줍니다.

// aws s3 sync . s3://$S3_BUCKET/ 방식을 처음에 이용했으나 CodeDeploy에서 tar, zip // 파일 형태만 가능해서 변경했습니다.

구성하는 단계는 아래와 같습니다.

EC2 IAM 생성

스크린샷 2022-06-16 오후 3.25.30.png

신뢰할 수 있는 엔터티 선택에서 AWS 서비스를 선택하고 일반 사용 사례에서 EC2를 선택합니다.

스크린샷 2022-06-16 오후 3.28.09.png

정책 필터 검색창에서 아래의 정책을 선택 후 다음으로 넘어갑니다.

역할 세부 정보에 역할 이름을 작성하고 2단계 권한 추가에는 앞서 추가한 정책들이 들어가 있는 것을 확인할 수 있습니다.

스크린샷 2022-06-16 오후 4.03.30.png

그리고 생성한 역할을 EC2에 적용하기 위해서 배포할 개발 서버를 선택하고 작업 - 보안 - IAM 역할 수정을 선택하면 앞서 생성한 역할을 선택하고 Update IAM Role 버튼으로 적용할 수 있습니다.

스크린샷 2022-06-16 오후 4.06.45.png

CodeDeploy IAM 생성 다시 IAM - 역할 - 역할 만들기를 눌러서 다른 AWS 서비스의 사용 사례:에서 CodeDeploy 검색을 합니다. 그리고 CodeDeploy를 선택하고 다음으로 넘어갑니다.