Lambda 이벤트 필터링 - AWS Lambda

Lambda 이벤트 필터링

이벤트 필터링을 사용하여 Lambda가 함수로 전송하는 스트림 또는 대기열의 레코드를 제어할 수 있습니다. 예를 들어 함수에서 특정 데이터 파라미터가 포함된 Amazon SQS 메시지만 처리하도록 필터를 추가할 수 있습니다. 이벤트 필터링은 이벤트 소스 매핑과 함께 작동합니다. 다음 AWS 서비스에 대한 이벤트 소스 매핑에 필터를 추가할 수 있습니다.

  • Amazon DynamoDB

  • Amazon Kinesis Data Streams

  • Amazon MQ

  • Amazon Managed Streaming for Apache Kafka(Amazon MSK)

  • 자체 관리형 Apache Kafka

  • Amazon Simple Queue Service(Amazon SQS)

Lambda는 Amazon DocumentDB에 대한 이벤트 필터링을 지원하지 않습니다.

기본적으로 단일 이벤트 소스 매핑에 대해 최대 5개의 필터를 정의할 수 있습니다. 필터는 논리적으로 OR로 결합됩니다. 이벤트 소스의 레코드가 하나 이상의 필터를 충족하는 경우 Lambda는 함수로 전송하는 다음 이벤트에 해당 레코드를 포함합니다. 충족되는 필터가 없으면 Lambda는 레코드를 삭제합니다.

참고

이벤트 소스에 대해 5개가 넘는 필터를 정의해야 하는 경우 각 이벤트 소스에 대해 최대 필터 10개까지 할당량 증가를 요청할 수 있습니다. 현재 할당량이 허용하는 것보다 많은 필터를 추가하려고 하면 이벤트 소스를 생성하려고 할 때 Lambda에서 오류를 반환합니다.

이벤트 필터링 기본 사항

필터 기준(FilterCriteria) 객체는 필터(Filters) 목록으로 구성된 구조입니다. 각 필터는 이벤트 필터링 패턴(Pattern)을 정의하는 구조입니다. 패턴은 JSON 필터 규칙의 문자열 표현입니다. FilterCriteria 객체의 구조는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"Metadata1\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}" } ] }

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

{ "Metadata1": [ rule1 ], "data": { "Data1": [ rule2 ] } }

필터 패턴에는 메타데이터 속성, 데이터 속성 또는 둘 다 포함될 수 있습니다. 사용 가능한 메타데이터 파라미터와 데이터 파라미터의 형식은 이벤트 소스 역할을 하는 AWS 서비스에 따라 다릅니다. 예를 들어, 이벤트 소스 매핑이 Amazon SQS 대기열에서 다음 레코드를 수신한다고 가정해 보겠습니다.

{ "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\n "City": "Seattle",\n "State": "WA",\n "Temperature": "46"\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", "awsRegion": "us-east-2" }
  • 메타데이터 속성은 레코드를 생성한 이벤트에 대한 정보가 들어 있는 필드입니다. 예제 Amazon SQS 레코드에서 메타데이터 속성에는 messageID, eventSourceArn, awsRegion 등의 필드가 포함됩니다.

  • 데이터 속성은 스트림 또는 대기열의 데이터를 포함하는 레코드의 필드입니다. Amazon SQS 이벤트 예제에서 데이터 필드의 키는 body이고, 데이터 속성은 필드 City StateTemperature입니다.

이벤트 소스 유형마다 데이터 필드에 서로 다른 키 값을 사용합니다. 데이터 속성을 필터링하려면 필터의 패턴에 올바른 키를 사용해야 합니다. 데이터 필터링 키 목록과 지원되는 각 AWS 서비스의 필터 패턴 예제는 서로 다른 AWS 서비스에서 필터 사용 섹션을 참조하세요.

이벤트 필터링은 멀티 레벨 JSON 필터링을 처리할 수 있습니다. 예를 들어 DynamoDB 스트림의 다음 레코드 조각을 고려하세요.

"dynamodb": { "Keys": { "ID": { "S": "ABCD" } "Number": { "N": "1234" }, ... }

정렬 키 Number의 값이 4567인 레코드만 처리하려고 한다고 가정해 보겠습니다. 이러한 경우 FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"dynamodb\": { \"Keys\": { \"Number\": { \"N\": [ "4567" ] } } } }" } ] }

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

