AWS - 19 [CICD]

_Block·2022년 9월 29일
0

AWS

목록 보기
20/27
post-thumbnail

👆 소개 및 개요

리포지토리를 잡고 자동으로 배포하는 방법을 위해서 필요합니다.

해당 과정을 위해서 코드가 제대로 동작하는지 테스트 과정도 필요하고 다음 단계로 넘어간다는 가능성도 생각해야 합니다.

또한 가끔씩은 승인을 받아야만 활용 가능한 상태여야 합니다.

이러한 모든 단계를 자동으로 CICD에서 수행이 가능합니다.

이제는 코드를 저장하기 위한 CodeCommit, 플랫폼까지 이르는 Codepipeline, 코드를 구축 및 자동으로 테스트 하는 CodeBuild, 배포를 하는 CodeDeploy, 모든것을 합쳐놓은 CodeStart에 대해서 일괄적으로 학습을 합니다.

👆 CodeCommit

일단 기본적으로 버전 관리에 대해서 알아야 합니다.

버전 관리는 일반적으로 Git을 생각하면 됩니다, 즉 누가 어떤 코드를 커밋하고 변경을 하였는지에 대한 기록 입니다.

일반적으로 중앙 온라인 리포지토리에 업로드 되는 형식이며 동시에 여러명이 작업이 가능하기 떄문에 유용합니다.

Aws의 경우에는 CodeCommit또한 Git과 같이 동작을 합니다.

하지만 Git 리포지토리는 비용이 듭니다.

  • 제 3자 서비스가 있으나 사용하는 비용이 상당할 수 있습니다.

하지만 AWS의 CodeCommit는 코드가 AWS클라우드의 개인 VPC내에 있기 떄문에 개인 리포지토리가 생기는 것과 같습니다.

이로인해 보안도 높고 나만의 저장공간을 가지는 것과 같습니다.

추가적으로 IAM을 통해 액세스 제어가 가능하며 다른 오픈소스와도 잘 통합니다.

코드는 KMS를 통해서 암호화 되어 푸시 할떄마다 HTTPS 또는 SSH 프로토콜을 이용하여 암호화된 채로 전송을 하게 됩니다.

  • 이떄 SSH키 또는 자격증명을 다른 사용자와 공유해서는 안됩니다.

  • 이론적으로 이렇다는 것이지 제 스스로도 좀더 대중적이고 익숙한 Github를 사용합니다.

👆 CodePipeline

AWS 내에서 CICD를 조정해주는 비주얼 워크플로 도구입니다.

빌드부터 테스트 단계, 배포까지 모든 과정을 말합니다.

코드를 가져오게 되면 빌드 단계로 이동을 하고 이후 테스트 단계 이후 배포단계로 CodePipeline에서 모두 일어납니다.

CodePipeline은 총 3가지로 구성이 됩니다.

  • CodeCommit
  • CodeBuild
  • CodeDeploy

개발자가 CodeCommit에 코드를 푸시하면 CodePipeline에 의해 CodeCommit이 모든 코드를 추출해 내고 그것을 S3버킷에 저장을 합니다.

이제 CodeBuild가 작동을 하면 아까 저장된 데이터가 CodeBuild에 입력이 됩니다.

  • 이로인해 CodeBuild가 직접적으로 CodeCommit에 액세스할 필요가 없습니다.

빌드를 할떄에 아티팩트가 생성이 되며 이를 다시 S3버킷에 저장합니다.

이후 CodeDeploy가 시작되면 S3에서 아티팩트를 따와서 배포가 진행이 됩니다.

이러한 일련의 과정을 모두 보고자 한다면 CloudWatch Events를 사용하면 됩니다.

👆 CodeBuild

CodeBuild에서 가장 중요한 것은 buildspec.yml입니다.

이 파일은 항상 루트에 위치해야 합니다.

또한 애플리케이션이 구축되면 출력로그가 저장이 되는데

CloudWatch Metrics는 빌드 동계를 확인하는 데 사용이 되고

CloudWatch Events는 실패한 빌드를 찾아 알려줍니다.

CloudWatch Alarms는 오류가 너무 많을떄 사용이 됩니다.

CodeBuild가 동작하는 원리는 이와 같습니다.

일단 CodeCommit에서 코드를 가져 옵니다.

이떄 CodeBuild에는 컨테이너가 있어야 하는데 이는 도커 이미지를 사용합니다.

이후 yml파일을 실행합니다.
- 가끔씩 지연이 되는 경우가 있는데 이런 경우를 대비해 캐시를 사용하기도 합니다.

이후 로그가 CloudWatch, S3로 이동을 하고 빌드가 완성이 되면 아티팩트를 생성합니다.

이후 해당 아티팩트를 S3에 넣게 됨으로써 동작합니다.

👆 CodeDeploy

많은 인스턴스에 자동으로 배포하는 것을 말합니다.

애플리케이션의 버전이 증가하는 것은 Elastic Beanstalk에 의해 관리되는 것이 아닙니다.

배포 툴로는 오픈소스도 많지만 Aws의 CodeDeploy에 대해서 알아보겠습니다.

