[리포트] 인프라를 코드로 개발할 때 패턴을 재사용하는 방법 #reinvent #DOP302

2023.02.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요, 임채정입니다.
지금 라스베가스에서는 11월 28일부터 12월 2일까지 re:invent를 진행했습니다.
해당 블로그는 「How to reuse patterns when developing infrastructure as code」 세션을 정리한 리포트입니다.

아젠다

  1. 세션 개요
  2. 인프라의 과제
  3. 고급 IaC 도구
  4. 마무리

1. 세션 개요

개요

Explore AWS Cloud Development Kit (AWS CDK) constructs and AWS CloudFormation modules and how they can help make it easier to build applications on AWS. Learn best practices from United Airlines, who shares how they have used AWS CDK to create an internal library of infrastructure components that their development team can reuse to accelerate application delivery.

발표자

Ravi Palakodeti, Senior Solutions Architect, AWS
Ethan Rucinski, Principal Architect, United Airlines
Ryan Bachman, Solutions Architect, Amazon Web Services Inc.

발표 난이도

300 - Advanced

2. 인프라의 과제

내가 잃어버린 생산적인 날들 중 하나는 1000줄의 코드를 버리는(줄이는) 것이었다.

예를 들어 A 프로젝트, B 프로젝트, C 프로젝트에서 AWS 리소스을 구축하고 싶어서 CloudFormation 템플릿을 작성합니다.
세 개의 프로젝트에서 비슷한 리소스를 작성하고 싶을 때 어느 순간 동일한 템플릿을 작성하고 있을 것입니다.
세, 네 번 반복하다보면 코드의 90, 95%는 중복될 수도 있습니다.
이런 코드를 계속 처음부터 써가는게 과연 효율적일까요?

인프라의 발전 방식

  • 사내 인프라
    • 가용 인프라를 갖춘 대규모 환경
    • 긴 배송 시간
    • 제한된 혁신
  • 클라우드 인프라
    • 사내 가상화를 통한 인프라에 대한 유비쿼터스 액세스
    • 인프라를 코드로 제공
    • 애플리케이션 환경을 자동으로 구축하는 데 걸림돌이 되는 장애물 제거
  • 애플리케이션 기반 EaaS
    • 인프라 및 AWS 클라우드 서비스에 대한 유비쿼터스 액세스
    • 다양한 애플리케이션에 대한 고유한 요구사항
    • 애플리케이션 환경 구축 프로세스 자동화 기능

인프라뿐만 아니라 코드로서의 인프라에도 진화도 있었습니다.

인프라의 과제

  • 구축업체는 리소스 복잡성과 모범 사례를 파악하는 데 많은 시간을 할애하고 있습니다.
  • 애플리케이션은 공통 아키텍처 요소를 공유하는 경우가 많습니다.
    • 예를 들어 Amazon DynamoDB 테이블을 읽고 쓸 수 있는 하나 이상의 람다 함수
  • 모델링 인프라가 반복되어 "휠 재구현"
    • 각 서비스 정의 및 구성
    • 다른 서비스와의 통합
    • 모범 사례 준수
  • 고유한 기능을 구축하는 데 귀중한 개발 시간이 소요됨

어떻게 하면 이러면 과제들을 해결하고 필요한 서비스 등을 신속해서 채택하여 모범 사례와 보안 및 모든 것을 준수할 수 있을까요.
이러한 것을 해결할 수 있는 방법이 바로 코드 재사용이라고 생각합니다.

이러한 개별 구성 요소에 대한 주제 전문가가 있는 이 모델을 통해 확장할 수 있습니다.
이러한 패턴을 어떻게 적용할지 또는 모범 사례를 어떻게 적용할지에 대해 생각하기 시작할 수 있습니다.
이 모델을 아티팩트, 모듈 또는 라이브러리로 캡슐화하여 공유할 수도 있습니다 조직 전체 또는 커뮤니티 전체에서 더 광범위하게 재사용할 수 있습니다.

3. 고급 IaC 도구

IaC 도구종류

  • CloudFormation - 매개 변수 및 고유 함수
  • AWS CDK - 입력된 OO 언어: 루프, 조건, 상속 등

CloudFormation

CloudFormation은 매개변수화된 템플릿을 통해 반복되는 횟수를 감소시켜줍니다.
또한 애플리케이션이 최신 템플릿을 활용하여 현재 모범 사례 제공합니다.

하지만 CloudFormation의 단점은 시간이 지나면 템플릿에 작성된 리소스의 정책이 오래될 수 있다는 것입니다.

AWS CDK

  • 친숙함 - 당신의 언어 코드
  • 도구 지원 - 인라인 문서 자동 완성
  • 추상화 - 정상 기본값 재사용 가능 클래스

CDK는 클라우드 인프라를 재사용 가능한 구성 요소로 모델링하기 위한 다국어 소프트웨어 개발 프레임워크입니다.
AWS CDK 에서는 타입스크립트, 자바스크립트, 파이썬과 같이 익숙한 프로그래밍 언어를 사용할 수 있습니다.

AWS CDK 의 레벨

L3+ 목적에 맞게 구축된 구조물 - 의견이 제시된 추상화
L2 AWS 구조 - High-level 서비스 구조
L1 CloudFormation 리소스 - 자동으로 생성됨

L1 CloudFormation 리소스 - 자동으로 생성됨
예시와 같이 속성을 전달하기만 하면 하단의 CloudFormation에 합성됩니다.
TypeScript으로 코드를 작성하면 밑의 코드와 같이 CloudFormation 가 표시됩니다.

L2 AWS 구조 - High-level 서비스 구조
예시의 코드에서는 VPC의 구성을 작성합니다.
VPC뿐만 아니라 VPC의 구성에 필요한 서브넷, 라우팅 규칙 등이 필요한데 그 모든 것을 생성합니다.
실제로 다음 코드를 실행하게 되면 아래에 있응 아키텍처와 같은 구성으로 리소스가 생성됩니다.
CloudFormation 리소스 위로 이동하여 실제로 필요한 것을 제공합니다.

L3 목적에 맞게 구축된 구조물 - 의견이 제시된 추상화
다음 코드의 예시는 로드 밸런싱 Fargate 서비스입니다.
해당 코드를 배포하는 경우 작업 정의부터 서비스, 로드 밸런서까지 모든 것을 만들 수 있습니다.

이처럼 CDK를 사용하면 짧은 코드 몇줄로 CloudFormation 의 몇백줄과 같은 결과를 출력시킵니다.

4. 마무리

훌륭한 프로그래머는 무엇을 써야 하는지 안다. 위대한 사람들은 무엇을 다시 써야 하는지 알고 있다.

Github