기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon EventBridge Pipes의 이벤트 필터링
EventBridge 파이프를 사용하면 지정된 소스의 이벤트를 필터링하고 하위 집합만 처리할 수 있습니다. 이 필터링은 이벤트 패턴을 사용하여 EventBridge 이벤트 버스 또는 Lambda 이벤트 소스 매핑에서 필터링하는 것과 동일한 방식으로 작동합니다. 이벤트 패턴에 대한 자세한 내용은 Amazon EventBridge 이벤트 패턴 생성 섹션을 참조하세요.
필터 기준 FilterCriteria 객체는 필터(Filters) 목록으로 구성된 구조입니다. 각 필터는 필터링 패턴()을 정의하는 구조입니다Pattern. Pattern은 JSON 필터 규칙의 문자열 표현입니다. FilterCriteria 객체는 다음 예제와 같은 형태를 가집니다.
{ "Filters": [ {"Pattern": "{ \"Metadata1\": [ pattern1 ], \"data\": { \"Data1\": [ pattern2 ] }}" } ] }
명확성을 더하기 위해 일반 JSON으로 확장된 Pattern 필터의 값은 다음과 같습니다.
{ "Metadata1": [ pattern1 ], "data": {"Data1": [ pattern2 ]} }
Amazon Kinesis, Amazon MQ, Amazon MSK 및 자체 관리형 Apache Kafka는 페이로드에 Base64 인코딩을 적용하지만 메타데이터 필드는 적용하지 않습니다. 예를 들어 Kinesis 스트림에 다음과 같은 이벤트가 포함되어 있다고 가정해 보겠습니다.
{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": {"City": "Seattle", "State": "WA", "Temperature": "46", "Month": "December" }, "approximateArrivalTimestamp": 1545084650.987 }
이벤트가 파이프를 통과하여 흐르면 data 필드가 base64로 인코딩되어 다음과 같이 표시됩니다.
{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "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" }
이벤트 필터를 생성할 때 EventBridge 파이프는 이벤트 콘텐츠에 액세스할 수 있습니다. 이 콘텐츠는 Amazon SQS body 필드와 같이 JSON으로 이스케이프 처리되거나 Kinesis data 필드와 같이 base64로 인코딩됩니다. 데이터가 유효한 JSON인 경우 EventBridge 파이프가 자동으로 디코딩하므로 대상 파라미터의 입력 템플릿 또는 JSON 경로가 콘텐츠를 직접 참조할 수 있습니다. 예를 들어 Kinesis 이벤트 소스가 유효한 JSON인 경우 <$.data.someKey>를 사용하여 변수를 참조할 수 있습니다.
이 예제를 계속 진행하면서 객체 외부의 인코딩되지 않은 partitionKey 메타데이터와 data 객체 내부의 base64 인코딩 City 속성을 필터링하려면 다음 필터를 사용합니다data.
{ "partitionKey": [ "1" ], "data": { "City": [ "Seattle" ] } }
이벤트 패턴을 생성할 때 폴링 작업으로 추가된 필드가 아니라 소스 API에서 보낸 필드를 기준으로 필터링할 수 있습니다. 다음 필드는 이벤트 패턴에 사용할 수 없습니다.
awsRegioneventSourceeventSourceARNeventVersioneventIDeventNameinvokeIdentityArneventSourceKey
다음 섹션에서는 지원되는 각 이벤트 소스 유형에 대한 필터링 동작을 설명합니다.
Amazon SQS 메시지 필터링
Amazon SQS 메시지가 필터 기준을 충족하지 못하는 경우, EventBridge는 대기열에서 메시지를 자동으로 제거합니다. 이러한 메시지를 Amazon SQS에서 수동으로 삭제할 필요가 없습니다. 여러 파이프를 하나의 SQS 대기열에 연결하는 것은 유용한 설정일 가능성이 거의 없습니다. 파이프는 일치하지 않으면 삭제되는 메시지와 경쟁하고 있을 것입니다.
Amazon SQS 메시지 본문에는 JSON뿐만 아니라 모든 문자열이 포함될 수 있습니다. EventBridge 파이프는 FilterCriteria 형식이 유효한 JSON 또는 일반 문자열인 수신 메시지의 형식과 일치할 것으로 예상합니다. 불일치가 있는 경우 EventBridge 파이프는 메시지를 삭제합니다. 에 메타데이터로만 필터링하는 body가 포함되지 FilterCriteria 않은 경우 EventBridge 파이프는이 검사를 건너뜁니다. 다음 표에는 평가가 요약되어 있습니다.
| 필터 패턴 형식 | 수신 형식 | 결과 |
|---|---|---|
|
일반 문자열 |
일반 문자열 |
EventBridge는 필터 기준에 따라 필터링합니다. |
|
일반 문자열 |
유효한 JSON |
EventBridge가 메시지를 삭제합니다. |
|
유효한 JSON |
일반 문자열 |
EventBridge가 메시지를 삭제합니다. |
|
유효한 JSON |
유효한 JSON |
EventBridge는 필터 기준에 따라 필터링합니다. |
|
에 대한 필터 패턴 없음 |
일반 문자열 |
EventBridge는 필터 기준에 따라 필터링합니다. |
|
에 대한 필터 패턴 없음 |
유효한 JSON |
EventBridge는 필터 기준에 따라 필터링합니다. |
Kinesis 및 DynamoDB 메시지 필터링
필터 기준에서 Kinesis 또는 DynamoDB 레코드를 처리한 후 스트림 반복기가 이 레코드를 너머 진행됩니다. 레코드가 필터 조건을 충족하지 않으면 이벤트 소스에서 레코드를 수동으로 삭제할 필요가 없습니다. 보존 기간이 지나면 Kinesis 및 DynamoDB는 이러한 이전 레코드를 자동으로 삭제합니다. 레코드를 더 빨리 삭제하려면 데이터 보존 기간 변경을 참조하세요.
스트림 이벤트 소스에서 이벤트를 올바르게 필터링하려면 데이터 필드와 데이터 필드의 필터 기준이 모두 유효한 JSON 형식이어야 합니다. (Kinesis의 경우 데이터 필드는 data이고 DynamoDB의 경우 데이터 필드는 dynamodb입니다.) 두 필드 중 하나가 유효한 JSON 형식이 아닌 경우 EventBridge는 해당 메시지를 삭제하거나 예외를 발생시킵니다. 다음 표에는 특정 동작이 요약되어 있습니다.
| 필터 패턴 형식 | 수신 형식 | 결과 |
|---|---|---|
|
유효한 JSON |
유효한 JSON |
EventBridge는 필터 기준에 따라 필터링합니다. |
|
유효한 JSON |
JSON 외 |
EventBridge가 메시지를 삭제합니다. |
|
|
유효한 JSON |
EventBridge는 필터 기준에 따라 필터링합니다. |
|
|
JSON 외 |
EventBridge는 필터 기준에 따라 필터링합니다. |
|
JSON 외 |
임의 |
EventBridge는 파이프 생성 또는 업데이트 시 예외를 발생시킵니다. 필터 패턴은 유효한 JSON 형식이어야 합니다. |
Amazon Managed Streaming for Apache Kafka, 자체 관리형 Apache Kafka 및 Amazon MQ 메시지 필터링
참고
Apache Kafka 또는 Amazon MQ 이벤트 소스가 있는 파이프에 필터 기준을 연결한 후 필터링 규칙을 이벤트에 적용하는 데 최대 15분이 걸릴 수 있습니다.
Amazon MQ 소스의 경우 메시지 필드는 data입니다. Apache Kafka 소스(Amazon MSK 및 자체 관리형 Apache Kafka)의 경우 key 및 value라는 두 개의 메시지 필드가 있습니다.
EventBridge는 필터에 포함된 모든 필드와 일치하지 않는 메시지를 삭제합니다. Apache Kafka의 경우 EventBridge는 대상을 성공적으로 호출한 후 일치하는 메시지와 일치하지 않는 메시지에 대한 오프셋을 커밋합니다. Amazon MQ의 경우 EventBridge는 함수를 성공적으로 간접 호출한 후 일치하는 메시지를 확인하고, 일치하지 않는 메시지를 필터링할 때 확인합니다.
Apache Kafka와 Amazon MQ 메시지는 UTF-8 인코딩 문자열이어야 하며, 일반 문자열이거나 JSON 형식이어야 합니다. 이는 EventBridge가 필터 기준을 적용하기 전에 Apache Kafka 및 Amazon MQ 바이트 배열을 UTF-8로 디코딩하기 때문입니다. 메시지가 UTF-16 또는 ASCII와 같은 다른 인코딩을 사용하거나 메시지 형식이 FilterCriteria 형식과 일치하지 않는 경우 EventBridge는 메타데이터 필터만 처리합니다. 다음 표에는 특정 동작이 요약되어 있습니다.
| 필터 패턴 형식 | 수신 형식 | 결과 |
|---|---|---|
|
일반 문자열 |
일반 문자열 |
EventBridge는 필터 기준에 따라 필터링합니다. |
|
일반 문자열 |
유효한 JSON |
EventBridge는 메타데이터만 필터링하고 |
|
유효한 JSON |
일반 문자열 |
EventBridge는 메타데이터만 필터링하고 |
|
유효한 JSON |
유효한 JSON |
EventBridge는 필터 기준에 따라 필터링합니다. |
|
|
일반 문자열 |
EventBridge는 메타데이터만 필터링하고 |
|
|
유효한 JSON |
EventBridge는 메타데이터만 필터링하고 |
|
임의 |
UTF로 인코딩되지 않은 문자열 |
EventBridge는 메타데이터만 필터링하고 |
Lambda ESM과 EventBridge 파이프의 차이점
이벤트를 필터링할 때 Lambda ESM과 EventBridge 파이프는 일반적으로 동일한 방식으로 작동합니다. 주요 차이점은 ESM 페이로드에 eventSourceKey 필드가 없다는 것입니다.
파이프 필터에서 비교 연산자 사용
비교 연산자를 사용하면 이벤트의 필드 값과 일치하는 이벤트 패턴을 구성할 수 있습니다.
파이프 필터에 사용할 수 있도록 지원되는 비교 연산자의 전체 목록은 비교 연산자를 참조하세요.