AWS(Amazon Web Services)는 2019년 기준으로 전 세계 클라우드 인프라 시장의 33%를 차지하는 업계의 리더입니다. 2020년 1월 현재, AWS는 컴퓨팅, 스토리지, 데이터베이스, 분석, 네트워킹, 모바일, 개발자 도구, 관리 도구, IoT, 보안 및 엔터프라이즈 애플리케이션을 포함하여 160개에 이르는 클라우드 기반의 제품을 전 세계에 제공하고 있습니다. 스타트업, 대기업 및 정부 기관을 포함한 수백만 고객사들이 AWS의 클라우드 서비스를 이용하여 사업을 강화해 나가고 있습니다.

개발 도구를 통해 클라우드의 활용도를 크게 향상할 수 있으며, 조직은 강력한 클라우드 컴퓨팅의 이점을 활용하기 위해 클라우드 네이티브 애플리케이션 개발방식을 채택하고 있습니다. 클라우드 네이티브 기술을 사용하는 조직은 클라우드 서비스를 무한정 개발하고 배포할 수 있습니다. 반면, 각기 다른 언어로 개발되어 별도의 툴을 통해 배포되는 여러 마이크로서비스를 관리하는 소규모 조직들은 정보의 고립(silo)에 이르게 됩니다.
툴 체인(Tool Chain)의 복잡성은 오늘날 클라우드 네이티브 개발을 수행하는 DevOps 팀들의 공통 화두입니다. Forrester가 IT 전문가들을 대상으로 2019년에 실시한 설문조사에서, 많은 소프트웨어 개발팀이 여러 도구를 관리하고 통합하는 데 어려움을 겪고 있음을 토로했습니다. AWS 서비스를 활용하기 위해서, 개발팀은 코드 배포를 위해 5가지, 혹은 그 이상의 도구를 사용해야 할 수 있습니다. 그런 다음, 이러한 도구를 관리해야 합니다. 개발자는 새로운 혁신이나 개발보다는, 복잡한 툴 체인을 관리하는 데 많은 시간을 소모하게 됩니다.
AWS는 스토리지, 네트워킹, 서버 리스(serverless)에 이르기까지 모든 것을 한 곳에서 제공하는 올인원 클라우드 서비스이며, 이로 인해 많은 조직이 AWS를 사용하고 있습니다. AWS는 포괄적인 서비스로, 고객들은 다음과 같은 이점들을 누릴 수 있습니다.
- 간단함: 모든 클라우드 데이터를 한 곳에서 관리.
- 편리함: 필요한 모든 것을 구비하고 있음.
- 신뢰성: 우리의 솔루션을 믿고 맡길 수 있음.
- 사용의 편의성: 여러 클라우드 서비스를 사용하기 위한 교육을 받을 필요가 없음.
심플한 클라우드 운영을 위해 AWS에 올인하는 조직도 있지만, AWS가 워낙 방대한 클라우드 서비스를 제공하기 때문에 효율적인 기능 사용에는 한계가 있을 수 있습니다.
DevOps 도구를 사용하면, 이러한 올인원 전략을 취함과 동시에 기능적인 효율성 또한 만족시킬 수 있습니다. DevOps 팀은 개별적인 툴을 통합하고 관리하는 대신, GitLab 하나만 사용하여 단일 통합 환경에서 소프트웨어 개발 수명 주기 전체를 관리할 수 있습니다.
GitLab에서 AWS 사용하기
GitLab과 여타 다른 DevOps 애플리케이션들의 차이점은, 단일 인터페이스에서 소프트웨어 전체 개발 수명 주기를 관리할 수 있어 복잡한 툴 체인이 필요 없다는 것입니다. GitLab CI/CD를 사용하면 모든 AWS 서비스에 맞춤화된 배포가 가능합니다. 이 포스트에서는 GitLab과 AWS의 5가지 인기 서비스인 Lambda, Fargate, EKS, ECS 및 EC2가 어떻게 통합되는지 살펴봅니다.

