[AWS Hero 특집] 서버리스 시대에 GitOps를 통한 모던 CI/CD 파이프라인 구축
Datree.io의 CTO 겸 창립자인 AWS 커뮤니티 히어로 Shimon Tolts 의 기고글입니다. Shimon Tolts는 100% 서버리스 회사를 실행하는 데 필요한 개발자 도구 및 인프라를 전문적으로 다루고 있습니다.
최근 수 년 동안 소프트웨어를 제작하고 전송하는 방식에 있어 중요한 변화가 있었습니다. 이러한 변화는 주로 마이크로서비스, 즉 코드를 작은 구성 요소로 분할하고, 인프라를 코드 형태로 사용하고, Git를 통해 모든 요소를 신뢰 가능한 단일 소스로 결합하는 방식을 통해 구현되었습니다.
이 게시물에서는 이러한 변화에 대해 설명하고 모던 소프트웨어 개발의 다양한 단계를 소개함으로써 서버리스 세상에서 사용 가능한 솔루션을 보여 드립니다. 또한, 서버리스 시대를 위해 설계된 유용한 도구들을 소개하겠습니다.
서버리스란 무엇입니까?
서버리스 개발 및 도구의 놀라운 세계로 들어가기 전에 서버리스가 무엇을 의미하는지 설명해 드리겠습니다. AWS 웹 사이트에서는 네 가지 주요 이점을 언급하고 있습니다.
- 서버 관리 불필요
- 유연한 크기 조정
- 가치 기반 비용 지불
- 자동화된 고가용성
제 관점에서 서버리스란 직접 관리하고 크기를 조정할 필요가 없는 모든 인프라를 의미합니다.
저희 회사인 Datree.io에서는 워크로드 중 95%를 AWS Fargate에서 실행하고 5%를 AWS Lambda에서 실행합니다. 당사는 서버리스 기업입니다. AWS 계정에는 Amazon EC2 인스턴스가 전혀 없습니다. 자세한 내용은 다음을 참조하십시오.
- io case study
- Migrating to AWS ECS Fargate in production
- CON320: Operational Excellence w/ Containerized Workloads Using AWS Fargate(re:Invent 2018)
GitOps란 무엇입니까?
Git는 소형 프로젝트에서 초대형 프로젝트에 이르는 모든 프로젝트를 빠르고 효율적으로 처리하도록 설계된 무료 오픈 소스 배포 형태의 버전 제어 시스템입니다.
GitOps의 CI/CD 컨설턴트인 Luis Faceira에 따르면 GitOps는 작업을 수행하는 한 방식입니다. 여러분은 GitOps를 모든 것이 Git에서 시작하여 Git에서 끝나는 접근 방식으로 볼 수 있습니다. 다음을 일부 주요 개념입니다.
- Git는 시스템에 대한 신뢰 가능한 단일 소스입니다.
- Git는 모든 환경이 운영(생성, 변경 및 파괴)되는 단일 위치입니다.
- 모든 변경 사항은 관찰 및 검증 가능합니다.
클라우드 이전의 소프트웨어 구축 방식
클라우드 이전 시대에는 개발, 테스트, 보안, 운영, 모니터링 등을 위해 별도의 팀을 운영했습니다.
오늘날, 대부분의 조직에서는 전체 개발자 자율 환경 및 개발자가 전체 프로덕션 경로를 소유하는 방식으로의 이전이 이루어지고 있습니다. 이제는 개발자가 왕(또는 여왕)인 것입니다 :)
과거의 팀(운영/보안/IT 등)은 개발자가 변경하는 모든 내용을 검증 및 제어하는 문지기 역할을 수행했습니다. 이제는 이러한 팀이 정책을 적용하고 모범 사례 및 표준을 설정하는 일종의 위성 부서가 되었습니다. 이 팀들은 더 이상 프로덕션 과정의 병목이 되지 않으므로 전사적 플랫폼과 권한 부여 솔루션을 제공합니다.
모든 요소의 코드화
전체 파이프라인을 개발자가 완전히 소유하는 방식으로 전환되면서 개발자는 모든 요소를 자동화했습니다. 이제는 그 어느 때보다 코드가 많아졌으며 수작업으로 수행되던 프로세스도 이제는 코드 형태로 설명됩니다.
제 생각에 이러한 전환은 좋은 현상입니다. 이러한 전환에 따르는 일부 이점은 다음과 같습니다.
- 자동화: 모든 요소를 코드 형태로 저장하면 모든 요소를 자동화하고, 재사용하고, 즉시 재생성할 수 있습니다.
- 변경 불가: 문제가 발생하면 저장된 구성에서 다시 생성할 수 있습니다.
- 버전 관리: 변경 내용을 적용하거나 되돌릴 수 있으며 변경을 수행한 단일 사용자를 추적할 수 있습니다.
GitOps: Git는 신뢰 가능한 단일 소스가 되었습니다.
두 번째 주요 변화는 이제 모든 요소가 한 장소에 있다는 것입니다! Git는 모든 코드가 저장되고 모든 작업이 시작되는 장소입니다. 테스트, 제작, 패키징 또는 출시 등 오늘날에는 모든 과정이 풀 요청을 통해 트리거됩니다.
이러한 추세는 모든 요소의 코드화에 의해 증폭됩니다.
서버리스 시대의 유용한 도구
시장에는 유용한 도구가 많이 출시되어 있습니다. 다음은 그 중 서버리스용으로 설계된 도구의 목록입니다.
코드
코드는 항상 소스 제어 시스템에 저장해야 합니다. 최근 수 년 동안, BI, 운영, 보안 및 AI와 같이 더욱 많은 함수가 코드화되고 있습니다. 새 개발자에게는 일부 기능에 대해 소스 제어를 사용해야 됨이 명백하지 않은 경우도 있습니다.
빌드 및 테스트
제가 목격하는 가장 일반적인 실수는 빌드 작업을 GUI에서 수동으로 구성하는 것입니다. 이 방식은 작은 POC의 경우 좋을 수 있으나 크기 조정이 되지 않습니다. 작업은 코드화하고 Git 리포지토리 내에 유지해야 합니다. 다음은 빌드 및 테스트에 도움이 되는 일부 도구입니다.
보안 및 거버넌스
서버리스 방식으로 작업할 때에는 많은 Git 리포지토리를 사용하게 됩니다. 코드 패키지의 수도 부담이 될 수 있습니다. 통합 코드 표준에 대한 수요는 이전과 같지만, 이제는 R&D 조직 위에 이러한 표준을 강제로 적용하는 것이 매우 어려워졌습니다. 다음은 이러한 도전 과제의 해결에 도움이 되는 일부 도구입니다.
번들 및 릴리스
서버리스 애플리케이션을 구축하는 것은 여러 마이크로서비스를 하나의 단위로 연결하는 것입니다. 예를 들어, Amazon API Gateway, AWS Lambda 및 Amazon DynamoDB를 사용하는 중일 수 있습니다. 각 서비스를 개별적으로 구성하는 대신 번들기를 사용하여 구성을 한 위치에 유지해야 합니다. 이렇게 하면 여러 환경에 대해 앱을 쉽게 복제하고 버전 관리할 수 있습니다. 다음은 일부 번들기의 예입니다.
패키지
수많은 서버리스 구성 요소와 작업할 때에는 서로 다른 Lambda 함수에 걸쳐 가져오기를 수행할 수 있는 작은 도구 패키지를 생성해야 합니다. npm 또는 RubyGems와 같은 언어 특정 스토어를 사용하거나, 보다 포괄적인 솔루션을 사용할 수 있습니다. 다음은 여러 프로그래밍 언어를 위한 호스팅을 허용하는 일부 패키지 아티팩트 스토어입니다.
모니터링
서버리스 애플리케이션으로 작업할 때에는 모든 요소가 작은 조각으로 분할되므로 이 부분이 조금 까다로울 수 있습니다. 따라서 이러한 작업 모드를 지원하는 모니터링 도구를 사용하는 것이 중요합니다. 다음은 서버리스를 지원하는 일부 도구입니다.
요약
서버리스 시대는 전체 파이프라인의 코드화 및 신뢰 가능한 단일 소스로 Git를 사용하는 등 많은 변화를 가져옵니다. 그렇다고 해서 보안, 로깅 등 과거에 있었던 문제가 사라지는 것은 아닙니다. 따라서 이러한 문제를 계속 해결하고 비즈니스에 집중할 수 있도록 지원하는 도구를 활용해야 합니다.
– Shimon Tolts;