-
NestJS + Bitbucket pipelines + EC2 + CodeDeploy (CI/CD) - 1공부/AWS 2025. 1. 14. 00:36
Nestjs로 CI/CD를 구축하면서 여러 가지를 시도해 보고 해결을 했던 부분을 기록하려고 합니다.
제가 성공했던 방법은 총 2가지 입니다.
1. NestJS + Bitbucket Pipelines 만을 이용하여 CI/CD
2. NestJS(PM2로 실행) + Bitbucket Pipelines + S3 + CodeDeploy + EC2
모두 가능하지만, 1번의 경우는 뭔가 아니라는 생각이 들었습니다.(그 이유는 추가적으로 설명드리도록 하겠습니다.)
2가지 모두 이번 글에서 작성하도록 하겠습니다.
다만, 개인적인 생각에 다른 분들이 작성한 글과 내용을 기반으로 했을 때, 2번이 더 안정적인 방법이라고 생각이 들었습니다.
방법 1. NestJS(PM2로 실행) + Bitbucket Pipelines + S3 + CodeDeploy + EC2
1. S3에 bucket을 생성합니다.
- 기본 설정으로 생각하시고 생성해주시면 됩니다.
- 버킷 이름은 CI/CD를 진행하기 위한 파일이 전달되는 버킷으로 만들어주시면
됩니다.
(저의 경우는 프로젝트명-branch명으로 하였습니다.)
2. EC2 인스턴스가 없는 경우 생성해주시고, 있으시다면 CodeDeploy agent가 설치됐는지 확인이 필요합니다.
- EC2 인스턴스 생성시 자동으로 설치됐는지 확인은 AWS 공식문서(링크)로 들어가셔서 생성하시는 인스턴스를 확인해 주세요.
- 실행 중인 인스턴스가 있으시다면 sudo service codedeploy-agent status를 입력해 주시면 확인하실 수 있습니다.
2-1. EC2 인스턴스 생성
- 원하시는 이름과 인스턴스로 생성해 주시면 됩니다.
- 작성하신 이름은 이후에 CodeDeploy와 연결할 수 있습니다.
2-2. 실행 중인 EC2 인스턴스에 codedeploy agent설치 여부 확인
- 인스턴스에 접속하여 sudo. service. codedeploy-agent. status를 입력하여 확인합니다.
- Actice: active (running)으로 표시가 된 상태입니다.
- 만약 설치가 되지 않은 상태라면, AWS 공식문서(링크)에 접속하여 생성하신 인스턴스에 맞게 설치를 진행해 주시면 되겠습니다.
3. IAM을 생성합니다.
- IAM은 총 3가지가 필요합니다. 3가지를 모두 만들도록 하겠습니다.
3-1. 1번 IAM은 사용자에서 사용자를 생성한 후 S3FullAccess와 CodeDeployFullAccess 권한을 추가합니다.
- 생성된 사용자에서 액세스 키를 만들어야 합니다.
- 만들어진 액세스 key id와 액세스 key secret을 잘 저장해야 합니다.(계속 사용될 예정입니다.)
- 만들어진 IAM은 bitbucket에서 S3에 파일을 업로드하는 과정과 EC2에 CodeDeploy가 접근하기 위해 사용됩니다.
3-2. 2번째 IAM EC2에서 사용될 IAM입니다. 해당 IAM은 사용자를 생성하지 않아도 되고 정책으로 생성하시면 됩니다.
- IAM 역할에서 우측 상단에 역할 생성을 눌러줍니다.
- AmazonS3ReadOnlyAccess 권한으로 추가하여 생성해 줍니다.
- S3에 업로드된 파일을 읽으려면 해당 권한이 필요합니다.
3-3. 세 번째 IAM은 CodeDeploy에서 사용할 IAM을 생성해야 합니다.
- 역할을 생성버튼을 클릭합니다.
- AWS 서비스에서 CodeDeploy를 선택합니다.
- 자동으로 정책은 연결이 된 상태이며, 이름만 원하시는 이름으로 지어주시면 됩니다.
4. 생성한 역할들을 지정해 줍니다.
4-1. EC2 인스턴스에 EC2에서 사용하려고 생성한 역할을 IAM에 연결해 줍니다.
- 보안에서 IAM역할 수정을 선택합니다.
- 방금 전에 생성했던 EC2에 연결하려고 생성했던 IAM을 역할선택에서 선택합니다.
4-2. CodeDeploy를 생성하며 IAM에서 생성한 역할을 부여합니다.
- 배포에서 애플리케이션 생성을 선택합니다.
- application이름은 원하시는 이름으로 지정하시면 됩니다.(후에 bitbucket pipelines에서 이용됩니다.)
- 배포그룹을 생성합니다.
- 배포 유형은 EC2 현재 위치라고 생각해 주시면 됩니다.
- 환경 구성은 EC2 인스턴스로 선택해 주시면 됩니다.
- 키가 중요한 부분이라고 생각합니다. 이전에 생성하신 인스턴스의 이름을 연결해 주시면 됩니다.
- AWS Systems Manager를 사용한 에이전트 구성은 codedeploy agent 설치기 때문에 이미 설치된 경우라면
안 함으로 선택합니다.- 배포 설정은 CodeDeployDefault.AllAtOnce로 설정하여 한번만 배포되도록 설정합니다.
- 로드밸런서는 활성화를 X하시는 것이 나을 거 같습니다. 제가 해본 결과 실패 시 보안그룹에서 인스턴스와 연결을 끊습니다.
그래서 다시 인스턴스에 설정을 해줘야 합니다. 만약 다중 인스턴스로 구성된 서버이시면 활성화하시고 하나씩 배포가 진행되겠지만
그렇지 않은 경우라면 활성화를 X 하시는 것을 추천드립니다.- 여기서 다시 말씀드리지만 이미지만 보시고 로드밸런서 활성화 하시면 안 됩니다.(위에 작성한 부분 다시 한번 읽어주시기를 바라겠습니다.)
AWS 세팅까지를 1차로 구성하였습니다. 내용이 어지럽고 복잡할 수 있다고 생각합니다. 저도 여러 가지 시도해 보고 찾아보고 했던 부분이라고 말씀드릴 수 있을 거 같습니다. 다음 글에서는 Bitbucket 설정과 구성을 작성하고 S3까지 업로드 과정을 작성하도록 하겠습니다.
bitbucket + EC2 배포는 추가적으로 작성하도록 하겠습니다.
추가) 2025.01.19 - bitbucket + EC2 배포
Bitbucket Pipelines + EC2 + NestJS
작성하는 글은 codedeploy를 사용하지 않고 EC2에 바로 bitbucket pipelines가 배포할 수 있도록 하는 방법입니다.하지만, 이 방법은 그리 추천하지 않습니다. 이유는 .pem 키로 접속하는 것을 할 수 없도록
baam.tistory.com
추가) 2025.01.20 - NestJS + Bitbucket pipelines + EC2 + CodeDeploy (CI/CD) - 2
NestJS + Bitbucket pipelines + EC2 + CodeDeploy (CI/CD) - 2
지난번에 작성했던 부분을 이어서 작성하도록 하겠습니다. 혹시라도 전 부분을 확인 안 하셨다면 읽으신 다음에 동일하게 진행 부탁드리겠습니다.https://baam.tistory.com/413 NestJS + Bitbucket pipelines +
baam.tistory.com
특정 문제나 궁금한 점을 검색하며 찾아보고 작성한 글입니다. 혹시라도 부정확한 정보를 전달드릴 수 있습니다. 틀린 부분이 있으면 댓글을 남겨주세요.
Ref.
https://countrymouse.tistory.com/entry/awsec2cicd2
https://devyounji.tistory.com/46
https://medium.com/codelogicx/cicd-deploy-to-aws-codedeploy-with-bitbucket-pipeline-b5da79b55477
https://velog.io/@gang6607/Bitbucket-pipeline
https://velog.io/@banjjoknim/Bitbucket-Pipelines-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0
https://velog.io/@ordidxzero/deploy-nestjs-with-ssl-1
https://velog.io/@dlatkdrb980219/CodeDeploy-LB-%EB%B0%B0%ED%8F%AC-Block-Traffic-%EC%8B%A4%ED%8C%A8-%ED%95%B4%EA%B2%B0Github Actions, Code Deploy, Nginx를 이용한 무중단 배포 및 SSL 적용 (1)
🚨 주의! 이 글은 DevOps 초보자가 삽질을 통해서 이룬 결과물을 다룬 시리즈입니다. 이 글에서 다룬 방법보다 효과적인 방법이 있으면 알려주시면 감사하겠습니다. 피드백은 언제나 환영입니다!
velog.io
Bitbucket Pipelines 살펴보기
Bitbucket을 이용해서 CI / CD 를 위한 파이프라인 설정을 위해 살펴보다 각각의 키워드들에 대해 정리해두면 좋을 것 같아 간단한 설명정도만 정리해보았다.
velog.io
Bitbucket pipeline
Bitbucket pipeline을 사용해보자
velog.io
CICD —Deploy to AWS CodeDeploy with Bitbucket Pipeline
How we can Setup Bitbucket Pipeline with EC2 on AWS using CodeDeploy for fast Product to Market of your Application!!!
medium.com
BitBucket Deployment 파이프라인을 만들어보자
최근에 들어서야 프라이빗 레파지토리를 팀 단위로 생성할 수 있지만 이전엔 아니었다. 그래서 많은 형상 관리 툴 중에 Bitbucket을 고려하지 않았나 싶다. 실제로 3명으로 구성된 아주 자그마한
devyounji.tistory.com
[AWS] EC2 Ubuntu CI/CD pipeline 구축 (CodeDeploy 설정) - 2 (+appspec.yml, ecosystem.json)
지난 포스팅에 이어, 이번에는 Codedeploy 설정을 진행한다. 1. CodeBuild 설정 2. Codedeploy 설정: 이번 포스팅 3. EC2 Ubuntu 설정 Codedeploy에서 deploy에 사용할 애플리케이션(Jane-codedeploy)을 생성한다. 플랫폼
countrymouse.tistory.com
'공부 > AWS' 카테고리의 다른 글
NestJS + Bitbucket pipelines + EC2 + CodeDeploy (CI/CD) - 2 (0) 2025.01.20 Bitbucket Pipelines + EC2 + NestJS (0) 2025.01.19 AWS Session Manager 생성 (0) 2025.01.09 [RDS MariaDB] Error: Too many connections (0) 2024.09.16 EC2 CPU 상승 알림 (SNS + Lambda + CloudWatch) (0) 2024.07.28