AWS Lambda 기능 - AWS Lambda

AWS Lambda 기능

AWS Lambda은 함수 관리 및 호출을 위한 관리 콘솔 및 API를 제공합니다. 표준 기능 세트를 지원하는 런타임을 제공하므로 필요에 따라 언어와 프레임워크 간에 손쉽게 전환할 수 있습니다. 함수 외에 버전, 별칭, 계층 및 사용자 지정 런타임을 생성할 수도 있습니다.

프로그래밍 모델

작성 관련 세부 사항은 런타임마다 다르지만, 모든 런타임은 코드와 런타임 코드 사이의 인터페이스를 정의하는 일반적인 프로그래밍 모델을 공유합니다. 함수 구성에서 핸들러를 정의함으로써 런타임에게 어떤 메서드를 실행할지 알려주면 런타임은 그 메서드를 실행합니다. 런타임은 호출 이벤트컨텍스트(예: 함수 이름, 요청 ID)를 포함하는 핸들러로 객체를 전달합니다.

핸들러가 첫 번째 이벤트 처리를 완료하면 런타임이 다른 이벤트를 보냅니다. 함수의 클래스가 메모리에 유지되므로, 초기화 코드에서 핸들러 메서드 외부에서 선언된 클라이언트 및 변수를 재사용할 수 있습니다. 후속 이벤트에 대한 처리 시간을 절약하려면 초기화 중에 AWS SDK 클라이언트와 같은 재사용 가능한 리소스를 생성합니다. 초기화된 후에는 함수의 각 인스턴스가 수천 개의 요청을 처리할 수 있습니다.

초기화는 함수 인스턴스에 의해 처리되는 첫 번째 호출의 소요 시간에 포함되어 요금이 청구됩니다. X-Ray 추적이 활성화된 경우 런타임이 초기화와 실행에 대해 별도의 하위 세그먼트를 기록합니다.


        초기화와 호출 하위 세그먼트가 있는 X-Ray 추적.

함수는 /tmp 디렉터리의 로컬 스토리지에도 액세스할 수 있습니다. 요청을 처리 중인 함수의 인스턴스는 재활용되기 전에 몇 시간 동안 활성 상태로 유지됩니다.

런타임은 함수에서 로깅 출력을 캡처하여 Amazon CloudWatch Logs로 전송합니다. 런타임은 함수의 출력을 로깅하는 것 외에도 실행이 시작되고 끝날 때 항목을 로깅합니다. 여기에는 요청 ID, 요금이 청구되는 소요 시간, 초기화 소요 시간 및 기타 세부 정보가 들어 있는 보고서 로그가 포함됩니다. 함수에서 오류가 발생하는 경우, 런타임은 해당 오류를 호출자에게 반환합니다.

참고

로깅에는 CloudWatch Logs 제한이 적용됩니다. 로그 데이터는 조절로 인해, 또는 경우에 따라 함수의 인스턴스가 중지될 때 손실될 수 있습니다.

다음 장에서는 선호하는 프로그래밍 언어의 프로그래밍 모델을 실습 과정을 겸하여 소개합니다.

Lambda은 수요가 증가하면 추가 인스턴스를 실행하고 수요가 감소하면 인스턴스를 중지하여 함수 규모를 조정합니다. 달리 지정되지 않는 한, 수신 요청은 비순차적으로, 또는 동시에 처리될 수 있습니다. 애플리케이션의 상태를 다른 서비스에 저장하고 오래 지속되는 함수의 인스턴스를 사용하지 마십시오. 로컬 스토리지 및 클래스 수준 객체를 사용하여 성능을 강화할 수 있지만, 실행 환경으로 전송하는 배포 패키지의 크기와 데이터의 양을 최소로 유지하십시오.

배포 패키지

