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 템플릿을 사용하여 필터를 추가할 수 있습니다.
함수가 RecordNumber
가 9,999보다 큰 레코드만 처리하도록 하려는 경우를 가정해 보겠습니다. FilterCriteria
객체는 다음과 같습니다.
{ "Filters": [ { "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }" } ] }
명확성을 더하기 위해 일반 JSON으로 확장된 필터의 Pattern
값은 다음과 같습니다.
{ "body": { "RecordNumber": [ { "numeric": [ ">", 9999 ] } ] } }
콘솔, AWS CLI 또는 AWS SAM 템플릿을 사용하여 필터를 추가할 수 있습니다.
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는 필터 기준에 따라 필터링합니다. |