Amazon SQS 이벤트 소스 매핑 생성 및 구성 - AWS Lambda

Amazon SQS 이벤트 소스 매핑 생성 및 구성

Lambda로 Amazon SQS 메시지를 처리하려면 적절한 설정으로 대기열을 구성한 다음 Lambda 이벤트 소스 매핑을 생성하세요.

Lambda에서 사용할 수 있도록 대기열 구성

기존 Amazon SQS 대기열이 없으면 Lambda 함수의 이벤트 소스로 사용할 대기열을 생성합니다. 그런 다음 Lambda 함수가 각 이벤트 배치를 처리하는 데 충분한 시간을 허용하도록 대기열을 구성합니다.

함수 시간이 각 레코드 배치를 처리할 수 있도록 하려면 소스 대기열의 표시 제한 시간을 함수에 구성 제한 시간의 6배 이상으로 설정하세요. 이전 배치를 처리하는 동안 함수가 제한되는 경우 추가 시간을 통해 Lambda가 재시도할 수 있습니다.

기본적으로 배치를 처리하는 동안 Lambda에 오류가 발생하면 해당 배치의 모든 메시지가 대기열로 돌아갑니다. 표시 제한 시간 후 메시지가 Lambda에 다시 표시됩니다. 부분 배치 응답을 사용하여 실패한 메시지만 대기열에 반환하도록 이벤트 소스 매핑을 구성할 수 있습니다. 또한 함수가 메시지를 여러 번 처리하지 못하면 Amazon SQS에서 메시지를 DLQ(Dead Letter Queue)로 보낼 수 있습니다. 소스 대기열의 리드라이브 정책에서 maxReceiveCount를 5 이상으로 설정하는 것이 좋습니다. 이를 통해 Lambda는 실패한 메시지를 DLQ(Dead Letter Queue)로 직접 전송하기 전에 몇 번의 재시도를 할 수 있습니다.

Lambda 실행 역할 권한 설정

AWSLambdaSQSQueueExecutionRole AWS 관리형 정책에는 Lambda가 Amazon SQS 대기열에서 읽는 데 필요한 권한이 포함되어 있습니다. 함수의 실행 역할에 이 관리형 정책을 추가할 수 있습니다.

선택적으로 암호화된 대기열을 사용하는 경우 실행 역할에 다음 권한도 추가해야 합니다.

SQS 이벤트 소스 매핑 생성

이벤트 소스 매핑을 생성하여 Lambda가 대기열의 항목을 Lambda 함수로 전송하게 할 수 있습니다. 여러 이벤트 소스 매핑을 생성하여 하나의 함수로 여러 대기열의 항목을 처리할 수 있습니다. Lambda가 대상 함수를 호출하면 이벤트에는 구성 가능한 최대 배치 크기까지 항목이 여러 개 포함될 수 있습니다.

Amazon SQS에서 읽도록 함수를 구성하려면 AWSLambdaSQSQueueExecutionRole AWS 관리형 정책을 실행 역할에 연결합니다. 그리고 다음 단계를 사용하여 콘솔에서 SQS 이벤트 소스 매핑을 생성합니다.

권한 추가 및 트리거 생성
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수의 이름을 선택합니다.

  3. 구성(Configuration) 탭을 선택한 다음, 권한(Permissions)을 선택합니다.

  4. 역할 이름에서 실행 역할에 대한 링크를 선택합니다. 이 링크를 클릭하면 IAM 콘솔에서 역할이 열립니다.

    실행 역할 링크
  5. 권한 추가를 선택하고 정책 연결을 선택합니다.

    IAM 콘솔에서 정책 연결
  6. 검색 필드에 AWSLambdaSQSQueueExecutionRole를 입력합니다. 실행 역할에 이 정책을 추가합니다. 이는 함수가 Amazon SQS 대기열에서 읽어야 하는 권한을 포함하는 AWS 관리형 정책입니다. 이 정책에 대한 자세한 내용은 AWS Managed Policy 참조 안내서의 AWSLambdaSQSQueueExecutionRole을 참조하세요.

  7. Lambda 콘솔에서 함수로 돌아갑니다. 함수 개요(Function overview)에서 트리거 추가(Add trigger)를 선택합니다.

    Lambda 콘솔의 함수 개요 섹션
  8. 트리거 유형을 선택합니다.

  9. 필요한 옵션을 구성한 다음 추가를 선택합니다.

