AWS Lambda는 서버리스 컴퓨팅 서비스입니다. OS 같은 인프라를 관리할 필요가 없으므로 사용자는 프로그램 코드를 준비하고 Lambda에 업로드만 하면 됩니다.
서버리스란?
서버리스(Serverless)는 클라우드 컴퓨팅 모델 중 하나로, 개발자가 서버 인프라를 직접 관리하지 않고 애플리케이션을 구축하고 실행할 수 있는 방식을 말합니다. 서버리스는 개발자가 코드를 작성하고 업로드하기만 하면, 클라우드 공급업체가 자동으로 인프라 관리와 확장성을 처리해줍니다.
Lambda란?
Lambda에 대해 좀 더 자세히 공부하기 위해 저번에 공부했던 클라우드 컴퓨팅의 서비스 모델에 대해 다시 공부해 보겠습니다. 클라우드 컴퓨팅의 서비스 모델에는 SaaS, PaaS, IaaS, FaaS 등이 있습니다. 저번에는 FaaS를 빼고 나머지를 공부했었는데 이번에 람다를 공부하면 FaaS에 대해 알게 되었습니다.
종류 | 설명 | 예시 |
SaaS (Software as a Service) | - 사용자에게 소프트웨어를 제공하는 서비스 모델입니다. - 사용자는 인터넷을 통해 애플리케이션을 사용하며, 관련 인프라나 플랫폼, 데이터 등은 클라우드 서비스 제공자가 관리합니다. |
Google Workspace(G Suite), Salesforce, Dropbox, Slack |
PaaS (Platform as a Service) | - 개발 플랫폼을 제공하는 서비스 모델입니다. - 개발자들이 애플리케이션을 빠르게 개발하고 배포할 수 있도록 필요한 환경(운영 체제, 데이터베이스, 웹 서버 등)을 클라우드에서 제공합니다. |
Google App Engine, Heroku, AWS Elastic Beanstalk |
IaaS (Infrastructure as a Service) | - 기본적인 컴퓨팅 자원(서버, 스토리지 등)을 제공하는 서비스 모델입니다. - 사용자는 가상화된 환경에서 자신의 운영 체제와 애플리케이션 등을 설치하고 운영할 수 있습니다. |
Amazon EC2(Elastic Compute Cloud), Google Compute Engine(GCE), Microsoft Azure Virtual Machines |
FaaS (Function as a Service) | - 이벤트에 응답하여 코드를 실행하는 서비스 모델입니다. - 개발자가 작성한 함수가 특정 이벤트 발생 시 자동으로 실행되며 필요한 만큼 스케일링됩니다. |
AWS Lambda, Google Cloud Functions |
Lambda는 PaaS이면서 FaaS인 것입니다. 더 정확하게 FaaS라고 할 수 있습니다.
장점
람다는 현재 이렇게 많은 언어를 지원하고 있습니다. 또 사용자 지정 런타임 기능도 사용 할 수 있어 더 많은 언어를 사용 가능합니다. 또한, 컨테이너 이미지 지원도 시작해서 사용자가 생성한 컨테이너 이미지를 람다에 배포할 수 있습니다.
런타임 기능이란?
AWS에서 기본적으로 제공하는 런타임(예: Python, Node.js, Java 등) 이외의 다른 프로그래밍 언어나 특정 버전의 런타임을 사용하고 싶을 때 이를 지원하기 위한 기능입니다
사용자 지정 런타임을 만들기 위해서는 "부트스트랩" 파일이라고 하는 실행 가능한 파일을 생성해야 합니다. 이 파일은 요청에 대한 처리 및 응답과 같은 Lambda 함수 생명주기 이벤트를 처리합니다. 부트스트랩 파일과 함께 필요한 종속성(dependencies)가 포함된 패키지를 생성하고, 그것을 Lambda에 업로드하여 사용자 지정 런타임으로 사용할 수 있습니다.
- 보안
- AWS에서 OS와 미들웨어 등의 기반 시스템을 모두 관리합니다.
- 장애와 보안 패치 등도 모두 AWS 소관 하에 이루어지므로 이용자는 Lambda로 사용할 코드만 관리하면 됩니다.
- 비용
- EC2는 사용하지 않아도 가동하고 있는 시간만큼 요금이 발생합니다.
- 하지만 Lambda에서는 코드가 실행될 때만 요금이 부과되므로 비용을 절감할 수 있습니다.
- 가용성
- AWS에는 물리적으로 독립된 여러 개의 가용 영역(AZ)가 있으며 Lambda는 복수의 가용 영역에서 실행된다.
- 처음 실행은 AZ-A에서, 두 번째는 AZ-C에서 실행될 수 있습니다.
- 사용자가 설정하지 않아도 고가용성, 장애 대응성이 유지됩니다.
- 확장성
- Lambda는 동시에 다수의 처리를 해야 하는 경우 자동으로 AWS가 관리하는 처리용 인스턴스가 시작되면서 확장됩니다.
- 서울 리전일 경우 동시 실행 수는 최대 1000개이며 별도의 확장 신청을 통해 동시 실행 수를 늘리는 것도 가능합니다.
AWS Lambda 다른 서비스와 연계해 사용하기
람다는 다른 AWS 서비스와 연계해 사용자 접속이나 데이터 연동과 같은 처리를 자동으로 수행할 수 있습니다.
사용자 요청에 따라 Lambda 함수 실행
Amazon API Gateway 서비스와 Lambda를 결합해 사용자의 HTTP 요청을 Lambda 함수로 처리할 수 있습니다.
- API Gateway는 사용자로부터 HTTP 요청을 받으면 GET과 같은 HTTP 메서드나 /api 등의 요청 경로에 대한 정보가 포함된 JSON 데이터를 Lambda 함수에 전달합니다.
- Lamda 함수에서 응답 내용을 반환하도록 코드를 작성하면 API Gateway를 통해 응답을 반환합니다.
- 웹 브라우저라면 웹 브라우저 화면에 응답 데이터가 표시됩니다.
S3에 데이터를 저장할 때 자동 처리
Amazon S3 버킷에 데이터가 저장되면 저장된 데이터를 Lambda로 자동 처리할 수 있습니다.
저번 프로젝트를 할 때 S3로 들어오는 사진 크기를 조절해야 했습니다. 이 때 Lambda를 사용할 수 있습니다. 원본을 S3에 저장하고 크기를 조절한 사진을 다른 S3 버킷에 저장을 하면 됩니다.
위의 그림처럼 CloudWatch log에 S3에 저장된 것을 log도 찍어 볼 수 있습니다.
주기적으로 Lambda 함수 실행
매일 정해진 시간에 주기적으로 어떤 함수를 실행하고 싶을 때도 Lambda를 사용할 수 있습니다. Lambda와 함께 Amazon EventBridge라는 서비스와 연계하면 됩니다.
- EventBridge에 규칙이라는 형태로 매일 실행할 내용을 정의합니다.
- 실행 대상에 Lambda 함수를 지정하면 주기적인 실행이 가능합니다.
AWS Lambda 추가 설정 및 모니터링
위에서 말했듯이 Lambda의 실행 환경은 일반적으로 AWS 측에서 관리하므로 사용자는 서버에 대한 생각을 안해도 됩니다. 하지만 변경할 수 있는 설정이 있습니다.
- 메모리 용량
- 함수 실행 시 사용할 수 있는 메모리 용량을 지정합니다.
- 기본값 최솟값인 128MB이며 최대 10240MB 까지 지정할 수 있습니다.
- CPU값은 지정할 수 없으며 지정된 메모리 용량에 비례해 설정됩니다.
- 타임아웃 시간
- 함수가 실행되는 최대 시간이다.
- 지정한 시간이 지나도 실행되고 있는 경우 정지됩니다.
- 기본 값은 3초이며 1 ~ 900초 사이로 지정할 수 있습니다.
- 환경 변수
- 환경 변수는 함수에 사용하는 외부 변수와 같은 개념입니다.
- 예를 들어 개발 환경과 서비스 환경이 서로 다른 데이터베이스를 사용해야 하는 경우, 환경 변수에 데이터베이스 접속 정보를 저장해두면 동일한 코드를 사용해도 서로 다른 데이터베이스를 이용할 수 있습니다.
- RDS의 앤드포인트 같은 환경변수
IAM(Identity and Access Management) 지정
S3를 구축할 때 에도 IAM 지정은 필수적입니다. 왜냐하면 다른 서비스에 대한 조작 권한을 부여해야하기 때문입니다.
Lambda도 마찬가지입니다. Lambda에도 IAM을 지정해야 합니다.
Lambda를 이용해 S3에 데이터를 저장하는 처리를 해야 하는 경우 S3의 PutObject 권한을 가지는 IAM 역할을 만들어야 합니다.
IAM을 지정하지 않고 Lambda를 구축했으면 default 값으로 Amazon CloudWatch라는 감시 서비스로 로그를 보낼 수 있는 권한만 부여됩니다.
출처
https://product.kyobobook.co.kr/detail/S000200882352
'클라우드&인프라 > AWS 구조와 서비스' 카테고리의 다른 글
Amazon S3에 대해 (1) (1) | 2023.10.12 |
---|---|
컨테이너의 구조와 특성 (1) | 2023.10.10 |
Amazon EC2 Auto Scaling (0) | 2023.09.20 |
EC2인스턴스와 요금 (1) | 2023.09.16 |
AWS 리전에 대한 이해 (0) | 2023.09.15 |