동작은 이와 같은 방식으로 동작합니다.


개발자는 CodeCommit을 통해 레파지토리에 넣은다음에 CodeDeploy를 실행합니다.

그럼 CodeDeploy Agent에서 계속해서 CodeDeploy에게 해야 할 작업이 있는지 묻고 폴링을 합니다.
- 그냥 계속 커넥션을 하는 겁니다.

이후 배포 할 것이 인지가 되면 빌드 코드와 appspec.yml파일을 불러오게 되고 CodeDeploy Agent는 appspec.yml파일의 모든 배포 지침을 실행하게 됩니다.

그러면 배포가 시작이 되고 배포에 대한 결과같은 다시 CodeDeploy에게 보고 됩니다.

- 즉 CodeDeploy가 배포를 하는 것이 아니다 CodeDeploy Agent가 배포를 합니다.

이와 같이 CodeDeploy가 작동을 할떄에는 appspec.yml을 따라가기 떄문에 해당 파일에 명시된 값들은 매우 중요합니다.

다음과 같은 필드값이 있습니다.

1. file

S3나 github에서 파일 시스템으로 파일을 소싱해 줍니다.

2. hooks

애플리케이션응ㄹ 배포하는 모든 단계가 포함됩니다.
여러가지 키값들이 있고 대표적으로

BeforeInstall, AfterInstall, ApplicationStart, ValidateService가 있습니다.
- 해당 역할을 이름을 읽어보면 알 수 있습니다.

CodeDeploy에는 여러가지 방법이 있습니다.

이떄까지 살펴봤던 방법들이며 다음과 같습니다.

1. One At A Time

인스턴스를 하나씩 종료시키고 다시 실행시키는 방법입니다.

2. Half At A Time

인스턴스의 반절씩 동작시키는 방법입니다.

3. All At Once

인스턴스를 한번에 종료시키고 다시 실행하는 방법으로 개발 환경에 유리합니다.

4. Custom

원하는 방식으로 만드는 것으로 예를들면 정상 호스트가 75%이상이 유지되게 배포해라 가 있습니다.

👆 CodeStar

이전에 설명한 모든 서비스를 통합하는 솔루션 입니다.

즉 CodeCommit, CodeBuild, CodeDeploy와 이외의 것들을 한번에 볼 수 있습니다.

클릭 몇번으로 EC2를 실행 가능하고 백엔드가 자동으로 생성이 됩니다.

그러기 떄문에 개발자는 제대로 실행이 되는지만 확인하면 되고, 문제가 발생을 하였을떄 트래킹 도구를 활용하면 됩니다.

해당 서비스는 무료 서비스이지만 추가적으로 사용하는 기능 예를들면 CodeCommit, CodeBuild같은 기능에는 비용이 부과됩니다.

👆 CodeArtifact

의존하는 다른 소프트웨어를 사용하는 것으로 코드 종속성이라고도 합니다.

일반적으로는 저장소에 소프트웨어를 푸시하고 그 위에 다른 소프트 웨어를 설계합니다.

그러기 떄문에 완전 종속성이라는 특성을 가지게 되며 이떄의 웹을 Artifact관리 라고 합니다.

해당 서비스는 이러한 Artifact관리를 좀더 용이하게 해줍니다.

모든 Artifact는 VPC와 AWS내부에 존재하며 원한다면 타사 플랫폼을 활용 가능합니다.

👆 CodeGuru

머신 러닝 기반의 서비스로 자동화된 코드 검토, 애플리케이션 성능 권장 사항을 지원합니다.

개발자가 코드를 푸시하면 다른 개발자가 코드를 검토하게 됩니다.

이후 코드가 프로덕션에 배포되면, 코드의 성능을 모니터링 하고 버그를 감지해야 하는데

이러한 부분을 CodeGuru에서 자동으로 해줍니다.

예를들면 버그가 발생을 하면 CodeGuru가 실행 가능한 권장사항을 제공합니다.

또한 애플리케이션에 고한 권장사항을 제공하는데 테스트 할 시에 비용이 높은 프로덕션의 코드 줄을 자동으로 감지하고 최적화하며 이후 코드에 대한 권장 사항 또한 제공합니다.

  • 쉽게 말해 코드 최적화 컴파일 서비스 입니다.

👆 글 설명 👆

실습 과정도 있지만 현재 실습까지 하고, 시간을 기록하기까지에는 너무 오랜시간이 걸린다고 판단을 하였습니다.

그러기 떄문에 자격증을 목표로 하고 있는 이상 일단 이론적인 내용을 살펴보고 자격증을 취득하는 것으로 목표를 잡았습니다.

왜냐하면 개인적으로 또 다르게 rust에 대해서도 공부를 하고 있기 떄문에 실습까지 진행이 된다면 이전에 배운 부분도 까먹고 계속해서 무한 굴레를 타게 될꺼 같습니다.

그러니 일단 자격증을 먼저 취득하고 이후에 실습을 진행함으로써 좀더 단단하게 학습을 해볼 예정입니다.

profile
Block_Chain 개발자 입니다. 해당 블로그는 네트워크에 관한 내용을 다루고 있습니다.

0개의 댓글