Lambda는 Amazon SQS 이벤트 소스에 대해 다음과 같은 구성 옵션을 지원합니다.

SQS 대기열

레코드를 읽어 올 Amazon SQS 대기열입니다.

트리거 활성화

이벤트 소스 매핑의 상태입니다. Enable trigger(트리거 활성화)는 기본적으로 선택됩니다.

배치 크기

각 배치에서 함수에 보낼 레코드 최대 수입니다. 표준 대기열의 경우 최대 10,000개의 레코드가 될 수 있습니다. FIFO 대기열의 경우 최대값은 10입니다. 10을 초과하는 배치 크기의 경우 배치 기간(MaximumBatchingWindowInSeconds)도 최소 1초로 설정해야 합니다.

함수 제한 시간은 항목의 전체 배치를 처리할 시간이 충분하도록 구성합니다. 항목을 처리하는 데 걸리는 시간이 길면 더 작은 배치 크기를 선택합니다. 배치 크기가 크면 매우 빠르거나 오버헤드가 큰 워크로드에 대한 효율성에 영향을 미칠 수 있습니다. 함수에 예약된 동시성을 구성할 경우 최소 동시성 실행 수를 5로 설정하여 Lambda가 함수를 호출할 때 오류를 제한할 수 있는 가능성을 줄이세요.

이벤트의 총 크기가 동기식 호출에 대한 간접 호출 페이로드 크기 할당량(6MB)을 초과하지 않는 한 Lambda는 단일 직접 호출로 배치의 모든 레코드를 함수에 전달합니다. Lambda와 Amazon SQS는 모두 각 레코드의 메타데이터를 생성합니다. 이 추가 메타데이터는 총 페이로드 크기에 포함되며, 그러면 배치로 전송된 총 레코드 수가 구성된 배치 크기보다 작을 수 있습니다. Amazon SQS에서 전송하는 메타데이터 필드는 길이가 가변적일 수 있습니다. Amazon SQS 메타데이터 필드에 대한 자세한 내용은 Amazon Simple Queue Service API 참조의 ReceiveMessage API 작업 설명서를 참조하세요.

배치 기간

함수를 호출하기 전에 기록을 수집할 최대 기간(단위: 초)입니다. 이 지표는 표준 대기열에만 적용됩니다.

0초보다 큰 배치 기간을 사용하는 경우 대기열의 표시 제한 시간에서 늘어난 처리 시간을 고려해야 합니다. 대기열의 가시성 제한 시간을 함수 제한 시간의 6배에 MaximumBatchingWindowInSeconds 값을 더한 값으로 설정하는 것이 좋습니다. 이렇게 하면 Lambda 함수가 각 이벤트 배치를 처리하고 제한 오류가 발생할 경우 다시 시도할 수 있습니다.

메시지를 사용할 수 있게 되면 Lambda는 메시지를 일괄 처리하기 시작합니다. Lambda는 함수를 동시에 5번 호출하여 한 번에 5개의 배치를 처리하기 시작합니다. 메시지를 계속 사용할 수 있는 경우 Lambda는 분당 최대 300개의 함수 인스턴스를 추가해 최대 1,000개까지 추가합니다. 함수 확장 및 동시성에 대한 자세한 내용은 Lambda 함수 크기 조정을 참조하세요.

더 많은 메시지를 처리하기 위해 Lambda 함수를 최적화하여 처리량을 높일 수 있습니다. 자세한 내용은 AWS Lambda의 Amazon SQS 표준 대기열 크기 조정 방식 이해를 참조하세요.

최대 동시성

이벤트 소스가 호출할 수 있는 최대 동시성 함수 수입니다. 자세한 내용은 Amazon SQS 이벤트 소스의 최대 동시성 구성 단원을 참조하십시오.

필터 기준

필터 기준을 추가하여 Lambda가 처리를 위해 함수로 보내는 이벤트를 제어합니다. 자세한 내용은 Lambda 이벤트 필터링 단원을 참조하십시오.