Amazon SQS 이벤트 소스를 통해 이벤트 필터링 사용 - AWS Lambda

Amazon SQS 이벤트 소스를 통해 이벤트 필터링 사용

이벤트 필터링을 사용하여 Lambda가 함수로 전송하는 스트림 또는 대기열의 레코드를 제어할 수 있습니다. 이벤트 필터링의 작동 방식에 대한 일반적인 내용은 Lambda가 함수로 보내는 이벤트에 대한 제어을 참조하세요.

이 섹션에서는 Amazon MSK 이벤트 소스에 대한 이벤트 필터링에 중점을 둡니다.

Amazon SQS 이벤트 필터링 기본 사항

Amazon SQS 대기열에 다음 JSON 형식의 메시지가 포함되어 있다고 가정해 보겠습니다.

{ "RecordNumber": 1234, "TimeStamp": "yyyy-mm-ddThh:mm:ss", "RequestCode": "AAAA" }

이 대기열에 대한 예제 레코드는 다음과 같습니다.

{ "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\n "RecordNumber": 1234,\n "TimeStamp": "yyyy-mm-ddThh:mm:ss",\n "RequestCode": "AAAA"\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue", "awsRegion": "us-west-2" }

Amazon SQS 메시지의 콘텐츠를 기반으로 필터링하려면 Amazon SQS 메시지 레코드의 body 키를 사용합니다. Amazon SQS 메시지의 RequestCode가 'BBBB'인 레코드만 처리하려고 한다고 가정해 보겠습니다. FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }" } ] }

명확성을 더하기 위해 일반 JSON으로 확장된 필터의 Pattern 값은 다음과 같습니다.

{ "body": { "RequestCode": [ "BBBB" ] } }

콘솔, AWS CLI 또는 AWS SAM 템플릿을 사용하여 필터를 추가할 수 있습니다.

Console

콘솔을 사용하여 이 필터를 추가하려면 이벤트 소스 매핑에 필터 기준 연결(콘솔)의 지침을 따르고 필터 기준에 대해 다음 문자열을 입력합니다.

{ "body" : { "RequestCode" : [ "BBBB" ] } }
AWS CLI

AWS Command Line Interface(AWS CLI)를 사용하여 이러한 필터 기준으로 새 이벤트 소스 매핑을 생성하려면 다음 명령을 실행합니다.

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'

이러한 필터 기준을 기존 이벤트 소스 매핑에 추가하려면 다음 명령을 실행합니다.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'
AWS SAM

AWS SAM을 사용하여 이 필터를 추가하려면 이벤트 소스의 YAML 템플릿에 다음 코드 조각을 추가합니다.

FilterCriteria: Filters: - Pattern: '{ "body" : { "RequestCode" : [ "BBBB" ] } }'

함수가 RecordNumber가 9,999보다 큰 레코드만 처리하도록 하려는 경우를 가정해 보겠습니다. FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }" } ] }

명확성을 더하기 위해 일반 JSON으로 확장된 필터의 Pattern 값은 다음과 같습니다.

{ "body": { "RecordNumber": [ { "numeric": [ ">", 9999 ] } ] } }

콘솔, AWS CLI 또는 AWS SAM 템플릿을 사용하여 필터를 추가할 수 있습니다.

Console

콘솔을 사용하여 이 필터를 추가하려면 이벤트 소스 매핑에 필터 기준 연결(콘솔)의 지침을 따르고 필터 기준에 대해 다음 문자열을 입력합니다.

{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }
AWS CLI

AWS Command Line Interface(AWS CLI)를 사용하여 이러한 필터 기준으로 새 이벤트 소스 매핑을 생성하려면 다음 명령을 실행합니다.

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'

이러한 필터 기준을 기존 이벤트 소스 매핑에 추가하려면 다음 명령을 실행합니다.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'
AWS SAM

AWS SAM을 사용하여 이 필터를 추가하려면 이벤트 소스의 YAML 템플릿에 다음 코드 조각을 추가합니다.

FilterCriteria: Filters: - Pattern: '{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }'

Amazon SQS의 경우 메시지 본문은 임의의 문자열이 될 수 있습니다. 그러나 FilterCriteria에서 유효한 JSON 형식의 body를 기대하는 경우 문제가 될 수 있습니다. 반대 시나리오도 마찬가지입니다. 수신 메시지 본문이 JSON 형식이지만 필터 기준이 body를 일반 문자열로 예상하는 경우 의도하지 않은 동작이 발생할 수 있습니다.

이 문제를 방지하려면 FilterCriteria에서 본문의 형식이 대기열에서 수신하는 메시지의 body의 예상 형식과 일치하는지 확인합니다. 메시지를 필터링하기 전에 Lambda는 수신 메시지 본문의 형식과 body의 필터 패턴의 형식을 자동으로 평가합니다. 일치하지 않으면 Lambda는 메시지를 삭제합니다. 다음 표에는 이 평가가 요약되어 있습니다.

수신 메시지 body 형식 필터 패턴 body 형식 결과적 작업

일반 문자열

일반 문자열

Lambda는 필터 기준에 따라 필터링합니다.

일반 문자열

데이터 속성에 대한 필터 패턴 없음

Lambda는 필터 기준에 따라(다른 메타데이터 속성에만 해당) 필터링합니다.

일반 문자열

유효한 JSON

Lambda가 메시지를 삭제합니다.

유효한 JSON

일반 문자열

Lambda가 메시지를 삭제합니다.

유효한 JSON

데이터 속성에 대한 필터 패턴 없음

Lambda는 필터 기준에 따라(다른 메타데이터 속성에만 해당) 필터링합니다.

유효한 JSON

유효한 JSON

Lambda는 필터 기준에 따라 필터링합니다.