AWS CodeDeploy는 EC2 / on-premises 인스턴스들, ECS, serverless lambda function 등 여러 서비스 애플리케이션 배포를 자동화하는 서비스입니다. 자세한 설명은 공식 문서에 정리되어있습니다.
해당 2분짜리 영상을 보시면 빠르게 컨셉을 이해할 수 있습니다.
AWS CodeDeploy는 여러 장점이 있지만, 크게 4가지 설명을 할 수 있을 것 같습니다.
1. 배포 진행 상황을 모니터링 할 수 있습니다. 저는 인프라 초보이기 때문에 수행하는 과정에서 발생하는 많은 오류에 대한 로그가 필요했고, CodeDeploy에서 제공하는 console 이 큰 도움이 됐습니다. 이와 관련해 본문에서 설명하도록 하겠습니다.
2. (거의) 무료다!! 우리는 EC2에서 CodeDeploy를 사용할 것이므로 배포를 하는데 추가 비용이 들지 않습니다. 다만 저희의 배포 과정에서는 하나의 파일을 S3에 업로드 하고 이에 따른 비용을 지불해야 하는데, 이와 관련한 약간의 비용이 나갈 수는 있겠네요 :)
3. 가동 중지 시간을 최소화 시킬 수 있습니다. 공식 문서에 따르면 blue / green 배포 과정에서 거의 즉시 트래픽을 리다이렉션 시켜준다고 합니다. 즉, 새 애플리케이션 버전 변경으로 인한 중단을 최소화합니다. 자동 배포 과정에서 잠깐이나마 서비스가 죽는 것을 원하지 않는다면, CodeDeploy에서 blue / green 배포 설정을 해줄 수 있습니다.
4. 동시 배포를 할 수 있습니다. 하나 이상의 EC2 컴퓨팅 플랫폼을 사용하는 애플리케이션에 배포가 필요할 경우, CodeDeploy를 사용하면 큰 효과를 보실 것으로 예상됩니다!
Blue-Green?
Blue-Green deployment는 배포 전략 중 하나입니다. 라이브 환경을 Blue 라고 지칭하며 새로운 환경은 Green 이라고 지칭합니다. 새로운 배포는 Green 환경에서 수행되며, 에러 검출이 되지 않을 경우 traffic을 Green 으로 옮깁니다.
가장 큰 장점은 downtime이 없다는 것입니다!! 배포 중에도 애플리케이션이 실행중이므로 사용자는 배포가 진행되었다는 사실을 거의 알 수 없습니다.
설명은 여기까지하고, 자동 배포를 위해 작업했던 순서에 대해 설명하겠습니다 :)
작업 순서
수행할 작업의 순서는 아래와 같습니다.
1. CodeDeploy 사용을 위한 EC2 IAM 인스턴스 프로파일 생성
2. EC2에 CodeDeploy agent 설치
3. CodeDeploy 애플리케이션 생성
4. Github Action workflow 를 위한 yml 파일 생성
5. CodeDeploy Action을 위한 appspec.yml, script 파일 추가
1. CodeDeploy 사용을 위한 EC2 IAM 인스턴스 프로파일 생성
우리는 배포 대상이 될 EC2 인스턴스가 CodeDeploy를 사용할 수 있도록 권한을 부여해야 합니다!!
우선, AWS IAM에 들어오셔서 역할 만들기를 클릭합니다.
EC2를 클릭하시고 S3, CodeDeploy 모든 권한을 넣어주고, 네이밍을 붙여 역할을 만들어줍니다.
우리는 배포 코드를 압축해서 s3에 업로드하고, 해당 빌드 파일을 CodeDeploy를 통해 EC2로 배포할 것이기 때문에 두 권한을 부여하는 것입니다. 자세한 설명은 아래에서 하도록 할게요!



이제 만든 IAM Role을 우리의 인스턴스에 붙여줘야 합니다. 인스턴스 목록에서 체크하시고 작업, 보안 탭을 들어가시면 IAM 역할을 수정해주시면 우리의 EC2는 S3, CodeDeploy 에 대한 접근 권한을 부여받게 됩니다.