{ "dynamodb": { "Keys": { "Number": { "N": [ "4567" ] } } } }

필터 기준을 충족하지 않는 레코드 처리

필터를 충족하지 않는 레코드의 처리 방식은 이벤트 소스에 따라 다릅니다.

  • Amazon SQS의 경우 메시지가 필터 기준을 충족하지 못하는 경우 Lambda는 자동으로 대기열에서 메시지를 제거합니다. 이러한 메시지를 Amazon SQS에서 수동으로 삭제할 필요가 없습니다.

  • KinesisDynamoDB의 경우 필터 기준에서 레코드를 처리하면 스트림 반복기가 이 레코드를 너머 진행됩니다. 레코드가 필터 조건을 충족하지 않으면 이벤트 소스에서 수동으로 레코드를 삭제할 필요가 없습니다. 보존 기간이 지나면 Kinesis 및 DynamoDB는 이러한 이전 레코드를 자동으로 삭제합니다. 레코드를 더 빨리 삭제하려면 데이터 보존 기간 변경을 참조하세요.

  • Amazon MSK, 자체 관리형 Apache KafkaAmazon MQ 메시지의 경우 Lambda는 필터에 포함된 모든 필드와 일치하지 않는 메시지를 삭제합니다. 자체 관리형 Apache Kafka의 경우 Lambda는 함수를 성공적으로 호출한 후 일치하는 메시지와 일치하지 않는 메시지에 대한 오프셋을 커밋합니다. Amazon MQ의 경우 Lambda는 함수를 성공적으로 호출한 후 일치하는 메시지를 확인하고, 일치하지 않는 메시지를 필터링할 때 확인합니다.

필터 규칙 구문

필터 규칙의 경우 Lambda는 Amazon EventBridge 규칙을 지원하며 EventBridge와 동일한 구문을 사용합니다. 자세한 내용은 Amazon EventBridge 사용 설명서의 Amazon EventBridge 이벤트 패턴을 참조하세요.

다음은 Lambda 이벤트 필터링에 사용할 수 있는 모든 비교 연산자에 대한 요약입니다.

비교 연산자 규칙 구문

Null

UserID가 null임

"UserID": [ null ]

비어 있음

LastName이 비어 있음

"LastName": [""]

같음

이름이 “Alice”임

"Name": [ "Alice" ]

같음(대/소문자 무시)

이름이 “Alice”임

"Name": [ { "equals-ignore-case": "alice" } ]

위치가 “New York”이고 요일이 “Monday”임

"Location": [ "New York" ], "Day": ["Monday"]

또는

PaymentType이 “Credit” 또는 “Debit”임

"PaymentType": [ "Credit", "Debit"]

또는(여러 필드)

위치가 'New York'이고 요일이 'Monday'임

"$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ]

아님

날씨는 “Raining”이 아님

"Weather": [ { "anything-but": [ "Raining" ] } ]

숫자(같음)

가격은 100임

"Price": [ { "numeric": [ "=", 100 ] } ]

숫자(범위)

가격이 10을 초과하고 20보다 작거나 같음

"Price": [ { "numeric": [ ">", 10, "<=", 20 ] } ]

존재함

Productname이 있음

"ProductName": [ { "exists": true } ]

존재하지 않음

Productname이 없음

"ProductName": [ { "exists": false } ]

로 시작함

리전이 미국에 있음

"Region": [ {"prefix": "us-" } ]

다음으로 끝남

FileName은 .png 확장명으로 끝납니다.

"FileName": [ { "suffix": ".png" } ]

참고

EventBridge와 마찬가지로 문자열의 경우 Lambda는 대소문자 변환이나 기타 문자열 정규화 없이 정확한 문자별 일치를 사용합니다. 숫자의 경우 Lambda는 문자열 표현도 사용합니다. 예를 들어 300, 300.0 및 3.0e2는 동일한 것으로 간주되지 않습니다.

