BLOG
비영리 단체는 예산이 빠듯하고 직원 수가 적은 영리 조직이 겪는 것과 비슷한 문제를 겪고 있습니다. 이 경우 AWS Lambda 솔루션을 사용하면 비영리 단체가 IT 인프라에 더 적은 돈과 시간을 투자하면서 핵심 임무에 집중할 수 있으며, 컴퓨팅 요구 사항을 더욱 강화할 수 있습니다. 이번 포스팅에서는 이처럼 AWS Lambda를 통해 IT 관리 부담을 줄이는 방법을 알아보고, 비영리 단체가 Amazon Web Services(AWS) 지출을 줄이는 데 도움을 준 Lambda 함수 예제를 함께 살펴보도록 하겠습니다.
Lambda란?
Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있는 컴퓨팅 서비스입니다. 사용자가 정의하는 한도 내에서 사용량에 따라 지속적으로 확장할 수 있으므로 Lambda 서비스 리소스를 관리하여 애플리케이션을 0명의 사용자에서 수천 명의 동시 사용자로까지 단숨에 확장할 수 있습니다. 이런 식으로 애플리케이션이 입소문을 타게 되면 Lambda가 자동으로 확장될 수 있으므로 잠재 사용자나 기부자를 계속 유지할 수 있습니다. AWS Lambda를 사용하면 코드가 호출될 때만 비용을 지불하고 비용은 호출 지속 시간에 따라 세분화되어 밀리초 단위까지 달라집니다. 따라서 초과 프로비저닝된 인프라에 대해 비용은 지불하지 않아도 되므로 제한된 IT 예산을 더 효율적으로 사용할 수 있습니다.
비영리 단체는 제한된 예산하에서 IT 비용에서 절약한 금액을 다른 업무에 더 투자할 수 있기 때문에 IT 비용을 최대한 활용하는 것이 중요합니다. Lambda에는 매월 100만 회의 무료 호출 또는 Lambda 함수 코드 실행 횟수를 제공하는 프리 티어가 있습니다. 여기에는 400,000GB-초 또는 Lambda 함수의 특정 메모리 구성에 맞게 조정된 함수 실행 시간, 월별 컴퓨팅 시간도 포함됩니다. 프리 티어를 사용하면 비영리 단체에서 Lambda를 시작하고 컴퓨팅 비용을 지불하지 않고도 상당한 워크로드를 실행할 수 있습니다. 또한, Lambda에서 도구나 서비스를 구축했지만 결국 사용하지 않으면 유휴 컴퓨팅에 대한 비용은 지불하지 않습니다.
Lambda의 비용은 사용량과 매우 밀접하게 관련되어 있습니다. 새로운 프로젝트나 이니셔티브가 그 가치를 입증할 때까지 많은 자금이 확보되지 않는 것은 매우 일반적입니다. Lambda를 사용하면 컴퓨팅의 초기 비용이 매우 낮을 수 있으므로 빠듯한 예산으로 프로젝트를 간단하게 시작할 수 있습니다. 그리고 Lambda에 구축한 새로운 도구가 대중화되거나 성공하면 Savings Plans 를 활용하여 비용을 더욱 최적화할 수 있습니다.
Lambda는 완전 관리형 서비스로 프로비저닝, 관리, 확장 또는 패치가 필요한 서버 없이 AWS가 알아서 관리해드립니다. 또한 서버리스이기 때문에 이 프로젝트를 위해 매일 얼마나 많은 서버를 실행해야 하는지 계획할 필요가 없이 한 번에 얼마나 많은 사람들이 이것을 사용해야 하는지에만 초점을 맞출 수 있습니다. 이는 추정이 훨씬 더 간단한 지표이며, 기능이 실제로 사용되는 경우에만 비용을 지불하면 됩니다.
Lambda 함수가 트리거되면 서비스가 격리된 환경의 컴퓨팅 하드웨어에 코드를 로드하고 코드를 실행한 다음, 함수가 다시 트리거되지 않는 한 회전을 줄입니다. 이를 통해 AWS는 애플리케이션의 컴퓨팅 구성 요소를 강화하기 위해 서버 패치 및 관리라는 차별화되지 않은 복잡한 작업을 수행할 수 있습니다. 이렇게 되면 비영리 단체는 그들의 제한된 예산과 시간을 더욱 필요한 작업에 쏟을 수 있습니다.
Streetlives.org의 설립자 Adam Bard는 ‘AWS 비영리 크레딧 프로그램의 AWS 프로모션 크레딧을 통해 예측 가능한 성장을 충족하기 위해 제품을 확장할 수 있다는 확신을 갖게 되었으며, 동시에 자금을 커뮤니티와 사용자에게 집중할 수 있게 되었다’ 고 말합니다. 또한, Lambda는 새로운 아이디어를 신속하게 시작하고 혁신의 속도를 높이는 것을 더 간단하게 만들어 줍니다. Lambda를 사용하면 코드를 작성하고 서비스에 업로드하고 즉시 실행할 수 있기 때문에 비영리 단체는 브레인스토밍 단계에서 미션 달성에 도움이 될 새로운 아이디어 또는 시스템의 프로토타입으로 빠르게 전환할 수 있습니다.
Lambda 함수 설정의 예
많은 비영리 단체들은 AWS 환경에서 컴퓨팅을 위해 Amazon Elastic Compute Cloud(Amazon EC2)를 사용하고 있습니다. 문제점은 프로덕션 인스턴스는 연중무휴로 실행해야 하지만 개발자 인스턴스는 업무 시간에만 실행하면 됨에도 불구하고 개발 서버를 계속 켜두어 불필요한 추가 비용이 발생한다는 점입니다. 이 경우 예약된 Lambda 함수를 사용하면 매일 정해진 시간에 개발 서버를 자동으로 종료할 수 있습니다. 또한, 이 같은 개발 서버는 필요할 때마다 수시로 백업이 가능합니다. 아래의 Launch Stack 버튼을 클릭하면 AWS CloudFormation을 사용하여 환경을 설정할 수 있습니다.
AWS CloudFormation 스택은 AWS 서버리스 애플리케이션 모델(AWS SAM) 템플릿을 사용하며, Lambda 함수, 2개의 AWS Identity and Access Management(IAM) 정책 및 IAM 역할과 같은 몇 가지 주요 구성 요소를 런칭합니다. IAM 정책은 기능이 제대로 실행되는 데 필요한 Amazon EC2 API 메서드에 액세스할 수 있는 권한을 부여합니다. Shutdown Instances라고 하는 AWS Lambda 함수에는 인라인으로 정의된 함수에 대한 python 스크립트가 있습니다. 함수가 트리거되면 함수의 핸들러는 다음을 수행합니다.
- 계정 및 리전에서 실행 중인 Amazon EC2 인스턴스 목록을 검색합니다.
- 목록을 반복하여 태그를 일치시키고 종료할 인스턴스 목록을 생성합니다.
- 목록을 반환합니다(DRY_RUN 환경 변수에 따라 종료를 실행하거나 실행하지 않음)
DRY_RUN 환경 변수를 사용하면 인스턴스를 종료하지 않고도 함수를 테스트할 수 있습니다. 테스트 실행 모드에서 기능을 전환하도록 환경 변수를 편집하여 AWS Lambda 콘솔에서 이를 true로 변경하면 됩니다. 또한, 여기에서 Amazon EC2 인스턴스에서 확인된 태그를 변경하여 종료해야 하는지 여부를 결정할 수 있습니다.
아래 그림 1을 참조하십시오.
그림 1. Amazon EC2 인스턴스의 태그에 해당하는 ShutDownStatus 인수를 포함한 Lambda 콘솔의 환경 변수
특정 Amazon EC2 인스턴스가 이 Lambda 함수에 의해 종료되는 것을 방지하려면 Amazon EC2 콘솔에서의 태그 이름 ShutDownStatus와 False 값을 사용하여 해당 인스턴스에 태그를 지정하면 됩니다.
그림 2를 참조하십시오.
그림 2. Lambda 함수에 의해 종료되지 않도록 ShutDownStatus 태그가 False로 설정된 Amazon EC2 인스턴스 Server의 태그 섹션입니다.
Lambda 함수는 정상 작동 시 EventBridge 예약 규칙에 따라 트리거됩니다. 이 기능은 실험하기 위한 안전 조치로 기본적으로 비활성화되어 있으나 Lambda 콘솔에서 활성화할 수 있습니다. 매일 오후 5:30(PDT)에 Lambda 함수를 트리거하며, ShutdownInstances 리소스의 이벤트에서 일정 속성(크론 식)을 변경하여 이를 편집할 수 있습니다.
다만, 일정에 맞춰 기다리면 테스트가 불편하므로 람다 콘솔에 내장된 테스트 기능을 사용하는 것이 좋습니다. Lambda 콘솔에서 테스트 이벤트를 생성하고 시뮬레이션된 데이터가 있는 함수에 JSON 페이로드를 전달할 수 있습니다. Lambda 함수는 종료할 인스턴스를 알기 위해 추가 데이터가 필요하지 않으므로 빈 JSON 문서를 전달할 수 있습니다. hello-world 템플릿을 사용하여 아래와 같은 테스트 이벤트를 생성할 수 있습니다.
그림 3을 참조하십시오.
그림 3. 함수를 호출하기 위한 예제 테스트 이벤트가 있는 Lambda 콘솔의 테스트 함수 패널
주황색 Test 버튼을 클릭하기 전에 계정에서 실행 중인 Amazon EC2 인스턴스를 볼 수 있습니다.
그림 4를 참조하십시오.
그림 4. 현재 실행 중인 Amazon EC2 인스턴스
이는 계정에서 실행되는 32개의 인스턴스이며, 맨 위에 Server라는 레이블이 지정된 하나의 인스턴스에만 ShutDownStatus: False태그가 있습니다. Test 버튼을 클릭하면 다른 31개의 인스턴스가 종료됩니다.
그림 5를 참조하십시오.
그림 5. 함수를 호출한 후에도 인스턴스가 중지되고 계속 실행 중입니다.
이제 Server 이외의 인스턴스가 Stopped 또는 Stopping임을 알 수 있으므로 더 이상 사용량에 대해 시간당 비용을 지불하지 않지만 필요할 때마다 다시 시작할 수 있습니다.
람다 시작하기
Lambda는 Python, Node.js, Java, Go 및 .Net과 같은 널리 사용되는 기존 프로그래밍 언어를 중심으로 설계되었기 때문에 시작하기 쉽습니다. 이 때문에 개발자는 Lambda의 이점을 계속 누리면서 친숙한 환경에서 작업할 수 있습니다.
이 포스팅의 예제는 Lambda의 프리 티어를 사용하여 수행할 수 있습니다. 워크로드가 프리 티어를 벗어나는 경우 사용한 만큼만 비용을 지불합니다. Lambda는 요청 수와 이러한 각 요청의 기간을 조합하여 요금을 부과합니다. 자세한 내용은 Lambda 요금 페이지를 참조하십시오. 더 자세한 내용은 AWS 비영리 단체 팀에 연락 하거나 비영리 단체 및 비정부 기구(NGO)를 위한 AWS에서 자세히 알아볼 수 있습니다.
Lambda에 대한 자세한 내용과 시작하는 방법에 대한 튜토리얼은 serverless Hello World tutorial를 확인하거나 AWS SAM를 확인해주세요!
메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글이나 관련 기사 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.