본문 바로가기

AWS

AWS Lambda

 

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