Exists 연산자가 이벤트 소스 JSON의 리프 노드에서만 작동한다는 점에 유의하세요. 중간 노드와 일치하지 않습니다. 예를 들어 다음 JSON에서는 "address"가 중간 노드이므로 필터 패턴({ "person": { "address": [ { "exists": true } ] } }")이 일치하는 항목을 찾지 못합니다.

{ "person": { "name": "John Doe", "age": 30, "address": { "street": "123 Main St", "city": "Anytown", "country": "USA" } } }

이벤트 소스 매핑에 필터 기준 연결(콘솔)

다음 단계에 따라 Lambda 콘솔을 사용하여 필터 기준을 사용하여 새 이벤트 소스 매핑을 생성합니다.

필터 기준을 사용하여 새 이벤트 소스 매핑을 생성하려면(콘솔)
  1. Lambda 콘솔의 함수(Functions) 페이지를 엽니다.

  2. 이벤트 소스 매핑을 생성할 함수의 이름을 선택합니다.

  3. 함수 개요(Function overview)에서 트리거 추가(Add trigger)를 선택합니다.

  4. 트리거 구성(Trigger configuration)에서 이벤트 필터링을 지원하는 트리거 유형을 선택합니다. 지원되는 서비스 목록은 이 페이지의 시작 부분에 있는 목록을 참조하세요.

  5. 추가 설정을 폅니다.

  6. 필터 기준(Filter criteria)에서 추가(Add)를 선택한 다음, 필터를 정의하고 입력합니다. 예를 들면 다음과 같이 입력할 수 있습니다.

    { "Metadata" : [ 1, 2 ] }

    이는 필드 Metadata가 1 또는 2인 레코드만 처리하도록 Lambda에 지시합니다. 계속해서 추가를 선택하여 허용되는 최대 개수까지 필터를 더 추가할 수 있습니다.

  7. 필터 추가를 마쳤으면 저장을 선택합니다.

콘솔을 사용하여 필터 기준을 입력할 때 필터 패턴만 입력하면 되며 Pattern 키나 이스케이프 따옴표를 제공할 필요가 없습니다. 앞의 지침의 6단계에서 { "Metadata" : [ 1, 2 ] }는 다음 FilterCriteria에 해당합니다.

{ "Filters": [ { "Pattern": "{ \"Metadata\" : [ 1, 2 ] }" } ] }

콘솔에서 이벤트 소스 매핑을 생성한 후 트리거 세부 정보에서 형식이 지정된 FilterCriteria를 확인할 수 있습니다. 콘솔을 사용하여 이벤트 필터를 생성하는 추가 예는 서로 다른 AWS 서비스에서 필터 사용 섹션을 참조하세요.

이벤트 소스 매핑에 필터 기준 연결(AWS CLI)

이벤트 소스 매핑에 다음 FilterCriteria가 포함되기를 원한다고 가정해 보겠습니다.

{ "Filters": [ { "Pattern": "{ \"Metadata\" : [ 1, 2 ] }" } ] }

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": "{ \"Metadata\" : [ 1, 2 ]}"}]}'

create-event-source-mapping 명령은 지정된 FilterCriteria로 함수 my-function에 대한 새 Amazon SQS 이벤트 소스 매핑을 생성합니다.

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

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"Metadata\" : [ 1, 2 ]}"}]}'

이벤트 소스 매핑을 업데이트하려면 해당 UUID가 필요합니다. list-event-source-mappings 호출에서 UUID를 가져올 수 있습니다. Lambda는 또한 create-event-source-mapping 응답에서 UUID를 반환합니다.

이벤트 소스에서 필터 기준을 제거하려면 빈 FilterCriteria 개체로 다음 update-event-source-mapping 명령을 실행할 수 있습니다.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria "{}"

AWS CLI를 사용하여 이벤트 필터를 생성하는 추가 예는 서로 다른 AWS 서비스에서 필터 사용 섹션을 참조하세요.

이벤트 소스 매핑에 필터 기준 연결(AWS SAM)

AWS SAM에서 다음 필터 기준을 사용하도록 이벤트 소스를 구성한다고 가정해 보겠습니다.

{ "Filters": [ { "Pattern": "{ \"Metadata\" : [ 1, 2 ] }" } ] }

이러한 필터 기준을 이벤트 소스 매핑에 추가하려면 다음 코드 조각을 이벤트 소스의 YAML 템플릿에 삽입합니다.

