S3 버킷 생성 + CodePipeline 설정 및 최종 배포
- 아키텍처 개요 (링크)
- CodeBuild + ECR 생성 (링크)
- VPC + 서브넷 생성 (링크)
- 인터넷 게이트웨이 + NAT 게이트웨이 생성 및 라우트 테이블 설정 (링크)
- 로드밸런서(ALB) + 보안 그룹(Security Group) + 대상 그룹(Target Group) 생성 (링크)
- ECS 클러스터 생성 + 태스크 정의 + 서비스 생성 (링크)
- S3 버킷 생성 + CodePipeline 설정 및 최종 배포 (현재 글)
S3 버킷 생성
S3에서 버킷 만들기 선택해 주고, 버킷의 이름을 작성해 주었다. 객체 소유권은 ACL을 비활성화해주었다.
모든 액세스를 차단해 주었으며, 버킷의 버전 관리는 비활성화해주었다.
암호화 유형은 기본 설정으로 Amazon S3 관리형 키를 사용한 서버 측 암호화를 선택하고, 버킷 키를 활성화해주었다.
고급 설정에서 객체 잠금은 비활성화해두었다.
버킷 생성을 누르면 위와 같이 버킷이 생성되는 것을 확인할 수 있다.
CodePipeline 설정
파이프라인의 이름을 정해준 후, 실행 모드는 대기를 해주었다.
서비스 역할은 새 서비스 역할을 선택하여, 파이프라인의 이름으로 된 서비스 역할을 생성하도록 해주었다.
변수는 추가하지 않았으며, 고급 설정에서 미리 생성해 둔 S3 버킷에 아티팩트를 저장시킬 수 있도록 사용자 지정 위치로 선택해 주었다. 기본 위치를 선택하는 경우 자동으로 S3 버킷이 생성되고, 해당 버킷에 아티팩트가 저장된다.
소스 공급자는 GitHub를 선택해 준 후 리포지토리와 브랜치 설정을 해주었다. CodeBuild에서 CodePipeline이랑 중복되는 설정으로 인해 선택하지 않았던 웹 후크도 선택해 주었다.
빌드로는 생성해 둔 빌드 프로젝트로 선택하여 단일 빌드 선택 후 리전과 입력 아티팩트를 소스 아티팩트로 선택해 주었다. (이후 테스트 부분은 스킵해 주었다.)
배포의 경우 ECS를 선택해 주고, 리전과 입력 아티팩트로 빌드 아티팩트를 선택해주었다. 미리 생성해둔 클러스터와 서비스를 선택해주고, 이미지 정의 파일도 buildspec.yml에 작성한 것과 동일하게 작성해 주었다.
이후 검토를 통해 올바른 설정이 되었는지 확인하고 파이프라인을 생성해 주었다.
최종 배포
위와 같이 코드 파이프라인까지 생성하고 GitHub에 코드를 push 하면 자동으로 CodeBuild가 시작된다. 이는 소스 스테이지에서 어떤 소스가 변경되었는지 GitHub로 확인 가능하다.
간단한 확인을 위해 프론트엔드의 로그인 페이지를 수정해 주었다.
위와 같이 코드 파이프라인이 순서대로 실행되고, 중간에 에러가 나는 경우 해당 부분이 재실행된다.
첫 테스트 당시에 빌드가 끝나고 배포가 시작됨과 동시에 또 빌드가 계속 시작되길래
로그에서 트리거 부분을 찾아 위의 규칙을 삭제해 주었다.
그 후 코드 파이프라인이 정상적으로 실행되고 무중단으로 기존의 로그인 페이지에서 아래와 같이 바뀌는 것을 확인할 수 있었다. (실시간으로 태스크가 교체되는 부분은 ECS > 클러스터 > 서비스 를 통해 확인 가능하다)
배포가 잘 되는 것을 확인했으니, 이제 SAST, DAST 등의 분석 도구를 통해 보안 피처 통합을 진행하려 한다. 이 과정도 힘들겠지만.. 화이팅..!!!!!!!!!>w<