AWS Lambda
AWS Lambda
- 서버를 프로비저닝 하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다.
- 필요 시에만 코드를 실행하며, 하루에 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 확장이 가능합니다.
- 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.
- Lambda에서는 사실상 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행할 수 있습니다.
- Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버 및 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 코드 모니터링 및 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다.
- Lambda가 지원하는 언어 중 하나로 코드를 공급하기만 하면 됩니다.
사용 사례
- Lambda를 사용하여 Amazon Simple Storage Service(Amazon S3) 버킷 또는 Amazon DynamoDB 테이블의 데이터 변경과 같은 이벤트에 대한 응답으로 코드를 실행할 수 있습니다.
- Amazon API Gateway를 사용하여 HTTP 요청에 대한 응답으로 코드를 실행할 수도 있으며, 또는 AWS SDK를 사용하여 만든 API 호출을 통해 코드를 호출할 수 있습니다.
- 이러한 기능을 제공하므로 Lambda를 사용하여 Amazon S3 및 DynamoDB와 같은 AWS 서비스에 대한 데이터 처리 트리거를 빌드하거나, Amazon Kinesis에 저장된 스트리밍 데이터를 처리하거나 AWS 규모, 성능, 보안에 따라 작동하는 자체 백엔드를 생성할 수 있습니다.
구성 요소
Function
- 함수는 Lambda에서 코드를 실행하기 위해 호출할 수 있는 리소스입니다.
- 함수에는 사용자가 함수에 전달하거나 다른 AWS 서비스가 함수에 보내는 이벤트를 처리하는 코드가 있습니다.
Qualifier
- 함수를 호출하거나 조회할 때 버전 또는 별칭을 지정하는 한정자를 포함할 수 있습니다.
- 버전은 숫자 한정자가 있는 함수 코드 및 구성의 변경 불가능한 스냅샷입니다.
- 예: my-function:1. 별칭은 다른 버전에 매핑하거나 두 버전 간에 트래픽을 분할하도록 업데이트할 수 있는 버전에 대한 포인터입니다.
실행 환경
- 실행 환경은 Lambda 함수를 위한 안전하고 격리된 런타임 환경을 제공합니다.
- 실행 환경은 함수를 실행하는 데 필요한 프로세스와 리소스를 관리합니다.
- 실행 환경은 함수 및 함수와 관련된 모든 익스텐션에 대한 수명 주기 지원을 제공합니다.
- 배포 패키지를 사용하여 Lambda 함수 코드를 배포합니다. Lambda에서는 두 가지 유형의 배포 패키지를 지원합니다.
- 함수 코드와 해당 종속 항목을 포함하는 .zip 파일 아카이브. Lambda는 함수에 대한 운영 체제 및 런타임을 제공합니다.
- Open Container Initiative(OCI) 사양과 호환되는 컨테이너 이미지. 함수 코드와 종속 항목을 이미지에 추가합니다. 운영 체제와 Lambda 런타임도 포함해야 합니다.
계층
- Lambda 계층은 라이브러리, 사용자 지정 런타임 또는 기타 종속 항목을 포함하는 .zip 파일 아카이브입니다.
- 계층을 사용하여 종속 항목을 여러 함수에 분산할 수 있습니다.
- 컨테이너 이미지에는 계층을 사용하지 않습니다. 대신 이미지를 빌드할 때 기본 설정 런타임, 라이브러리 및 기타 종속 항목을 컨테이너 이미지로 패키징합니다.
Runtime
- 런타임은 실행 환경에서 실행되는 언어별 환경을 제공합니다.
- 런타임은 Lambda와 함수 간의 호출 이벤트, 컨텍스트 정보 및 응답을 전달합니다.
- Lambda에서 제공하는 런타임을 사용하거나 나만의 런타임을 빌드할 수 있습니다.
- 코드를 .zip 파일 아카이브로 패키징하는 경우 프로그래밍 언어와 일치하는 런타임을 사용하도록 함수를 구성해야 합니다.
- 컨테이너 이미지의 경우 이미지를 빌드할 때 런타임을 포함합니다.
확장
- Lambda 익스텐션을 사용하여 함수를 보강할 수 있습니다.
- AWS Lambda 파트너가 제공하는 다양한 도구 중에서 선택하거나 고유한 Lambda 익스텐션을 생성할 수 있습니다.
- 내부 익스텐션은 런타임 프로세스에서 실행되며 런타임과 동일한 수명 주기를 공유합니다.
- 외부 익스텐션은 실행 환경에서 별도의 프로세스로 실행됩니다. 외부 익스텐션은 함수가 호출되기 전에 초기화되고 함수의 런타임과 동시에 실행되며 함수 호출이 완료된 후에도 계속 실행됩니다.
Event
- 이벤트는 Lambda 함수가 처리할 데이터가 포함된 JSON 형식 문서입니다.
- 런타임은 이벤트를 객체로 변환한 후 함수 코드에 전달합니다.
- 함수를 호출할 때, 이벤트의 구조와 내용을 결정합니다.
동시성
- 동시성은 특정 시각에 함수가 제공하는 요청의 수입니다.
- 함수가 호출되면 이벤트를 처리하도록 Lambda가 인스턴스를 프로비저닝합니다.
- 함수 코드가 실행을 마치면, 다른 요청을 처리할 수 있습니다.
- 요청이 처리되는 동안 함수가 다시 호출되면, 다른 인스턴스가 프로비저닝되어 함수의 동시성이 증가합니다.
- 동시성에는 AWS 리전 수준의 할당량이 적용됩니다. 동시성을 제한하거나 특정 수준의 동시성에 도달할 수 있도록 개별 함수를 구성할 수 있습니다.
Trigger
- 트리거는 Lambda 함수를 호출하는 리소스 또는 구성입니다. 여기에는 함수를 호출하도록 구성할 수 있는 AWS 서비스, 개발하는 애플리케이션 및 이벤트 소스 매핑이 포함됩니다.
- 이벤트 소스 매핑은 스트림 또는 대기열에서 항목을 읽고 함수를 호출하는 Lambda의 리소스입니다.
기능
프로그래밍 모델
- 함수 구성에서 핸들러를 정의함으로써 런타임에게 어떤 메서드를 실행할지 알려주면 런타임은 그 메서드를 실행합니다.
- 런타임은 호출 이벤트와 컨텍스트(예: 함수 이름, 요청 ID)를 포함하는 핸들러로 객체를 전달합니다.
- 핸들러가 첫 번째 이벤트 처리를 완료하면 런타임이 다른 이벤트를 보냅니다. 함수의 클래스가 메모리에 유지되므로, 초기화 - 코드에서 핸들러 메서드 외부에서 선언된 클라이언트 및 변수를 재사용할 수 있습니다.
- 후속 이벤트에 대한 처리 시간을 절약하려면 초기화 중에 AWS SDK 클라이언트와 같은 재사용 가능한 리소스를 생성합니다. - 초기화된 후에는 함수의 각 인스턴스가 수천 개의 요청을 처리할 수 있습니다.
- 런타임은 함수에서 로깅 출력을 캡처하여 Amazon CloudWatch Logs로 전송합니다.
- 런타임은 함수의 출력을 로깅하는 것 외에도 호출이 시작되고 끝날 때 항목을 로깅합니다. 함수에서 오류가 발생하는 경우, 런타임은 해당 오류를 호출자에게 반환합니다.
- Lambda은 수요가 증가하면 추가 인스턴스를 실행하고 수요가 감소하면 인스턴스를 중지하여 함수 규모를 조정합니다.
달리 지정되지 않는 한, 수신 요청은 비순차적으로, 또는 동시에 처리될 수 있습니다.
확장
- Lambda은 코드를 실행하는 인프라를 관리하고 수신 요청에 대한 응답으로 자동 확장됩니다.
- 함수 인스턴스 하나의 이벤트 처리 속도보다 빠르게 함수를 호출하는 경우 Lambda은 추가 인스턴스를 실행하여 규모를 확장합니다.
- 트래픽이 감소하면 비활성 인스턴스가 고정되거나 중지됩니다. 함수가 이벤트를 초기화하거나 처리하는 시간에 대해서만 비용을 지불합니다.
동시성 제어
- 동시성 설정을 사용하여 프로덕션 애플리케이션이 높은 가용성과 높은 응답성을 유지하도록 보장합니다.
- 함수가 너무 많은 동시성을 사용하지 못하게 하고 계정의 사용 가능한 동시성 중 일부를 함수에 예약하려면 예약된 동시성을 사용합니다.
- 예약된 동시성은 사용 가능한 동시성 풀을 하위 집합으로 분할합니다. 예약된 동시성이 있는 함수는 전용 풀에서의 동시성 만 사용합니다.
- 지연 시간 변동 없이 함수를 확장할 수 있도록 하려면 프로비저닝된 동시성을 사용합니다.
- 초기화하는 데 오랜 시간이 걸리거나 모든 호출에 대해 지연 시간이 매우 짧은 함수의 경우 프로비저닝 된 동시성을 사용하면 - 함수의 인스턴스를 사전 초기화하고 항상 실행 상태를 유지할 수 있습니다.
- Lambda는 Application Auto Scaling과 통합되어 사용률을 기반으로 프로비저닝된 동시성에 대한 autoscaling을 지원합니다.
비동기식 호출
- 함수를 호출할 때 동기식으로 호출할 것인지 비동기식으로 호출할 것인지 선택할 수 있습니다.
- 동기식 호출의 경우 함수가 이벤트를 처리하여 응답을 반환하기를 기다립니다.
- 비동기식 호출의 경우, Lambda는 처리를 위해 이벤트를 대기열에 저장하고 즉시 응답을 반환합니다.
- 비동기식 호출에서는 함수가 오류를 반환하거나 병목 중인 경우 Lambda이 재시도를 처리합니다.
- 이 동작을 사용자 지정하기 위해 함수, 버전 또는 별칭에 대한 오류 처리 설정을 구성할 수 있습니다.
- 처리에 실패한 이벤트를 배달 못한 편지 대기열로 보내거나, 호출 레코드를 대상에 보내도록 Lambda를 구성할 수도 있습니다.
이벤트 소스 매핑
- 스트림 또는 대기열에서 항목을 처리하려면 이벤트 소스 매핑을 생성하면 됩니다.
- 이벤트 소스 매핑은 Amazon Simple Queue Service(Amazon SQS) 대기열, Amazon Kinesis 스트림 또는 Amazon DynamoDB 스트림에서 항목을 읽어 배치로 함수에 전송하는 Lambda 내 리소스입니다.
- 함수가 처리하는 각 이벤트에는 수백 또는 수천 개의 항목이 포함될 수 있습니다.
- 이벤트 소스 매핑은 처리되지 않은 항목의 로컬 대기열을 유지 관리하고, 함수가 오류를 반환하거나 병목 중인 경우 재시도를 처리합니다.
- 배치 처리 동작 및 오류 처리를 사용자 정의하거나 처리에 실패한 항목의 레코드를 대상으로 보내도록 이벤트 소스 매핑을 구성할 수 있습니다.
대상
- 대상은 함수에 대한 호출 레코드를 수신하는 AWS 리소스입니다.
- 비동기 호출의 경우, 호출 레코드를 대기열, 주제, 함수 또는 이벤트 버스에 보내도록 Lambda를 구성할 수 있습니다.
- 성공적인 호출과 처리에 실패한 이벤트에 대해 별도의 대상을 구성할 수 있습니다.
- 호출 레코드에는 이벤트, 함수의 응답 및 레코드가 전송된 이유에 대한 세부 정보가 포함되어 있습니다.
- 스트림에서 읽기를 수행하는 이벤트 소스 매핑의 경우, 처리에 실패한 배치 레코드를 대기열이나 주제로 보내도록 Lambda를 구성할 수 있습니다.
- 이벤트 소스 매핑에 대한 실패 레코드에는 배치에 대한 메타데이터가 포함되어 있으며 스트림의 항목을 가리킵니다.
함수 블루프린트
- Lambda 콘솔에서 함수를 생성할 때 선택에 따라 처음부터 시작하거나, 블루프린트를 사용하거나, 컨테이너 이미지를 사용하거나, AWS Serverless Application Repository에서 애플리케이션을 배포할 수 있습니다.
- 블루프린트는 Lambda를 AWS 서비스 또는 인기 있는 타사 애플리케이션과 함께 사용하는 방법을 보여주는 샘플 코드를 제공합니다.
테스트 및 배포 도구
- Lambda는 코드를 있는 그대로 또는 컨테이너 이미지로 배포하는 것을 지원합니다.
- AWS 및 Docker 명령줄 인터페이스(CLI)와 같은 널리 사용되는 커뮤니티 도구를 사용하여 Lambda 함수를 작성, 빌드 및 배포할 수 있는 풍부한 도구 생태계를 사용할 수 있습니다.
애플리케이션 템플릿
- Lambda 콘솔을 사용하여 지속적 전달 파이프라인에서 애플리케이션을 생성할 수 있습니다.
- Lambda 콘솔의 애플리케이션 템플릿에는 하나 이상의 함수에 대한 코드, 함수를 정의하고 AWS 리소스를 지원하는 애플리케이션 템플릿, AWS CodePipeline 파이프라인을 정의하는 인프라 템플릿이 포함되어 있습니다.
- 파이프라인에는 포함된 Git 리포지토리에 변경 사항을 푸시할 때마다 실행되는 빌드 및 배포 단계가 있습니다.
'AWS' 카테고리의 다른 글
RDS에서 DDB로 Data Insert (0) | 2021.04.12 |
---|---|
AWS Command Line Interface (AWS CLI) (0) | 2021.04.12 |
Boto3 (AWS SDK for Python) (0) | 2021.04.12 |
Amazon Athena (0) | 2021.04.12 |
Amazon Simple Notification Service (Amazon SNS) (0) | 2021.04.12 |