FilterCriteria: Filters: - Pattern: '{"Metadata": [1, 2]}'

이벤트 소스 매핑을 위한 AWS SAM 템플릿을 생성하고 구성하는 방법에 대한 자세한 내용은 AWS SAM 개발자 가이드에서 EventSource 섹션을 참조하세요. AWS SAM 템플릿을 사용하여 이벤트 필터를 생성하는 추가 예는 서로 다른 AWS 서비스에서 필터 사용 섹션을 참조하세요.

서로 다른 AWS 서비스에서 필터 사용

이벤트 소스 유형마다 데이터 필드에 서로 다른 키 값을 사용합니다. 데이터 속성을 필터링하려면 필터의 패턴에 올바른 키를 사용해야 합니다. 다음 표에는 지원되는 각 AWS 서비스에 대한 필터링 키가 나와 있습니다.

AWS 서비스 키 필터링
DynamoDB dynamodb
Kinesis data
Amazon MQ data
Amazon MSK value
자체 관리형 Apache Kafka value
Amazon SQS body

다음 섹션에서는 다양한 유형의 이벤트 소스에 대한 필터 패턴의 예제를 제공합니다. 또한 지원되는 수신 데이터 형식의 정의와 지원되는 각 서비스에 대한 필터 패턴 본문 형식을 제공합니다.

DynamoDB로 필터링

프라이머리 키 CustomerNameAccountManagerPaymentTerms 속성이 있는 DynamoDB 테이블이 있다고 가정해 보겠습니다. 다음은 DynamoDB 테이블 스트림의 예제 레코드를 보여줍니다.

{ "eventID": "1", "eventVersion": "1.0", "dynamodb": { "ApproximateCreationDateTime": "1678831218.0", "Keys": { "CustomerName": { "S": "AnyCompany Industries" }, "NewImage": { "AccountManager": { "S": "Pat Candella" }, "PaymentTerms": { "S": "60 days" }, "CustomerName": { "S": "AnyCompany Industries" } }, "SequenceNumber": "111", "SizeBytes": 26, "StreamViewType": "NEW_IMAGE" } } }

DynamoDB 테이블의 키 및 속성 값을 기준으로 필터링하려면 레코드의 dynamodb 키를 사용하세요. 다음 섹션에는 다양한 필터 유형에 대한 예제가 나와 있습니다.

테이블 키로 필터링

프라이머리 키 CustomerName이 'AnyCompany Industries'인 레코드만 함수에서 처리하도록 하려는 경우를 가정해 보겠습니다. FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"Keys\" : { \"CustomerName\" : { \"S\" : [ \"AnyCompany Industries\" ] } } } }" } ] }

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

{ "dynamodb": { "Keys": { "CustomerName": { "S": [ "AnyCompany Industries" ] } } } }

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

Console

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

{ "dynamodb" : { "Keys" : { "CustomerName" : { "S" : [ "AnyCompany Industries" ] } } } }
AWS CLI

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

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:dynamodb:us-east-2:123456789012:table/my-table \ --filter-criteria '{"Filters": [{"Pattern": "{ \"dynamodb\" : { \"Keys\" : { \"CustomerName\" : { \"S\" : [ \"AnyCompany Industries\" ] } } } }"}]}'

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

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"dynamodb\" : { \"Keys\" : { \"CustomerName\" : { \"S\" : [ \"AnyCompany Industries\" ] } } } }"}]}'
AWS SAM

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

FilterCriteria: Filters: - Pattern: '{ "dynamodb" : { "Keys" : { "CustomerName" : { "S" : [ "AnyCompany Industries" ] } } } }'

테이블 속성으로 필터링

DynamoDB에서는 NewImageOldImage 키를 사용하여 속성 값을 필터링할 수도 있습니다. 최신 테이블 이미지의 AccountManager 속성이 'Pat Candella' 또는 'Shirley Rodriguez'인 레코드를 필터링하려고 한다고 가정해 보겠습니다. FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\", \"Shirley Rodriguez\" ] } } } }" } ] }

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

{ "dynamodb": { "NewImage": { "AccountManager": { "S": [ "Pat Candella", "Shirley Rodriguez" ] } } } }

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

Console

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