GitLab + Lambda
CNCF(Cloud Native Computing Foundation)가 2019에 실시한 설문조사에 따르면 41%의 응답자가 서버 리스 기술을 사용하고 있습니다. 서버 리스를 사용하는 이용자 중 80%는 호스팅 플랫폼 서비스를, 나머지 20%는 설치형 소프트웨어를 사용하고 있습니다. 호스팅 서비스 이용자들이 뽑은 최고의 도구는 AWS Lambda(53%)입니다.
AWS Lambda는 가장 주목받는 서버 리스 애플리케이션 구축 서비스입니다. 서버 리스 애플리케이션 구현에는 다음과 같은 서비스가 필요합니다.
- 컴퓨팅 서비스
- 데이터베이스 서비스
- HTTP 게이트웨이 서비스
Lambda는 오픈소스 솔루션뿐만 아니라 다른 AWS 서비스와 통합이 가능한 AWS의 독자적인 서비스입니다. 오늘날 서버 리스 애플리케이션을 구축하는 대부분의 개발자는 Lambda 함수를 사용하고 있습니다.
서버 리스 채택을 위한 가장 큰 장애물은 도구의 선택과 워크플로우의 정립입니다. 조직은 서버 리스의 확장성과 자동화를 반기지만 효과적으로 구현할 수 있는 도구의 부재에 대해 걱정합니다. 복잡한 툴 체인 환경에서 일하고 있는 기업들은, 이미 복잡한 개발 스택에 또 다른 툴을 추가하는 것에 대해 주저하고 있습니다.
GitLab에서는 다음의 조합을 통해 AWS Lambda 함수를 배포할 수 있으며, 풍부한 서버 리스 애플리케이션의 개발이 가능합니다.
- AWS 서버 리스 프레임워크 (Serverless Framework)
- AWS 서버 리스 애플리케이션 모델 (SAM, Serverless Application Model)
- GitLab CI/CD
GitLab 사용자는 Serverless Framework/JS 템플릿에서 프로젝트를 생성 할 수 있습니다:



템플릿 불러오기가 완료되면, 샘플 프로젝트를 이용해서 시작할 수 있습니다.

다음 단계: 인증에 사용할 AWS IAM 계정을 생성합니다.

사용자에게 필요한 정책을 선택합니다.

과정을 완료하면 아래와 같은 결과에 대한 요약화면을 볼 수 있습니다.

다음 단계 : 아래와 같이 AWS_ACCESS_KEY
와 AWS_SECRET_ACCESS_KEY
를 CI/CD 변수로 프로젝트에 추가합니다.

프로젝트 샘플에는 .gitlab-ci.yml
파일이 포함되어 있습니다. 레포지토리 변경이나 파이프라인(Pipeline) 시작 시 아래와 같이 4개의 CI 작업(test
, production
, postdeploy_test
및 pages
) 이 실행됩니다.



production 작업이 완료되면 Lambda 엔드포인트 URL이 생성됩니다.

해당 URL로 GET 요청을 전송하면 다음과 같은 샘플 텍스트가 반환됩니다.

GitLab + SAM
AWS SAM(Serverless Application Model)은 AWS에서 서버 리스 애플리케이션을 구축하기 위한 최고의 오픈소스 프레임워크입니다. 이는 서버 리스 애플리케이션에서 일반적으로 사용되는 Lambda 함수, API 게이트웨이의 API 및 DynamoDB 테이블과 같이 AWS 리소스를 보다 쉽게 생성하고 배포할 수 있는 CloudFormation의 확장된 형태라고 볼 수 있습니다.
SAM은 템플릿 기능 외에도 테스트와 배포를 위한 CLI를 제공하지만, 일부 CLI 명령은 CloudFormation을 호출하기 위한 별칭(alias)입니다. 이 샘플 프로젝트에서는 SAM 애플리케이션을 구축하고 배포하기 위해 AWS CloudFormation CLI를 사용했습니다.
{{cookiecutter.project_name}}
폴더 안에 "AWS News"라는 샘플 SAM 애플리케이션이 포함되어 있지만, 레포지토리 최상단에 존재하는 .gitlab-ci.yml
파일을 모든 SAM 애플리케이션에서 사용하는 것도 가능합니다.
먼저 AWS SAM CLI를 설치합니다.

SAM init 명령어를 실행하여 hello-world 예제가 포함된 AWS SAM 프로젝트를 생성합니다.

gitlab-aws-sam-demo라는 프로젝트 폴더가 생성됩니다. 다음으로, 프로젝트를 빌드하고 배포하기 위해 .gitlab-ci.yml
파일을 생성합니다.

다음으로, git init 명령어를 실행하여 GitLab에 푸쉬합니다.

파이프라인 작업이 완료되면, 아래와 같이 서버 리스 엔드포인트의 URL이 출력됩니다.


curl을 사용하여 서비스 엔드포인트로부터 “Hello World”라는 메시지가 출력되는지 확인합니다.

추가적인 참고자료:
- serverless.yaml 설정
- 서버 리스 함수를 AWS Lambda에 배포하는 방법에 대한 문서화
- GitLab CI/CD를 이용해서 AWS Lamda 함수 배포하기
- AWS 서버 리스 애플리케이션 모델 (SAM, Serverless Application Model)
- 서버 리스 프레임워크 (Serverless Framework)
- CI/CD에 TriggerMesh KLR 사용하기