AWS CDK란?
AWS Cloud Development Kit(CDK)은 현대적 프로그래밍 언어를 사용하여 클라우드 인프라를 코드로 정의하고 AWS CloudFormation을 통해 배포하는 오픈 소스 소프트웨어 개발 프레임워크입니다.
AWS CDK CLI를 사용하여 CDK 애플리케이션과 상호 작용할 수 있습니다. CDK CLI를 사용하면 CDK 앱에 정의된 스택을 나열하고, 스택을 CloudFormation 템플릿에 합성하고, 실행 중인 스택 인스턴스와 CDK 코드에 정의된 스택 간의 차이점을 확인하고, 원하는 퍼블릭 AWS 리전에 스택을 배포할 수 있습니다.
TypeScript, Python, .Net, Java등 다양한 언어를 지원하며 Terraform을 선호하는 고객을 위하여 CDK TF를 제공하여 HCL 파일을 정의 할 수 있습니다.
구성
CDK는 앱, 스택, 구문(Construct)으로 구성 되어있으며, 다음과 같이 정의합니다.
App
- 기본 구문, CDK CLI를 통해 AWS CloudFormation 템플릿을 렌더링 하고 배포한다. 배포 가능한 단위인 하나 이상의 스택으로 구성되며 리전 및 계정에 대한 정보를 담고있따.
Stack
- AWS의 리소스를 표현하는 구문이 들어있다
Construct
- 계층 구조를 가지고 있으며 해당 Construct는 3가지 레벨로 표현된다
- AWS CloudFormation 리소스
- 1대1 매핑이며 자동으로 생성된다. 선언적 접근 방식으로 YAML이나 JSON에서 사용하는 리소스와 동일하다
- AWS 구문 라이브러리
- AWS 서비스 레벨에 위치하며 AWS가 직접 작성한 구문이다. 적절한 기본값으로 세부 정보에 고민업이 리소스 생성이 가능하다
- Your awesome stuff
- 노드 드레이닝, Auto Scaling 및 적합한 경보등 서비스 리소스에 상세한 정보들을 정의할 수 있다.
위 정보들로 아래와 같이 리소스가 생성된다.
리소스 생성에는 총 5가지 단계를 거칩니다.
- 구축(Construction) : 앞서 정의한 모든 Construct를 인스턴스화하며 이를 다 함께 연결합니다. 대부분의 코드가 이 스테이지에서 실행됩니다.
- 준비(Preparation) : 준비 과정을 거친 Construct는 최종 상태로 가기 위해 마지막 수정을 겪게 되며 이때 사용자가 작업에 끼어들게 되면 결과에 영향을 줄 수 있으니 이 단계에서 생성되는 트리를 변경할 때는 각별히 주의해야 합니다.
- 검증(Validation) : 검증 단계에서 배포가 정상적으로 이뤄진 상태에 있는지 확인하게 되며, 이 단계에서 실패하게 되면 사용자에게 알림이 가게 됩니다. 가능한 빨리 검증 단계를 거쳐 예외 처리를 하는 것을 추천하며 이런 방식을 통해 코드가 지속적으로 안전하고 코드에 대한 진단 능력이 향상될 수 있습니다.
- 종합(Synthesis) : AWS CDK App의 마지막 실행 단계로 app.synth()에 의해 호출됩니다. 이는 Construct tree를 순회하며 모든 Construct에 대해 synthesize 메서드를 호출합니다. 이를 통해 CloudFomration 템플릿, Lambda 애플리케이션 번들, 파일 그리고 도커 이미지 등 배포를 위해 필요한 구성 요소들이 만들어집니다.
- 배포(Deployment) : AWS CDK CLI가 생성된 구성 요소를 AWS 환경에 배포합니다. 이때 구성 요소는 Amazon S3 그리고 Amazon ECR(Elastic Container Repository)에 업로드 되며 AWS CloudFormation 배포 작업을 통해 애플리케이션이 배포되며 AWS 리소스들이 생성됩니다.
- 워크샵 자료
그래서 우리는 어떻게 구성했느냐...
멀티 리전(서울, 프랑크프루트, 오레곤)의 인프라 관리와 서비스 배포를를 보다 효율적으로 하기 위한 DevOps 환경 구성 경험을 공유합니다.
기대효과
- AWS 환경에 대한 설정 및 히스토리를 관리하며 문제가 있는경우 롤백, Human Error의 가능성을 낮추고 생산성, 기민성 향상을 높혔습니다.
- AWS 환경을 필요할때 적절한 권한이 있는 인원만 Provision한 후 곧바로 Decommission 할 수 있어서 비용 절감 효과를 보았습니다.
- 환경 구성에 대한 히스토리가 git과 S3등에 저장되어 정기적 보고 및 감사시 현행화에 대한 리소스가 절감됩니다.
IaC 도입
CDK는 아래의 내역을 관리 했습니다.
- ALB Target그룹 설정 및 EC2 수량 관리
- AutoScaling 그룹 환경 및 정책 관리
- Securiy Group 관리
DevOps 환경 구축
사용자들의 데이터 분석 결과 및 메타데이터의 크기가 10G~100G정도로 크기 때문에 EFS 업로드 및 S3에 업로드 하여 빌드시 최대 3~5시간까지 소요됐습니다.
그래서 해당 데이터는 별도로 바이너리화 하여 S3에 업로드, 미리 데이터가 들어가 있는 EC2 AMI를 생성하여 해당 ID를 SMS Parameter Store에 저장하고 배포하기 위한 사전 세팅을 진행했습니다.
실제 Application은 빌드되어 Deploy될때 사전 데이터가 들어가 있는 AMI 이미지에 배포되어 실행 되고 실행시 AMI에 저장된 바이너리 데이터들을 읽어 메모리에 저장합니다.
배포는 Blue/Green으로 진행 되며 배포되는 인스턴스들중 하나라도 실패하는 경우 해당 배포를 롤백되고 관리자에게 알람이 가며 실제 콘솔을 보며 트러블슈팅을 진행했습니다.
'Server Infra > AWS' 카테고리의 다른 글
EFS는 NAS가 아닙니다. (0) | 2022.02.13 |
---|---|
ALB Access Log 분석하기! (0) | 2022.01.18 |
AWS CloudWatch Synthetics Canaries 검토중... (0) | 2022.01.13 |
EBS 지연 현상 (0) | 2022.01.11 |
AWS Advanced Networking - Specialty 취득 후기 (4) | 2022.01.08 |