Amazon SQS 이벤트 소스 매핑 생성 및 구성
Lambda로 Amazon SQS 메시지를 처리하려면 적절한 설정으로 대기열을 구성한 다음 Lambda 이벤트 소스 매핑을 생성하세요.
Lambda에서 사용할 수 있도록 대기열 구성
기존 Amazon SQS 대기열이 없으면 Lambda 함수의 이벤트 소스로 사용할 대기열을 생성합니다. Lambda 함수와 Amazon SQS 대기열은 서로 다른 AWS 계정에 있을 수 있지만 동일한 AWS 리전에 있어야 합니다.
함수 시간이 각 레코드 배치를 처리할 수 있도록 하려면 소스 대기열의 표시 제한 시간을 함수에 구성 제한 시간의 6배 이상으로 설정하세요. 이전 배치를 처리하는 동안 함수가 제한되는 경우 추가 시간을 통해 Lambda가 재시도할 수 있습니다.
참고
함수의 제한 시간은 대기열의 표시 제한 시간보다 작거나 같아야 합니다. Lambda는 이벤트 소스 매핑을 생성하거나 업데이트할 때 해당 요구 사항을 검증하고 함수 제한 시간이 대기열의 표시 제한 시간을 초과하면 오류를 반환합니다.
기본적으로 배치를 처리하는 동안 Lambda에 오류가 발생하면 해당 배치의 모든 메시지가 대기열로 돌아갑니다. 표시 제한 시간 후 메시지가 Lambda에 다시 표시됩니다. 부분 배치 응답을 사용하여 실패한 메시지만 대기열에 반환하도록 이벤트 소스 매핑을 구성할 수 있습니다. 또한 함수가 메시지를 여러 번 처리하지 못하면 Amazon SQS에서 메시지를 Dead Letter Queue(DLQ)로 보낼 수 있습니다. 소스 대기열의 리드라이브 정책에서 maxReceiveCount를 5 이상으로 설정하는 것이 좋습니다. 이를 통해 Lambda는 실패한 메시지를 Dead Letter Queue(DLQ)로 직접 전송하기 전에 몇 번의 재시도를 할 수 있습니다.
Lambda 실행 역할 권한 설정
AWSLambdaSQSQueueExecutionRole AWS 관리형 정책에는 Lambda가 Amazon SQS 대기열에서 읽는 데 필요한 권한이 포함되어 있습니다. 함수의 실행 역할에 이 관리형 정책을 추가할 수 있습니다.
선택적으로 암호화된 대기열을 사용하는 경우 실행 역할에 다음 권한도 추가해야 합니다.
SQS 이벤트 소스 매핑 생성
이벤트 소스 매핑을 생성하여 Lambda가 대기열의 항목을 Lambda 함수로 전송하게 할 수 있습니다. 여러 이벤트 소스 매핑을 생성하여 하나의 함수로 여러 대기열의 항목을 처리할 수 있습니다. Lambda가 대상 함수를 간접 호출하면 이벤트에는 구성 가능한 최대 배치 크기까지 항목이 여러 개 포함될 수 있습니다.
Amazon SQS에서 읽도록 함수를 구성하려면 AWSLambdaSQSQueueExecutionRole AWS 관리형 정책을 실행 역할에 연결합니다. 그리고 다음 단계를 사용하여 콘솔에서 SQS 이벤트 소스 매핑을 생성합니다.
권한 추가 및 트리거 생성
Lambda 콘솔의 함수 페이지
를 엽니다. -
함수의 이름을 선택합니다.
-
구성(Configuration) 탭을 선택한 다음, 권한(Permissions)을 선택합니다.
-
역할 이름에서 실행 역할에 대한 링크를 선택합니다. 이 링크를 클릭하면 IAM 콘솔에서 역할이 열립니다.
-
권한 추가를 선택하고 정책 연결을 선택합니다.
-
검색 필드에
AWSLambdaSQSQueueExecutionRole를 입력합니다. 실행 역할에 이 정책을 추가합니다. 이는 함수가 Amazon SQS 대기열에서 읽어야 하는 권한을 포함하는 AWS 관리형 정책입니다. 이 정책에 대한 자세한 내용은 AWS Managed Policy 참조 안내서의 AWSLambdaSQSQueueExecutionRole을 참조하세요. -
Lambda 콘솔에서 함수로 돌아갑니다. 함수 개요(Function overview)에서 트리거 추가(Add trigger)를 선택합니다.
-
트리거 유형을 선택합니다.
-
필요한 옵션을 구성한 다음 추가를 선택합니다.
Lambda는 Amazon SQS 이벤트 소스에 대해 다음과 같은 구성 옵션을 지원합니다.
- SQS 대기열
-
레코드를 읽어 올 Amazon SQS 대기열입니다. Lambda 함수와 Amazon SQS 대기열은 서로 다른 AWS 계정에 있을 수 있지만 동일한 AWS 리전에 있어야 합니다.
- 트리거 활성화
-
이벤트 소스 매핑의 상태입니다. 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가 함수로 보내는 이벤트에 대한 제어 섹션을 참조하세요.