2. EC2 에 CodeDeploy agent 설치
배포를 원하는 인스턴스에 CodeDeploy agent를 설치하여 해당 인스턴스를 배포에서 사용할 수 있도록 설정해야 합니다!!
해당 명령어를 입력해주세요.
**Codedeploy agent 설치
**1. ruby 설치:** Codedeploy agent는 ruby로 작성되었으므로 이를 설치한다.
$ sudo apt-get install ruby // (ubuntu 16.04)
**2. wget 설치** (agent 설치파일을 들고오기 위해 쓰인다)
$ sudo apt-get install wget
**3. Codedeploy Agent 설치**
*#* ubuntu 계정을 사용한다면 /home/ubuntu로 가면 된다.*
$ cd /home/jane
***#* 설치파일 **다운로드 *(Seoul region)***
$ wget [<https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install>](<https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install>)**
wget <https://aws=codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install>
****# 실행권한 추가 및 설치**
$ chmod +x ./install
$ sudo ./install auto
하다가 막힌다면 아래 aws docs를 참고한다.
[<https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html>](<https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html>)**
저는 아래의 있는 링크를 넣었습니다.
sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install 가 통하지 않는 다면.
sudo chmod +x ./install
입력해 주면 적용이 됩니다!
그 후에 명령어가
sudo service codedeploy-agent status 명령을 입력하여 에이전트가 실행 중인지 확인할 수 있습니다.
3. CodeDeploy 애플리케이션 생성
자동 배포를 위한 메인 서비스인 CodeDeploy 애플리케이션을 만들어줘야 합니다!!
CodeDeploy에서는 배포 EC2 인스턴스를 식별하기 위한 EC2 식별자와, CodeDeploy 권한이 있는 IAM 인스턴스 프로파일이 필요합니다. 각 설정을 해주고 옵니다.


EC2 Name 태깅을 하고, IAM CodeDeploy 사용 사례를 선택하여 IAM 인스턴스 프로파일을 만듭니다.
-> 여기서 test-key는 iam 역할입니다!
-> 저의 경우 둘다 입력을 하지 않으면 실행이 되지 않더군요!
이제 CodeDeploy 애플리케이션 설정을 해보죠! 우리는 EC2를 사용하는 CodeDeploy를 하게 되므로, 컴퓨팅 플랫폼을 EC2/온프레미스로 지정합니다. 컴퓨팅 플랫폼에 대한 자세한 설명은 해당 링크를 참조해주세요.


배포를 위해서 우리는 배포 그룹을 생성해야 합니다.
배포 그룹에는 배포 대상 인스턴스를 포함하게 되며, 해당 그룹 내에서 우리의 배포 작업이 실행되게 됩니다.
배포 그룹 이름을 만드시고, 서비스 역할에 조금 전 만든 CodeDeploy 권한이 있는 IAM 인스턴스를 연결해줍니다.
저희 팀은 배포 유형을 현재 위치로 설정하였지만, 배포 간에 발생할 수 있는 downtime을 원하시지 않는다면 블루/그린 설정을 하시면 됩니다.
환경 구성 탭에서 우리가 태깅했던 EC2 인스턴스를 추가해주고,
저희 팀은 여러 인스턴스를 사용하지 않기 때문에 배포 설정은 OneAtATime으로 하였습니다. 배포 설정 관련한 자세한 설명은 해당 링크를 참고바랍니다.
마지막으로 저희 팀은 로드 밸런서를 사용하지 않기 때문에 해당 옵션을 꺼줬습니다.


'개발 > sw' 카테고리의 다른 글
인스턴스IP 도메인 연결 (0) | 2023.03.31 |
---|---|
Codedeploy SQL 오류 (0) | 2023.03.30 |
CI/CD 구축 github action (3) (0) | 2023.03.28 |
CI/CD 구축 github action (2) (0) | 2023.03.28 |
CI/CD 구축 github action (1) (0) | 2023.03.28 |