AWS Lambda
개발자 가이드

AWS Lambda 이벤트 소스 매핑

Lambda 함수와 이벤트 소스는 AWS Lambda의 핵심 구성 요소입니다. 이벤트 소스는 이벤트를 게시하는 엔터티이고, Lambda 함수는 이벤트를 처리하는 사용자 지정 코드입니다. 지원되는 이벤트 소스는 AWS Lambda에서 사용할 수 있도록 사전 구성이 가능한 AWS 서비스입니다. 구성은 Lambda 함수에 이벤트 소스를 매핑한다는 점에서 이벤트 소스 매핑이라고도 하는데, 이벤트 발생 시 함수를 자동 호출하도록 할 수 있습니다.

각각의 이벤트 소스 매핑은 게시할 이벤트의 유형과 이벤트 발생 시 호출할 Lambda 함수를 식별합니다. 그러면 특정 Lambda 함수가 파라미터로 이벤트 정보를 수신하고, Lambda 함수 코드가 이벤트를 처리합니다.

또한 AWS 리소스 이벤트를 포함하고 Lambda 함수를 호출하도록 사용자 지정 애플리케이션을 생성할 수 있습니다. 자세한 내용은 AWS Command Line Interface에서 AWS Lambda 사용 단원을 참조하십시오.

이벤트 매핑 정보를 어디에 저장해야 할지 모르시겠습니까? 이벤트 소스 내에 저장할까요, 아니면 내에 저장할까요? 다음 단원은 이러한 이벤트 소스 카테고리 각각에 대한 이벤트 소스 매핑을 설명합니다. 이들 단원에서는 Lambda 함수가 호출되는 방법과 Lambda 함수를 호출할 수 있도록 권한을 관리하는 방법도 설명합니다.

AWS 서비스의 이벤트 소스 매핑

폴 기반의 AWS 서비스(Amazon Kinesis Data Streams 및 DynamoDB 스트림 또는 Amazon SQS 대기열)를 제외하고 다른 지원 AWS 서비스들은 이벤트를 게시하는 것은 물론이고, Lambda 함수를 호출할 수 있습니다(일명 푸시 모델). 푸시 모델에서는 다음 사항에 유의하십시오.

  • 이벤트 소스 매핑은 이벤트 소스 내에 유지됩니다. 이벤트 소스에서 해당 API가 지원되기 때문에 이벤트 소스 매핑을 생성 및 관리할 수 있습니다. 예를 들어 Amazon S3는 버킷 알림 구성 API를 제공합니다. 이 API를 사용하여 게시할 버킷 이벤트와 호출할 함수를 식별하는 이벤트 소스 매핑을 구성할 수 있습니다.

  • 이벤트 소스가 Lambda 함수를 호출하기 때문에 리소스 기반의 정책을 사용하여 이벤트 소스에 필요한 권한을 부여해야 합니다. 자세한 내용은 AWS Lambda에서 리소스 기반 정책 사용 단원을 참조하십시오.

다음 예제는 이 모델의 작동 방식을 설명합니다.

예 – Amazon S3가 이벤트를 푸시하고 Lambda 함수를 호출

각각의 객체 생성 버킷 이벤트에 대해 AWS Lambda 함수를 호출하고 싶다고 가정해보십시오. 버킷 알림 구성에 필요한 이벤트 소스 매핑을 추가합니다.

다음 그림은 그 흐름을 보여 줍니다.

  1. 사용자는 버킷에 객체를 생성합니다.

  2. Amazon S3가 객체 생성 이벤트를 감지합니다.

  3. Amazon S3는 버킷 알림 구성에 설명되어 있는 이벤트 소스 매핑에 따라 Lambda 함수를 호출합니다.

  4. AWS Lambda는 Lambda 함수에 연결되는 권한 정책을 확인하여 Amazon S3가 필요한 권한을 갖도록 합니다. 권한 정책에 대한 자세한 내용은 AWS Lambda 권한을 참조하십시오.

  5. AWS Lambda는 일단 연결된 권한 정책을 확인하고 Lambda 함수를 실행합니다. 함수는 파라미터로 이벤트를 수신한다는 것을 기억하십시오.