{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella", "Shirley Rodriguez" ] } } } }
AWS CLI

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

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:dynamodb:us-east-2:123456789012:table/my-table \ --filter-criteria '{"Filters": [{"Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\", \"Shirley Rodriguez\" ] } } } }"}]}'

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

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\", \"Shirley Rodriguez\" ] } } } }"}]}'
AWS SAM

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

FilterCriteria: Filters: - Pattern: '{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella", "Shirley Rodriguez" ] } } } }'

부울 표현식으로 필터링

부울 AND 표현식을 사용하여 필터를 생성할 수도 있습니다. 이러한 표현식에는 테이블의 키 및 속성 파라미터가 모두 포함될 수 있습니다. AccountManager의 NewImage 값이 'Pat Candella'이고 OldImage 값이 'Terry Whitlock'인 레코드를 필터링하려고 한다고 가정해 보겠습니다. FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\" ] } } } , \"dynamodb\" : { \"OldImage\" : { \"AccountManager\" : { \"S\" : [ \"Terry Whitlock\" ] } } } }" } ] }

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

{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella" ] } } }, "dynamodb": { "OldImage": { "AccountManager": { "S": [ "Terry Whitlock" ] } } } }

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

Console

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

{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella" ] } } } , "dynamodb" : { "OldImage" : { "AccountManager" : { "S" : [ "Terry Whitlock" ] } } } }
AWS CLI

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

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:dynamodb:us-east-2:123456789012:table/my-table \ --filter-criteria '{"Filters": [{"Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\" ] } } } , \"dynamodb\" : { \"OldImage\" : { \"AccountManager\" : { \"S\" : [ \"Terry Whitlock\" ] } } } } "}]}'

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

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\" ] } } } , \"dynamodb\" : { \"OldImage\" : { \"AccountManager\" : { \"S\" : [ \"Terry Whitlock\" ] } } } } "}]}'
AWS SAM

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

FilterCriteria: Filters: - Pattern: '{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella" ] } } } , "dynamodb" : { "OldImage" : { "AccountManager" : { "S" : [ "Terry Whitlock" ] } } } }'
참고

DynamoDB 이벤트 필터링은 숫자 연산자(숫자 등호 및 숫자 범위)의 사용을 지원하지 않습니다. 테이블의 항목이 숫자로 저장되더라도 이러한 파라미터는 JSON 레코드 객체의 문자열로 변환됩니다.

DynamoDB에서 Exists 연산자 사용

DynamoDB의 JSON 이벤트 객체가 구조화되는 방식으로 인해 Exists 연산자를 사용하려면 특별한 주의가 필요합니다. Exists 연산자는 이벤트 JSON의 리프 노드에서만 작동하므로 필터 패턴이 Exists를 사용하여 중간 노드를 테스트하는 경우에는 작동하지 않습니다. 다음 DynamoDB 테이블 항목을 고려하세요.

{ "UserID": {"S": "12345"}, "Name": {"S": "John Doe"}, "Organizations": {"L": [ {"S":"Sales"}, {"S":"Marketing"}, {"S":"Support"} ] } }

"Organizations"가 포함된 이벤트를 테스트하는 다음과 같은 필터 패턴을 생성할 수 있습니다.

{ "dynamodb" : { "NewImage" : { "Organizations" : [ { "exists": true } ] } } }

그러나 이 필터 패턴은 "Organizations"가 리프 노드가 아니므로 일치하는 항목을 반환하지 않습니다. 다음 예제에서는 Exists 연산자를 올바르게 사용하여 원하는 필터 패턴을 구성하는 방법을 보여줍니다.

{ "dynamodb" : { "NewImage" : {"Organizations": {"L": {"S": [ {"exists": true } ] } } } } }

DynamoDB 필터링을 위한 JSON 형식

DynamoDB 소스에서 이벤트를 올바르게 필터링하려면 데이터 필드와 데이터 필드(dynamodb)의 필터 기준이 모두 유효한 JSON 형식이어야 합니다. 두 필드 중 하나가 유효한 JSON 형식이 아닌 경우 Lambda는 해당 메시지를 삭제하거나 예외를 발생시킵니다. 다음 표에는 특정 동작이 요약되어 있습니다.

수신 데이터 형식 데이터 속성에 대한 필터 패턴 형식 결과적 작업