함수의 코드는 스크립트 또는 컴파일된 프로그램과 이들의 종속성으로 구성됩니다. Lambda 콘솔 또는 도구 키트에서 함수를 작성하는 경우 클라이언트는 배포 패키지라고 하는 코드의 ZIP 아카이브를 생성합니다. 그런 다음 클라이언트는 해당 패키지를 Lambda 서비스로 전송합니다. Lambda API, 명령줄 도구 또는 SDK를 이용해 함수를 관리하는 경우 배포 패키지를 생성해야 합니다. 또한 컴파일된 언어를 위해 배포 패키지를 수동으로 생성해야 하며 함수에 종속성을 추가해야 합니다.

언어별 지침은 다음 주제를 참조하십시오.

Layers

Lambda 계층은 라이브러리, 사용자 지정 런타임 및 그 외 함수 종속성에 대한 배포 메커니즘입니다. 계층을 사용하면 개발 중인 함수 코드를 변경되지 않는 코드 및 리소스와는 별도로 관리할 수 있습니다. 사용자가 만든 계층, AWS에서 제공하는 계층 또는 다른 AWS 고객들의 계층을 사용하도록 함수를 구성할 수 있습니다.

자세한 내용은 AWS Lambda 계층 단원을 참조하십시오.

확장

Lambda은 코드를 실행하는 인프라를 관리하고 수신 요청에 대한 응답으로 자동 확장됩니다. 함수 인스턴스 하나의 이벤트 처리 속도보다 빠르게 함수를 호출하는 경우 Lambda은 추가 인스턴스를 실행하여 규모를 확장합니다. 트래픽이 감소하면 비활성 인스턴스가 고정되거나 중지됩니다. 함수가 이벤트를 초기화하거나 처리하는 시간에 대해서만 비용을 지불합니다.


        함수는 미결 요청 수에 따라 자동으로 조정됩니다.

자세한 내용은 AWS Lambda 함수 규모 조정 단원을 참조하십시오.

동시성 제어

동시성 설정을 사용하여 프로덕션 애플리케이션이 높은 가용성과 높은 응답성을 유지하도록 보장합니다. 함수가 너무 많은 동시성을 사용하지 못하게 하고 계정의 사용 가능한 동시성 중 일부를 함수에 예약하려면 예약된 동시성을 사용합니다. 예약된 동시성은 사용 가능한 동시성 풀을 하위 집합으로 분할합니다. 예약된 동시성이 있는 함수는 전용 풀에서의 동시성 만 사용합니다.


        두 개의 함수에 할당된 예약 동시성입니다.

지연 시간 변동 없이 함수를 확장할 수 있도록 하려면 프로비저닝된 동시성을 사용합니다. 초기화하는 데 오랜 시간이 걸리거나 모든 호출에 대해 지연 시간이 매우 짧은 함수의 경우 프로비저닝 된 동시성을 사용하면 함수의 인스턴스를 사전 초기화하고 항상 실행 상태를 유지할 수 있습니다. Lambda는 Application Auto Scaling과 통합되어 사용률을 기반으로 프로비저닝된 동시성에 대한 autoscaling을 지원합니다.


        Application Auto Scaling를 사용하여 프로비저닝된 동시성 autoscaling.

자세한 내용은 Lambda 함수에 대한 동시성 관리 단원을 참조하십시오.

비동기식 호출

함수를 호출할 때 동기식으로 호출할 것인지 비동기식으로 호출할 것인지 선택할 수 있습니다. 동기식 호출의 경우 함수가 이벤트를 처리하여 응답을 반환하기를 기다립니다. 비동기식 호출의 경우, Lambda는 처리를 위해 이벤트를 대기열에 저장하고 즉시 응답을 반환합니다.


        Lambda는 비동기 호출 이벤트를 함수로 보내기 전에 대기열에 넣습니다.

비동기식 호출에서는 함수가 오류를 반환하거나 병목 중인 경우 Lambda이 재시도를 처리합니다. 이 동작을 사용자 지정하기 위해 함수, 버전 또는 별칭에 대한 오류 처리 설정을 구성할 수 있습니다. 처리에 실패한 이벤트를 배달 못한 편지 대기열로 보내거나, 호출 레코드를 대상에 보내도록 Lambda를 구성할 수도 있습니다.

자세한 내용은 비동기식 호출 단원을 참조하십시오.

