AWS 4일차
CI / CD
-
CI/CD (Continuous Integration/Continuous Deployment) 는 애플리케이션 개발과 배포 프로세스를 자동화하여 소프트웨어 개발과정을 더욱 효율적으로 만드는 개념입니다.
-
CI는 개발자가 코드 변경 사항을 공유 레포지토리에 자주 통합하는 과정을 의미하며, CD는 코드 변경 사항을 자동으로 테스트, 빌드, 배포하는 과정을 의미합니다.
-
CI/CD 파이프라인은 소프트웨어 개발 단계를 자동화하여 코드의 품질을 유지하고, 버그를 조기에 발견하여 수정할 수 있도록 합니다.
-
코드 변경이 발생하면 CI 서버가 자동으로 코드를 가져와 빌드하고 테스트를 실행합니다. 테스트가 성공하면 CD 단계에서 애플리케이션을 자동으로 배포합니다.
AWS CodeBuild
-
AWS CodeBuild는 완전 관리형 빌드 서비스로, 소스 코드를 가져와 컴파일, 테스트, 패키징 등의 작업을 자동화하여 소프트웨어 프로젝트를 빌드할 수 있도록 지원합니다.
-
CI/CD (Continuous Integration/Continuous Deployment) 파이프라인에서 핵심적인 역할을 수행하는 도구입니다.
-
AWS CodeBuild는 소스 코드 빌드 및 테스트 프로세스를 자동화하기 위해 사용됩니다.
-
다양한 프로그래밍 언어와 프레임워크를 지원하며, 소스 코드가 저장된 저장소(예: GitHub, AWS CodeCommit)와 연동하여 소스 코드의 변경 사항을 감지하고 자동으로 빌드 작업을 실행합니다.
-
CodeBuild는 빌드 환경을 사전 구성하여 필요한 의존성 패키지를 설치하고, 빌드 스크립트를 실행하여 컴파일, 테스트, 패키징 등의 작업을 수행합니다.
-
빌드 과정은 병렬로 실행되어 빠른 결과를 제공하며, 확장성이 뛰어나서 동시에 여러 빌드를 처리할 수 있습니다.
-
CodeBuild는 자체 빌드 환경을 생성하거나, 빌드 환경 이미지를 사용하여 빌드 작업을 실행할 수 있습니다.
-
이미지는 AWS에서 제공하는 사전 구성된 환경 또는 사용자 지정 Docker 이미지를 선택할 수 있습니다. 이를 통해 빌드 환경을 프로젝트에 맞게 조정할 수 있습니다.
AWS CodeBuild 실습
https://github.com/oolralra/awstest 레포지토리를 Fork하여 내 깃허브로 가져온다.
Code build 과정에서 깃허브에 액세스하려면 토큰 인증이 필요하다.
깃허브에서 토큰을 생성하여 따로 .txt 파일로 저장해둔다. (도큰 키는 다시 열람 불가능)
서버 생성에 앞서 Codedeploy가 인스턴스에 접근할 수 있는 권한을 만들기 위해 IAM 으로 이동한다.
사용 사례 `EC2` 를 선택한다.
`AmazonS3FullAccess` , `AWSCodeDeployFullAccess` 정책을 추가한다.
`EC2CodeDeploy` 라는 역할 이름으로 생성한다.
`CodeDeploy` 라는 이름의 EC2 인스턴스를 생성한다.
Amazon Linux 운영 체제 선택 (프리티어)
`all-allow` 라는 보안 그룹을 생성하고 모든 인바운드를 트래픽을 허락한다. (실습을 위함)
# 아마존 리눅스의 경우 사용자가 ec2-user이다. 사용자 이름을 변경하여 SSH로 인스턴스 접근.
yum -y install ruby // ruby로 이루어진 codedeploy-agent를 위해 ruby를 설치한다
wget https://aws-codedeploy-ap-south-1.s3.ap-south-1.amazonaws.com/latest/install // 에이전트 다운로드
chmod +x ./install
./install auto
systemctl enable --now codedeploy-agent
# 코드디플로이는 외부와 통신을 하기때문에 적어도 outbound 트래픽은 허용이 되어야함. =프라이빗 서브넷에 있으면 안되고, 만약 프라이빗서브넷에 둔다면 NAT gateway가 필요함.
yum -y install httpd
systemctl enable --now httpd
curl localhost // verify
이제 빌드 및 디플로이 설정을 하면된다. aws의 개발자도구로 이동한다.
내 깃허브 계정을 토큰으로 연결 한 후 몇가지 사항을 체크하여 생성한다.
깃허브 레포지토리에서 buildspec.yml 파일의 correctto8 로 수정한다.
빌드가 정상적으로 성공됨을 확인할 수 있다.
`전체 로그 보기`를 통해서 빌드 로그를 상세히 확인할 수 있습니다.
이제는 deploy를 설정한다.
배포 그룹을 생성한다.
`AWSCodeDeployRole` 권한을 가진 IAM 역할을 추가한다.
`CodeDeploy` 라는 이름의 디플로이를 생성한다.
`test-dg` 라는 deploy 배포 권한을 가진 그룹 이름으로 생성한다.
deploy-agent를 설치했던 EC2 인스턴스를 선택한다.
로드밸런서를 통해 DEPLOY도 가능 하나, 현재 실습은 단일 인스턴스에 배포할 예정이므로 설정하지 않는다.
이제 파이프라인을 생성한다.
먼저 소스인 Github를 선택하고 내 Github아이디와 연결한다.
빌드 공급을 Codebuild 선택, 앞서 만든 test_PJ를 선택한다.
생성했던 `test_app` , `test_dg` 앱과 배치 그룹을 선택하여 파이프라인을 생성합니다.
소스, 빌드, 배포 가 성공적으로 이루어지고 파이프라인이 생성됨을 확인할 수 있습니다.
인스턴스의 IP 접속하면 index.html이 확인됩니다.
레포지토리에서 index.html에 내용을 추가합니다.
파이프라인에서 수정사항을 받아 자동으로 배포되는 것을 확인할 수 있습니다.
실습과제) ec2 인스턴스에 톰캣을 설치하고 appspec.yml 파일을 적절히 수정해서 test.jsp 파일이 배포되도록 해보세요.
<서버주소>:8080/test.jsp
접속했을때 test.jsp 의 파일이 뜨도록. + test.jsp를 수정했을때 수정된 사항이 webhook을 통해 반영되는지도 확인해보세요!
댓글남기기