유효한 JSON

유효한 JSON

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

유효한 JSON

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

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

유효한 JSON

JSON 외

이벤트 소스 매핑 생성 또는 업데이트 시 Lambda에서 예외가 발생합니다. 데이터 속성에 대한 필터 패턴은 유효한 JSON 형식이어야 합니다.

JSON 외

유효한 JSON

Lambda는 해당 레코드를 삭제합니다.

JSON 외

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

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

JSON 외

JSON 외

이벤트 소스 매핑 생성 또는 업데이트 시 Lambda에서 예외가 발생합니다. 데이터 속성에 대한 필터 패턴은 유효한 JSON 형식이어야 합니다.

Kinesis로 필터링

생산자가 JSON 형식의 데이터를 Kinesis 데이터 스트림에 넣고 있다고 가정해 보겠습니다. 예제 레코드는 다음과 같으며, JSON 데이터는 data 필드에서 Base64로 인코딩된 문자열로 변환됩니다.

{ "kinesis": { "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": "eyJSZWNvcmROdW1iZXIiOiAiMDAwMSIsICJUaW1lU3RhbXAiOiAieXl5eS1tbS1kZFRoaDptbTpzcyIsICJSZXF1ZXN0Q29kZSI6ICJBQUFBIn0=", "approximateArrivalTimestamp": 1545084650.987 }, "eventSource": "aws:kinesis", "eventVersion": "1.0", "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", "eventName": "aws:kinesis:record", "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", "awsRegion": "us-east-2", "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" }

생산자가 스트림에 넣는 데이터가 유효한 JSON이면 이벤트 필터링을 사용하여 data 키로 레코드를 필터링할 수 있습니다. 생산자가 다음 JSON 형식으로 레코드를 Kinesis 스트림에 넣고 있다고 가정해 보겠습니다.

{ "record": 12345, "order": { "type": "buy", "stock": "ANYCO", "quantity": 1000 } }

주문 유형이 'buy'인 레코드만 필터링하려면 FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"data\" : { \"order\" : { \"type\" : [ \"buy\" ] } } }" } ] }

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

{ "data": { "order": { "type": [ "buy" ] } } }

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

Console

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

{ "data" : { "order" : { "type" : [ "buy" ] } } }
AWS CLI

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

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:kinesis:us-east-2:123456789012:stream/my-stream \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"order\" : { \"type\" : [ \"buy\" ] } } }"}]}'

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

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

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

FilterCriteria: Filters: - Pattern: '{ "data" : { "order" : { "type" : [ "buy" ] } } }'

Kinesis 소스에서 이벤트를 올바르게 필터링하려면 데이터 필드와 데이터 필드의 필터 기준이 모두 유효한 JSON 형식이어야 합니다. 두 필드 중 하나가 유효한 JSON 형식이 아닌 경우 Lambda는 해당 메시지를 삭제하거나 예외를 발생시킵니다. 다음 표에는 특정 동작이 요약되어 있습니다.

수신 데이터 형식 데이터 속성에 대한 필터 패턴 형식 결과적 작업

유효한 JSON

유효한 JSON

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

유효한 JSON

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

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

유효한 JSON

JSON 외

이벤트 소스 매핑 생성 또는 업데이트 시 Lambda에서 예외가 발생합니다. 데이터 속성에 대한 필터 패턴은 유효한 JSON 형식이어야 합니다.

JSON 외

유효한 JSON

Lambda는 해당 레코드를 삭제합니다.

JSON 외

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

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

JSON 외

JSON 외

이벤트 소스 매핑 생성 또는 업데이트 시 Lambda에서 예외가 발생합니다. 데이터 속성에 대한 필터 패턴은 유효한 JSON 형식이어야 합니다.

Kinesis 집계 레코드 필터링

Kinesis를 사용하면 여러 레코드를 단일 Kinesis Data Streams 레코드로 집계하여 데이터 처리량을 늘릴 수 있습니다. Lambda는 Kinesis 향상된 팬아웃을 사용할 때 집계 레코드에만 필터 기준을 적용할 수 있습니다. 표준 Kinesis를 사용하여 집계 레코드를 필터링하는 것은 지원되지 않습니다. 향상된 팬아웃을 사용하는 경우 Lambda 함수의 트리거 역할을 하도록 Kinesis 전용 처리량 소비자를 구성합니다. 그런 다음 Lambda는 집계 레코드를 필터링하고 필터 기준을 충족하는 레코드만 전달합니다.

