AWS

[AWS CodeDeploy] CodeDeploy Basics

Sean 션 2024. 6. 24. 17:31

CICD를 도와주는 AWS의 Deployment 서비스로, CodeDeploy Agent가 서비스 배포를 도와줍니다.

  • EC2, ASG, ECS & Lambda와의 통합이 가능합니다.

 

각각의 대상에 대한 CodeDeploy의 동작을 알아보도록 하겠습니다.

CodeDeploy to EC2

  • 어떻게 배포할 것인지 appspec.yml 파일과 배포 전략을 통해 정의할 수 있습니다.
  • EC2 플릿에 인플레이스 업데이트를 진행합니다. (새로운 인스턴스를 생성하지 않음)
  • 각각의 배포 phase에서 hooks를 통해 배포가 성공적이었는지 알 수 있습니다.

인플레이스 업데이트 예시

CodeDeploy to ASG

Auto Scaling Group으로의 CodeDeploy는 두가지 전략을 선택할 수 있습니다.

  • 인플레이스 업데이트
    • 실행 중인 EC2 인스턴스를 업데이트합니다. (위의 CodeDeploy to EC2와 비슷함)
    • CodeDeploy to EC2와 다른 점: ASG로 인해 생긴 새로운 인스턴스도 CodeDeploy에 의해 배포 적용됩니다.
  • 블루/그린 업데이트
    • 세팅이 동일한 새로운 ASG을 생성합니다.
    • 오래된 인스턴스를 얼마나 오랫동안 유지할 것인지 설정해야 합니다.
    • 반드시 ELB를 사용해야 합니다.

Blue/Green Update, v2의 정상 작동 확인 시 v1 제거

 

CodeDeploy to AWS Lambda

  • Traffic Shifting 기능을 제공합니다.
  • Pre / Post traffic hook lambda function를 통해 배포가 성공적이었는지 알 수 있습니다.
  • CloudWatch Alarm을 통해 손쉽게 롤백을 구성할 수 있습니다.
  • SAM 프레임워크도 내부적으로 CodeDeploy를 사용합니다.
  • 동작: (블루그린과 흡사)
    1. Pre-Traffic Hook Lambda Function 실행
    2. v2 배포 후 Traffic shifting with alias
    3. Shifting이 완료된 후 Post-Traffic Hook Lambda Function 실행하여 테스트 실행
    4. 정상적인 것이 확인되면 v1 제거

CodeDeploy to ECS

  • ECS와 Fargate에 대하여 Blue/Green 배포를 지원합니다.
  • 설정은 ECS의 서비스 정의에 포함됩니다. 따라서 현재로서는 CodeDeploy 콘솔에서 이를 구성하는 것이 아니라, ECS 서비스 정의에서 구성할 수 있습니다.
  • 새로운 task set을 생성하고 트래픽을 새로운 task set으로 re-route 하는 방식입니다.
  • 서비스가 특정 시간동안 안정적이라면 기존 버전을 삭제합니다.
  • 오래된 인스턴스를 얼마나 오랫동안 유지할 것인지 설정해야 합니다.
  • 카나리 배포를 지원합니다.
    • 예: Canary 10Percent5Minutes - 10퍼센트의 task가 5분간 안정적이면 모든 버전을 업데이트