이벤트 소스 매핑

스트림 또는 대기열에서 항목을 처리하려면 이벤트 소스 매핑을 생성하면 됩니다. 이벤트 소스 매핑은 Amazon SQS 대기열, Amazon Kinesis 스트림 또는 Amazon DynamoDB 스트림에서 항목을 읽어 배치로 함수에 전송하는 Lambda 내 리소스입니다. 함수가 처리하는 각 이벤트에는 수백 또는 수천 개의 항목이 포함될 수 있습니다.


        Kinesis 스트림에서 레코드를 읽는 이벤트 소스 매핑입니다.

이벤트 소스 매핑은 처리되지 않은 항목의 로컬 대기열을 유지 관리하고, 함수가 오류를 반환하거나 병목 중인 경우 재시도를 처리합니다. 배치 처리 동작 및 오류 처리를 사용자 정의하거나 처리에 실패한 항목의 레코드를 대상으로 보내도록 이벤트 소스 매핑을 구성할 수 있습니다.

자세한 내용은 AWS Lambda 이벤트 소스 매핑 단원을 참조하십시오.

대상

대상은 함수에 대한 호출 레코드를 수신하는 AWS 리소스입니다. 비동기 호출의 경우, 호출 레코드를 대기열, 주제, 함수 또는 이벤트 버스에 보내도록 Lambda를 구성할 수 있습니다. 성공적인 호출과 처리에 실패한 이벤트에 대해 별도의 대상을 구성할 수 있습니다. 호출 레코드에는 이벤트, 함수의 응답 및 레코드가 전송된 이유에 대한 세부 정보가 포함되어 있습니다.


        Lambda는 결과에 따라 대기열 또는 이벤트 버스 대상으로 호출 레코드를 보냅니다.

스트림에서 읽기를 수행하는 이벤트 소스 매핑의 경우, 처리에 실패한 배치 레코드를 대기열이나 주제로 보내도록 Lambda를 구성할 수 있습니다. 이벤트 소스 매핑에 대한 실패 레코드에는 배치에 대한 메타데이터가 포함되어 있으며 스트림의 항목을 가리킵니다.

자세한 내용은 비동기 호출에 대한 대상 구성 단원과 Using AWS Lambda with Amazon DynamoDBAWS Lambda를 Amazon Kinesis와 함께 사용의 오류 처리 섹션을 참조하십시오.

함수 블루프린트

Lambda 콘솔에서 함수를 생성할 때 선택에 따라 처음부터 시작하거나, 블루프린트를 사용하거나, AWS Serverless Application Repository에서 애플리케이션을 배포할 수 있습니다. 블루프린트는 Lambda를 AWS 서비스 또는 인기 있는 타사 애플리케이션과 함께 사용하는 방법을 보여 주는 샘플 코드를 제공합니다. 블루프린트에는 Node.js 및 Python 런타임에 대한 샘플 코드 및 함수 구성 사전 설정이 포함되어 있습니다.

블루프린트는 Creative Commons Zero 라이선스에 따라 제공됩니다. 이들은 Lambda 콘솔에서만 사용할 수 있습니다.

애플리케이션 템플릿

Lambda 콘솔을 사용하여 지속적 전달 파이프라인에서 애플리케이션을 생성할 수 있습니다. Lambda 콘솔의 애플리케이션 템플릿에는 하나 이상의 함수에 대한 코드, 함수를 정의하고 AWS 리소스를 지원하는 애플리케이션 템플릿, AWS CodePipeline 파이프라인을 정의하는 인프라 템플릿이 포함되어 있습니다. 파이프라인에는 포함된 Git 리포지토리에 변경 사항을 푸시할 때마다 실행되는 빌드 및 배포 단계가 있습니다.

애플리케이션 템플릿은 MIT No Attribution 라이선스에 따라 제공됩니다. 이들은 Lambda 콘솔에서만 사용할 수 있습니다.

자세한 내용은 Lambda 콘솔에서 지속적 전달을 사용하는 애플리케이션 생성 단원을 참조하십시오.