Kinesis 레코드 집계에 대해 자세히 알아보려면 Kinesis Producer Library(KPL) 주요 개념 페이지의 집계 섹션을 참조하세요. Kinesis 향상된 팬아웃과 함께 Lambda를 사용하는 방법에 대해 자세히 알아보려면 AWS 컴퓨팅 블로그의 Amazon Kinesis Data Streams 향상된 팬아웃 및 AWS Lambda로 실시간 스트림 처리 성능 향상을 참조하세요.

Amazon MQ로 필터링

Amazon MQ 메시지 대기열에 유효한 JSON 형식 또는 일반 문자열의 메시지가 포함되어 있다고 가정해 보겠습니다. 예제 레코드는 다음과 같으며, 데이터는 data 필드에서 Base64로 인코딩된 문자열로 변환됩니다.

ActiveMQ
{ "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/text-message", "deliveryMode": 1, "replyTo": null, "type": null, "expiration": "60000", "priority": 1, "correlationId": "myJMSCoID", "redelivered": false, "destination": { "physicalName": "testQueue" }, "data":"QUJDOkFBQUE=", "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959, "properties": { "index": "1", "doAlarm": "false", "myCustomProperty": "value" } }
RabbitMQ
{ "basicProperties": { "contentType": "text/plain", "contentEncoding": null, "headers": { "header1": { "bytes": [ 118, 97, 108, 117, 101, 49 ] }, "header2": { "bytes": [ 118, 97, 108, 117, 101, 50 ] }, "numberInHeader": 10 }, "deliveryMode": 1, "priority": 34, "correlationId": null, "replyTo": null, "expiration": "60000", "messageId": null, "timestamp": "Jan 1, 1970, 12:33:41 AM", "type": null, "userId": "AIDACKCEVSQ6C2EXAMPLE", "appId": null, "clusterId": null, "bodySize": 80 }, "redelivered": false, "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==" }

Active MQ 및 Rabbit MQ 브로커 모두에 이벤트 필터링을 사용하여 data 키로 레코드를 필터링할 수 있습니다. Amazon MQ 대기열에 다음 JSON 형식의 메시지가 포함되어 있다고 가정해 보겠습니다.

{ "timeout": 0, "IPAddress": "203.0.113.254" }

timeout 필드가 0보다 큰 레코드만 필터링하려는 경우 FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0] } } ] } }" } ] }

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

{ "data": { "timeout": [ { "numeric": [ ">", 0 ] } ] } }

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

Console

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

{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }
AWS CLI

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

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'

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

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

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

FilterCriteria: Filters: - Pattern: '{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }'

Amazon MQ를 사용하면 메시지가 일반 문자열인 레코드를 필터링할 수도 있습니다. 메시지가 'Result:'로 시작하는 레코드만 처리하려고 한다고 가정해 보겠습니다. FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }" } ] }

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

{ "data": [ { "prefix": "Result: " } ] }

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

Console

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

{ "data" : [ { "prefix": "Result: " } ] }
AWS CLI

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

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'

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

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

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

FilterCriteria: Filters: - Pattern: '{ "data" : [ { "prefix": "Result " } ] }'

Amazon MQ 메시지는 UTF-8 인코딩 문자열이어야 하며, 일반 문자열이거나 JSON 형식이어야 합니다. 이는 Lambda가 필터 기준을 적용하기 전에 Amazon MQ 바이트 배열을 UTF-8로 디코딩하기 때문입니다. 메시지가 UTF-16 또는 ASCII와 같은 다른 인코딩을 사용하거나 메시지 형식이 FilterCriteria 형식과 일치하지 않는 경우 Lambda는 메타데이터 필터만 처리합니다. 다음 표에는 특정 동작이 요약되어 있습니다.

수신 메시지 형식 메시지 속성에 대한 필터 패턴 형식 결과적 작업

일반 문자열

일반 문자열

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

일반 문자열

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

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

일반 문자열

유효한 JSON

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

