BLOG
서버리스 개발자의 사고 방식은 미니멀리스트라고 할 수 있습니다. 차별화되지 않은 서비스를 많이 사용하기보단 가능한 한 서비스를 활용하여 제품을 차별화하고 고객에게 가치를 제공하기 위해 집중하려 하기 때문입니다. 같은 맥락에서 여러분들 또한 자체 개발한 것(빌드) 보단 검증된 오픈소스 툴을 활용하기 원하실 겁니다.
이번 테크블로그 포스팅으로는 1부, 2부로 나누어 툴 박스에 추가해 볼만한 오픈소스 툴 을 다루어 보겠습니다. 이 툴에는 프레임 워크 배포, CLI, 라이브러리 및 AWS Serverless서버리스 애플리케이션 리포지토 Application Repository 애플리케이션이 포함됩니다.
1부에서는 배포 프레임워크에 대해 알아보고 Serverless Framework 와 AWS SAM(AWS Serverless Application Model)에서 가장 널리 사용되는 2가지 프레임워크의 주요 차이점을 설명해 드리겠습니다. 또한 Serverless Framework의 최상위 플러그인을 살펴본 후 여러분들에게 도움이 될만한 두 가지 CLI 툴을 추천해 드리겠습니다.
2부에서는 AWS Lambda 함수 작성을 위한 인기 라이브러리를 살펴보겠습니다. 모든 언어 런타임에 이러한 라이브러리를 다루는 것은 불가능하므로 Node.js에만 중점을 두도록 하겠습니다. 마지막으로 여러 가지 잔업을 처리할 수 있는 유용한 AWS Serverless Application Repository 앱을 살펴보겠습니다.
배포 프레임 워크
서버리스 애플리케이션을 개발할 때 툴 박스에서 가장 중요한 툴은 배포 프레임 워크입니다. 서버리스 프레임 워크 , AWS SAM , AWS CDK(AWS Cloud Development Kit), Terraform , Claudia.js , Zappa , Up , Architect 등 다양한 오픈소스 대안을 사용할 수 있습니다 .
이전 AWS는 “AWS Lambda 배포 프레임 워크 비교” 라는 블로그 글을 통해 이러한 프레임 워크 중 일부를 비교해 보았습니다. 하지만 여러 개의 스크립트를 짜서 쓰는 번거로운 잔업 대신 서버리스 기술을 통해 하나를 사용한다면 이러한 프레임워크는 큰 상관이 없을 것 같습니다.
이러한 툴을 사용하여 프로비저닝을 자동화하기 전에 AWS에서 리소스를 프로비저닝하는 방법을 이해해야 합니다. 예를 들어 Serverless Framework 또는 AWS SAM 을 사용하는 경우 AWS CloudFormation의 작동 방식과 프레임워크의 기능을 이해해야 합니다. 툴이 작동하는 방식을 이해하지 않고 툴에 의존하게 되면 문제가 발생했을 때 이를 해결하는 방법을 모르기 때문에 위험합니다.
확실한 이해 없이 자동화해서는 안 됩니다.
즉, 일단 기본 메커니즘과 작업 방식을 파악한 후에는 작업을 자동화하여 생산성을 높일 수 있는 툴을 찾아야 합니다.
저는 서버리스 프레임워크를 좋아하는데, 이는 기본 설정과 생산적인 추상화를 제공하기 때문입니다. 뿐만 아니라 프레임워크의 기능을 확장하고 플러그인을 통한 결정에 동의하지 않는 옵션도 제공합니다. 이 기능은 Serverless Framework가 AWS SAM 및 기타 다른 유사한 프레임 워크보다 뛰어난 차별점입니다. SAM을 사용할 때는 생성된 AWS CloudFormation 템플릿에서 설정 하나를 변경하기 위해 AWS CloudFormation 매크로를 생성해야 했습니다. 이 사용 후기에 대한 내용은 이전에 “AWS SAM + Cloudformation macros, a patch made in heaven”라는 글로 소개한 적이 있습니다.
서버리스 프레임워크 플러그인
서버리스 프레임워크를 위한 다양한 community-driven plugins 이 있습니다. 제(원문의 저자: Ricardo Sueiras)가 애용하는 몇 가지를 보여드리겠습니다.
serverless-iam-roles-per-function
최상의 보안을 위해서는 최소 권한 원칙을 따르고 각 기능에 대한 전용 IAM 역할을 생성해야 합니다. 이러한 역할은 가능한 최소한의 권한을 부여해야 합니다.
SAM을 사용하면 기능별 IAM 역할을 쉽게 구성할 수 있지만, Serverless Framework의 기본 동작은 공유 IAM 역할 사용입니다. 기능별 IAM을 위한 기본 제공 메커니즘을 사용하려면 serverless.yml에서 기능별 역할을 사용자 지정 AWS CloudFormation 리소스로 생성해야 합니다. 이는 공유 역할을 생성하는 구문보다 훨씬 더 장황합니다.
다행히도, 이 상황에서 사용할 수 있는 serverless-iam-roles-per-function 가 있습니다. the GitHub repo for an example screenshot 을 방문하셔서 함수레벨에 따른 iamRoleStatements 함수를 확인하십시오.
serverless-webpack
Node.js 함수의 경우 번들링은 cold start time을 줄이고 배치 아티팩트의 크기를 줄이는 데 유용합니다. serverless-webpack플러그인은 sls deploy을 실행할 때마다 기능들을 번들링할 수 있습니다.
serverless-offline
serverless-offline 플러그인은 프로젝트 폴더에서 sls offline 실행을 함으로써 로컬 버전 Amazon API Gateway 을 실행할 수 있게 합니다. 이것이 기본적으로 sam local start-api명령을 통해 제공하는 AWS SAM입니다. list of usage and command-line options을 보시려면 GitHub 저장소를 방문하세요.
sls invoke local를 사용해 Lambda 함수를 로컬에서 실행하고 JSON 출력을 검사하는 것이 더 쉽기 때문에 저는 이를 직접 필요로 하지는 않습니다. 또한 디버그 첨부와 디버그 단계를 통해 문제를 보다 쉽게 디버깅할 수 있습니다. 그러나 이 플러그인은 브라우저를 로컬 엔드 포인트를 가리키고 반환된 HTML이 브라우저에서 렌더링되는 방식을 볼 수 있으므로 서버 측 렌더링을 해야 할 때 유용합니다.
serverless-domain-manager
serverless-domain-manager 플러그인을 사용하면 API의 사용자 지정 도메인 이름을 쉽게 구성할 수 있으며 플러그인은 사용자를 위해 Route53 레코드 집합도 만들 수 있습니다.
serverless-step-functions
serverless-step-functions 플러그인을 통해 serverless.yml의 일환으로 YML에 상태 머신을 정의합니다.
해당 플러그인은 다음과 같은 다양한 부가 기능이 있습니다.
- API Gateway, Amazon EventBridge / Amazon CloudWatch Events 및 예약된 트리거를 구성합니다.
- 실행 시간 초과 / 실패 / 중지 / 중지 시 CloudWatch 경보를 구성합니다.
- CloudWatch Events를 통해 Amazon SNS(Amazon Simple Notification Service), Amazon SQS(Simple Queue Service), Amazon Kinesis 등에 성공 및 실패 응답을 제공하도록 알림을 구성합니다.
- 배포하기 전에 스키마 유효성 검사를 수행합니다.
- blue-green deployment를 수행합니다.
이 플로그인은 또한 새로운 Express Workflows를 지원합니다.
serverless-finch
serverless-finch 플러그인은 S3로 정적 웹 사이트를 호스팅 하도록 합니다. 정적 사이트의 내용을 배포 폴더에 넣고 S3 버킷 이름을 지정한 다음 sls client deploy를 실행하십시오.
CLI
제가 매일 사용하는 두 가지 CLI 툴에 대해 설명해드리겠습니다.
org-formation
이 툴은 제가 사용한 도구 중 가장 유용한 오픈소스 도구입니다. Org-formation은 IAC (Infrastructure-as-Code)를 사용하여 전체 AWS organization 을 관리할 수 있는 CLI 툴입니다. AWS CloudFormation과 유사한 구문을 사용하며 다음을 포함하여 50가지 이상의 기능이 있습니다.
- 코드로 새 AWS 계정을 생성합니다.
- AWS OU (조직 구성 단위)를 생성하고 계정을 추가합니다.
- SCP (서비스 제어 정책) 정의, 교차 계정 AWS CloudTrail 구성 수집 등을 정의합니다.
- 기존 AWS Organization이 있는 경우 org-formation init템플릿으로 가져와서 앞으로 조직 구성으로 관리를 시작할 수 있습니다.
- org-formation update-stacks을 사용하여 멀티계정과 리전 CloudFormation 템플릿에 적용할 수 있습니다.
- AWS Organization 수준에서 **! Ref **, **! GetAtt ** 및 **! Sub **와 같은 의사 기능을 사용하고 계정, 리전 및 조직 단위를 참조할 수 있습니다.
- 이 org-formation init-pipeline명령을 사용하여 AWS CodeCommit 및 AWS CodePipeline 으로 CI / CD 파이프 라인을 부트스트랩 하여 AWS 조직에 업데이트를 자동으로 배포할 수 있습니다.
lumigo-cli
lumigo-CLI는 AWS 작업에 크게 도움이 되는 만능 명령입니다. Lambda를 많이 사용하는 경우 특히 유용한 몇 가지 명령이 있습니다.
예를 들어, lumigo-cli list-lambda를 사용해 모든 지역의 기능을 나열할 수 있습니다. 계정에 있는 내용에 대한 전체적인 개요를 제공하며 비활성 기능 (즉, 30일 이상 호출되지 않은 기능)을 신속하게 식별할 수 있습니다.
이 analyze-lambda-cold-starts명령은 프로비저닝 된 동시성 사용률을 포함한 모든 리전의 함수의 콜드 스타트 성능을 분석합니다. 이를 통해 콜드 스타트 성능을 향상시키거나 프로비저닝 된 동시성을 활성화하는 기능을 식별할 수 있습니다.
함수에 가장 적합한 메모리 설정을 찾는 데 데이터 중심 접근 방식을 적용하려면 powertune-lambda명령을 사용하여 성능, 비용을 위한 명령이나 이 둘의 균형에 대한 최상의 설정을 찾으세요.
SNS, SQS, Amazon DynamoDB 또는 Kinesis 스트림과 함께 Lambda를 사용하는 경우 함수가 트리거되는 이벤트를 확인하는 것이 때로는 어려울 수 있습니다. 다음 명령을 사용하면 이러한 이벤트 소스를 조정하고 실제로 진행 중인 작업을 확인할 수 있습니다.
- lumigo-cli tail-cloudwatch-events-bus
- lumigo-cli tail-cloudwatch-events-rule
- lumigo-cli tail-dynamodb
- lumigo-cli tail-eventbridge-bus
- lumigo-cli tail-eventbridge-rule
- lumigo-cli tail-kinesis
- lumigo-cli tail-sns
- lumigo-cli tail-sqs
많은 다른 계정이나 프로필로 작업하는 경우 whoami 및 switch-profile명령이 도움이 유용하게 사용될 수 있습니다. 현재 사용 중인 프로필을 식별하고 다른 프로필로 빠르게 전환할 수 있습니다.
거의 모든 사용자를 위한 20개가 넘는 명령이 있습니다.
요약
여기까지가 1부입니다. 오늘 설명해 드린 오픈소스 툴과 툴을 찾을 수 있는 위치는 다음과 같습니다.
배포 프레임워크
서버리스 프레임워크 플러그인
- serverless-iam-roles-per-function
- serverless-webpack
- serverless-offline
- serverless-domain-manager
- serverless-step-functions
- serverless-finch
CLI
오픈소스 툴은 커뮤니티를 통해 더욱 발전될 수 있습니다. 툴이 도움이 되었다면 GitHub에 점수와 의견을 남겨주십시오.
차주 월요일 게재될 블로그 글에서는 Node.js에서 AWS Lambda 함수를 작성하기 위해 널리 사용되는 라이브러리를 살펴보고 유용한 AWS Serverless Application Repository 앱을 알아보겠습니다.
저자 소개
Ricardo Sueiras
AWS의 클라우드 에반젤리스트로 오픈 소스로 차세대 건설자 및 발명가에게 영감을 줄 수 있도록 돕고 있습니다.
원문URL: https://aws.amazon.com/ko/blogs/opensource/24-open-source-tools-for-the-serverless-developer-part-1/
** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.