AWS 폴 기반 서비스의 이벤트 소스 매핑

AWS Lambda는 다음의 폴 기반 서비스를 지원합니다.

Lambda가 이벤트를 읽는 서비스

이벤트 소스 매핑을 구성하면 AWS Lambda가 이벤트 소스를 폴링하고 Lambda 함수를 호출합니다. 이벤트 소스 매핑은 AWS Lambda에서 유지됩니다. AWS Lambda는 이벤트 소스 매핑을 생성 및 관리하기 위한 API를 제공합니다. 자세한 내용은 CreateEventSourceMapping 단원을 참조하십시오.

AWS Lambda에는 Kinesis 및 DynamoDB 스트림 또는 Amazon SQS 대기열을 폴링하고 레코드를 읽을 수 있는 권한이 필요합니다. Lambda 함수를 생성할 때 지정한 역할과 연결되는 권한 정책을 사용하여 실행 역할을 통해 이러한 권한을 부여합니다. AWS Lambda는 Lambda 함수를 호출할 수 있는 권한이 필요하지 않습니다.

아래 그림은 Kinesis 스트림에 레코드를 기록하는 사용자 지정 애플리케이션과 AWS Lambda가 스트림을 폴링하는 방법을 보여줍니다. 스트림에서 새로운 레코드를 감지하면 AWS Lambda는 Lambda 함수를 호출합니다.

Kinesis 스트림에 레코드를 기록하는 사용자 지정 애플리케이션을 가지고 있다고 가정해보십시오. 스트림에서 새 레코드가 감지될 때 함수를 호출하고 싶을 것입니다. AWS Lambda에서 Lambda 함수와 필요한 이벤트 소스 매핑을 생성합니다.

아래 그림은 다음 시퀀스를 보여줍니다.

  1. 사용자 지정 애플리케이션은 Amazon Kinesis 스트림에 레코드를 기록합니다.

  2. AWS Lambda는 스트림을 지속적으로 폴링하고 서비스가 스트림에서 새로운 레코드를 감지하면 Lambda 함수를 호출합니다. AWS Lambda는 AWS Lambda에서 생성하는 이벤트 소스 매핑에 따라 폴링할 대기열과 호출할 Lambda 함수를 식별합니다.

  3. AWS Lambda가 Lambda 함수를 실행합니다.

이 예제에서는 Kinesis 스트림을 사용하지만, DynamoDB 스트림을 사용하는 경우도 마찬가지입니다.

사용자 지정 애플리케이션의 이벤트 소스 매핑

이벤트를 게시 및 처리하는 사용자 지정 애플리케이션을 가지고 있는 경우에는 이러한 이벤트를 처리하도록 Lambda 함수를 생성할 수 있습니다. 이 경우에는 사전 구성이 필요하지 않습니다. 즉, 이벤트 소스 매핑을 설정할 필요가 없습니다. 대신에 이벤트 소스가 AWS Lambda Invoke API를 사용합니다. 애플리케이션 및 Lambda 함수를 다른 AWS 계정 여러 개가 소유하고 있는 경우에는 Lambda 함수를 소유하는 AWS 계정이 Lambda 함수에 연결된 권한 정책에서 교차 계정 권한을 허용해야 합니다.

아래 그림은 계정의 사용자 지정 애플리케이션이 어떻게 Lambda 함수를 호출하는지 보여줍니다. 이 예제에서는 사용자 지정 애플리케이션이 함수를 소유하고 있는 계정과 동일한 계정 자격 증명을 사용하고 있기 때문에 함수를 호출하기 위한 추가 권한이 필요하지 않습니다.

다음 예제에서는 사용자 애플리케이션과 Lambda 함수를 다른 AWS 계정 여러 개가 소유하고 있습니다. 이 경우에는 Lambda 함수를 소유하는 AWS 계정이 Lambda 함수에 연결된 권한 정책에서 교차 계정 권한을 허용해야 합니다. 자세한 내용은 AWS Lambda 권한 단원을 참조하십시오.