유효한 JSON

일반 문자열

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

유효한 JSON

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

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

유효한 JSON

유효한 JSON

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

UTF-8이 아닌 인코딩 문자열

JSON, 일반 문자열 또는 패턴 없음

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

Amazon MSK 및 자체 관리형 Apache Kafka로 필터링

생산자가 Amazon MSK 또는 자체 관리형 Apache Kafka 클러스터의 주제에 유효한 JSON 형식 또는 일반 문자열로 메시지를 작성한다고 가정해 보겠습니다. 예제 레코드는 다음과 같으며, 메시지는 value 필드에서 Base64로 인코딩된 문자열로 변환됩니다.

{ "mytopic-0":[ { "topic":"mytopic", "partition":0, "offset":15, "timestamp":1545084650987, "timestampType":"CREATE_TIME", "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "headers":[] } ] }

Apache Kafka 생산자가 다음 JSON 형식으로 주제에 메시지를 작성하고 있다고 가정해 보겠습니다.

{ "device_ID": "AB1234", "session":{ "start_time": "yyyy-mm-ddThh:mm:ss", "duration": 162 } }

value 키를 사용하여 레코드를 필터링할 수 있습니다. device_ID가 문자 AB로 시작하는 레코드만 필터링하려고 한다고 가정해 보겠습니다. FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"value\" : { \"device_ID\" : [ { \"prefix\": \"AB\" } ] } }" } ] }

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

{ "value": { "device_ID": [ { "prefix": "AB" } ] } }

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

Console

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

{ "value" : { "device_ID" : [ { "prefix": "AB" } ] } }
AWS CLI

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

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:kafka:us-east-2:123456789012:cluster/my-cluster/b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \ --filter-criteria '{"Filters": [{"Pattern": "{ \"value\" : { \"device_ID\" : [ { \"prefix\": \"AB\" } ] } }"}]}'

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

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

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

FilterCriteria: Filters: - Pattern: '{ "value" : { "device_ID" : [ { "prefix": "AB" } ] } }'

Amazon MSK 및 자체 관리형 Apache Kafka를 사용하면 메시지가 일반 문자열인 레코드를 필터링할 수도 있습니다. 문자열이 'error'인 메시지를 무시하려고 한다고 가정해 보겠습니다. FilterCriteria 객체는 다음과 같습니다.

{ "Filters": [ { "Pattern": "{ \"value\" : [ { \"anything-but\": [ \"error\" ] } ] }" } ] }

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

{ "value": [ { "anything-but": [ "error" ] } ] }

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

Console

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

{ "value" : [ { "anything-but": [ "error" ] } ] }
AWS CLI

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

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:kafka:us-east-2:123456789012:cluster/my-cluster/b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \ --filter-criteria '{"Filters": [{"Pattern": "{ \"value\" : [ { \"anything-but\": [ \"error\" ] } ] }"}]}'

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

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

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

FilterCriteria: Filters: - Pattern: '{ "value" : [ { "anything-but": [ "error" ] } ] }'

Amazon MSK 및 자체 관리형 Apache Kafka 메시지는 UTF-8 인코딩 문자열이어야 하며, 일반 문자열이거나 JSON 형식이어야 합니다. 이는 Lambda가 필터 기준을 적용하기 전에 Amazon MSK 바이트 배열을 UTF-8로 디코딩하기 때문입니다. 메시지가 UTF-16 또는 ASCII와 같은 다른 인코딩을 사용하거나 메시지 형식이 FilterCriteria 형식과 일치하지 않는 경우 Lambda는 메타데이터 필터만 처리합니다. 다음 표에는 특정 동작이 요약되어 있습니다.

수신 메시지 형식 메시지 속성에 대한 필터 패턴 형식 결과적 작업

일반 문자열

일반 문자열

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

일반 문자열

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

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

일반 문자열

유효한 JSON

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

유효한 JSON

일반 문자열

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

유효한 JSON

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

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

유효한 JSON

유효한 JSON

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

UTF-8이 아닌 인코딩 문자열

JSON, 일반 문자열 또는 패턴 없음

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

Amazon SQS로 필터링

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

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

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

{ "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\n "RecordNumber": 0000,\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는 필터 기준에 따라 필터링합니다.