Lambda가 함수로 보내는 이벤트 제어

Lambda가 함수로 보내는 이벤트 제어 (Control which events Lambda sends to your function)

이벤트 필터링을 사용해 스트림이나 큐에서 Lambda가 함수로 보내는 레코드를 제어할 수 있어요. 예를 들어 특정 데이터 매개 변수가 포함된 Amazon SQS 메시지만 함수가 처리하도록 필터를 추가할 수 있어요. 이벤트 필터링은 특정 이벤트 소스 매핑에서만 작동해요. 다음 AWS 서비스의 이벤트 소스 매핑에 필터를 추가할 수 있어요.

출처: AWS Lambda 개발자 안내서

본문

  • Amazon DynamoDB
  • Amazon Kinesis Data Streams
  • Amazon MQ
  • Amazon Managed Streaming for Apache Kafka(Amazon MSK)
  • Self-managed Apache Kafka
  • Amazon Simple Queue Service(Amazon SQS)

특정 이벤트 소스와 필터링에 대한 구체적인 정보는 다른 AWS 서비스와 함께 필터 사용을 참고하세요. Lambda는 Amazon DocumentDB에 대한 이벤트 필터링을 지원하지 않아요.

기본적으로 단일 이벤트 소스 매핑에 대해 최대 다섯 개의 서로 다른 필터를 정의할 수 있어요. 필터는 논리적으로 OR로 연결돼요. 이벤트 소스의 레코드가 필터 중 하나 이상을 충족하면 Lambda는 레코드를 함수로 보내는 다음 이벤트에 포함해요. 필터 중 어느 것도 충족하지 않으면 Lambda는 레코드를 버려요.

참고

이벤트 소스에 대해 다섯 개 이상의 필터를 정의해야 한다면 각 이벤트 소스에 대해 최대 10개 필터까지 할당량 증가를 요청할 수 있어요. 현재 할당량이 허용하는 것보다 더 많은 필터를 추가하려고 하면 이벤트 소스를 만들려고 할 때 Lambda가 오류를 반환해요.

이벤트 필터링 기본 이해 (Understanding event filtering basics)

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

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

명확성을 위해 필터의 Pattern 값을 일반 JSON으로 확장한 값은 다음과 같아요.

{
    "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"
}
  • 메타데이터 속성(Metadata properties) 은 레코드를 만든 이벤트에 대한 정보를 담고 있는 필드예요. 예제 Amazon SQS 레코드에서 메타데이터 속성에는 messageID, eventSourceArn, awsRegion 같은 필드가 포함돼요.
  • 데이터 속성(Data properties) 은 스트림이나 큐의 데이터를 담고 있는 레코드 필드예요. Amazon SQS 이벤트 예제에서 데이터 필드의 키는 body 이고, 데이터 속성은 City, State, Temperature 필드예요.

서로 다른 유형의 이벤트 소스는 데이터 필드에 서로 다른 키 값을 사용해요. 데이터 속성으로 필터링하려면 필터 패턴에서 올바른 키를 사용해야 해요. 데이터 필터링 키 목록과 각 지원 AWS 서비스에 대한 필터 패턴 예제를 보려면 다른 AWS 서비스와 함께 필터 사용을 참고하세요.

이벤트 필터링은 다단계 JSON 필터링을 처리할 수 있어요. 예를 들어 DynamoDB 스트림 레코드의 다음 조각을 고려해요.

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

정렬 키 Number 의 값이 4567인 레코드만 처리한다고 가정해요. 이 경우 FilterCriteria 객체는 다음과 같아요.

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

명확성을 위해 필터의 Pattern 값을 일반 JSON으로 확장한 값은 다음과 같아요.

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

필터 기준을 충족하지 않는 레코드 처리 (Handling records that don't meet filter criteria)

필터 기준을 충족하지 않는 레코드를 Lambda가 처리하는 방식은 이벤트 소스에 따라 달라져요.

  • Amazon SQS 의 경우 메시지가 필터 기준을 충족하지 않으면 Lambda가 큐에서 메시지를 자동으로 제거해요. Amazon SQS에서 이러한 메시지를 수동으로 삭제할 필요는 없어요.
  • Kinesis 와 DynamoDB 의 경우 필터 기준이 레코드를 평가한 후 스트림 반복자가 이 레코드를 지나 전진해요. 레코드가 필터 기준을 충족하지 않으면 이벤트 소스에서 레코드를 수동으로 삭제할 필요가 없어요. 보존 기간이 지나면 Kinesis와 DynamoDB가 이러한 오래된 레코드를 자동으로 삭제해요. 레코드를 더 빨리 삭제하려면 데이터 보존 기간 변경을 참고하세요.
  • Amazon MSK, self-managed Apache Kafka, Amazon MQ 메시지의 경우 Lambda는 필터에 포함된 모든 필드와 일치하지 않는 메시지를 버려요. Amazon MSK와 self-managed Apache Kafka의 경우 Lambda는 함수를 성공적으로 호출한 후 일치한 메시지와 일치하지 않은 메시지 모두에 대해 오프셋을 커밋해요. Amazon MQ의 경우 Lambda는 함수를 성공적으로 호출한 후 일치한 메시지를 승인하고, 일치하지 않은 메시지를 필터링할 때 승인해요.

필터 규칙 구문 (Filter rule syntax)

필터 규칙에 대해 Lambda는 Amazon EventBridge 규칙을 지원하며 EventBridge와 동일한 구문을 사용해요. 자세한 내용은 Amazon EventBridge User Guide의 Amazon EventBridge 이벤트 패턴을 참고하세요.

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

비교 연산자 예제 규칙 구문
Null UserID가 null "UserID": [ null ]
Empty LastName이 비어 있음 "LastName": [""]
Equals Name이 "Alice" "Name": [ "Alice" ]
Equals(대소문자 무시) Name이 "Alice" "Name": [ { "equals-ignore-case": "alice" } ]
And Location이 "New York"이고 Day가 "Monday" "Location": [ "New York" ], "Day": ["Monday"]
Or PaymentType이 "Credit" 또는 "Debit" "PaymentType": [ "Credit", "Debit"]
Or(여러 필드) Location이 "New York"이거나 Day가 "Monday" "$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ]
Not Weather가 "Raining"을 제외한 모든 것 "Weather": [ { "anything-but": [ "Raining" ] } ]
Numeric(같음) Price가 100 "Price": [ { "numeric": [ "=", 100 ] } ]
Numeric(범위) Price가 10보다 크고 20보다 작거나 같음 "Price": [ { "numeric": [ ">", 10, "<=", 20 ] } ]
Exists ProductName이 존재 "ProductName": [ { "exists": true } ]
Does not exist ProductName이 존재하지 않음 "ProductName": [ { "exists": false } ]
Begins with Region이 US에 있음 "Region": [ { "prefix": "us-" } ]
Ends with FileName이 .png 확장자로 끝남 "FileName": [ { "suffix": ".png" } ]

참고

EventBridge와 마찬가지로 문자열에 대해 Lambda는 대소문자 접기나 다른 문자열 정규화 없이 정확한 문자별 일치를 사용해요. 숫자에 대해서도 Lambda는 문자열 표현을 사용해요. 예를 들어 300, 300.0, 3.0e2는 동일한 것으로 간주되지 않아요.

Exists 연산자는 이벤트 소스 JSON의 리프 노드에서만 작동해요. 중간 노드와는 일치하지 않아요. 예를 들어 다음 JSON에서 필터 패턴 { "person": { "address": [ { "exists": true } ] } }" 은 "address" 가 중간 노드이므로 일치를 찾지 못해요.

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

이벤트 소스 매핑에 필터 기준 연결 (콘솔) (Attaching filter criteria to an event source mapping (console))

Lambda 콘솔을 사용해 필터 기준이 있는 새 이벤트 소스 매핑을 만들려면 다음 단계를 따라요.

필터 기준이 있는 새 이벤트 소스 매핑 만들기(콘솔)

  1. Lambda 콘솔의 Functions 페이지를 열어요.
  2. 이벤트 소스 매핑을 만들 함수의 이름을 선택해요.
  3. Function overview 아래에서 Add trigger 를 선택해요.
  4. Trigger configuration 에서 이벤트 필터링을 지원하는 트리거 유형을 선택해요. 지원되는 서비스 목록은 이 페이지 시작 부분의 목록을 참고하세요.
  5. Additional settings 를 확장해요.
  6. Filter criteria 아래에서 Add 를 선택한 다음 필터를 정의하고 입력해요. 예를 들어 다음을 입력할 수 있어요.
    { "Metadata" : [ 1, 2 ] }
    
    이렇게 하면 Metadata 필드가 1 또는 2와 같은 레코드만 처리하도록 Lambda에 지시해요. 허용되는 최대 개수까지 필터를 더 추가하려면 Add 를 계속 선택할 수 있어요.
  7. 필터 추가를 마쳤으면 Save 를 선택해요.

콘솔에서 필터 기준을 입력할 때 필터 패턴만 입력하고 Pattern 키를 제공하거나 따옴표를 이스케이프할 필요는 없어요. 앞선 지침의 6단계에서 { "Metadata" : [ 1, 2 ] } 는 다음 FilterCriteria 에 대응해요.

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

콘솔에서 이벤트 소스 매핑을 만든 후 트리거 세부 정보에서 형식이 지정된 FilterCriteria 를 볼 수 있어요. 콘솔을 사용해 이벤트 필터를 만드는 더 많은 예제는 다른 AWS 서비스와 함께 필터 사용을 참고하세요.

이벤트 소스 매핑에 필터 기준 연결 (AWS CLI) (Attaching filter criteria to an event source mapping (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가 필요하다는 점에 유의하세요. UUID는 list-event-source-mappings 호출에서 얻을 수 있어요. Lambda는 create-event-source-mapping CLI 응답에서도 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) (Attaching filter criteria to an event source mapping (AWS SAM))

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

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

이 필터 기준을 이벤트 소스 매핑에 추가하려면 이벤트 소스의 YAML 템플릿에 다음 스니펫을 삽입해요.

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

이벤트 소스 매핑에 대한 AWS SAM 템플릿 만들기 및 구성에 대한 자세한 내용은 AWS SAM Developer Guide의 EventSource 섹션을 참고하세요. AWS SAM 템플릿을 사용해 이벤트 필터를 만드는 더 많은 예제는 다른 AWS 서비스와 함께 필터 사용을 참고하세요.

필터 기준 암호화 (Encryption of filter criteria)

기본적으로 Lambda는 필터 기준 객체를 암호화하지 않아요. 필터 기준 객체에 민감한 정보를 포함할 수 있는 사용 사례의 경우 자체 KMS 키를 사용해 암호화할 수 있어요.

필터 기준 객체를 암호화한 후 GetEventSourceMapping API 호출을 사용해 일반 텍스트 버전을 볼 수 있어요. 필터 기준을 일반 텍스트로 보려면 kms:Decrypt 권한이 있어야 해요.

참고

필터 기준 객체가 암호화되면 Lambda는 ListEventSourceMappings 호출의 응답에서 FilterCriteria 필드 값을 편집(redact)해요. 대신 이 필드는 null 로 표시돼요. FilterCriteria 의 실제 값을 보려면 GetEventSourceMapping API를 사용해요.

콘솔에서 FilterCriteria 의 복호화된 값을 보려면 IAM 역할에 GetEventSourceMapping 권한이 포함되어 있는지 확인해요.

콘솔, API/CLI, CloudFormation을 통해 자체 KMS 키를 지정할 수 있어요.

고객 소유 KMS 키로 필터 기준 암호화(콘솔)

  1. Lambda 콘솔의 Functions 페이지를 열어요.
  2. Add trigger 를 선택해요. 기존 트리거가 이미 있다면 Configuration 탭을 선택한 다음 Triggers 를 선택해요. 기존 트리거를 선택하고 Edit 를 선택해요.
  3. Encrypt with customer managed KMS key 옆의 확인란을 선택해요.
  4. Choose a customer managed KMS encryption key 에서 기존 활성 키를 선택하거나 새 키를 만들어요. 작업에 따라 kms:DescribeKey, kms:GenerateDataKey, kms:Decrypt 권한 중 일부 또는 전부가 필요해요. KMS 키 정책을 사용해 이러한 권한을 부여해요.

자체 KMS 키를 사용하면 키 정책에서 다음 API 작업을 허용해야 해요.

  • kms:Decrypt – 리전 Lambda 서비스 프린시펄(lambda.<AWS_region>.amazonaws.com)에 부여해야 해요. 이를 통해 Lambda가 이 KMS 키로 데이터를 복호화할 수 있어요. 교차 서비스 혼동된 대리인(confused deputy) 문제를 방지하기 위해 키 정책은 aws:SourceArn 전역 조건 키를 사용해요. aws:SourceArn 키의 올바른 값은 이벤트 소스 매핑 리소스의 ARN이므로, ARN을 알아야만 정책에 추가할 수 있어요. Lambda는 KMS에 복호화 요청을 할 때 암호화 컨텍스트에 aws:lambda:FunctionArn 와 aws:lambda:EventSourceArn 키와 각각의 값도 전달해요. 복호화 요청이 성공하려면 이 값들이 키 정책의 지정된 조건과 일치해야 해요. Self-managed Kafka 이벤트 소스는 EventSourceArn이 없으므로 포함할 필요가 없어요.
  • kms:Decrypt – GetEventSourceMapping 또는 DeleteEventSourceMapping API 호출에서 일반 텍스트 필터 기준을 보기 위해 키를 사용하려는 프린시펄에도 부여해야 해요.
  • kms:DescribeKey – 지정된 프린시펄이 키를 사용할 수 있도록 고객 관리 키 세부 정보를 제공해요.
  • kms:GenerateDataKey – 지정된 프린시펄을 대신해(봉투 암호화) 필터 기준을 암호화하기 위해 Lambda가 데이터 키를 생성할 수 있는 권한을 제공해요.

AWS CloudTrail을 사용해 Lambda가 여러분을 대신해 만드는 AWS KMS 요청을 추적할 수 있어요. 샘플 CloudTrail 이벤트는 Lambda용 암호화 키 모니터링을 참고하세요.

또한 kms:ViaService 조건 키를 사용해 KMS 키 사용을 Lambda의 요청으로만 제한하는 것을 권장해요. 이 키의 값은 리전 Lambda 서비스 프린시펄(lambda.<AWS_region>.amazonaws.com)이에요. 다음은 관련 권한을 모두 부여하는 샘플 키 정책이에요.

예제 AWS KMS 키 정책

{
    "Version":"2012-10-17",
    "Id": "example-key-policy-1",
    "Statement": [
        {
            "Sid": "Allow Lambda to decrypt using the key",
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.us-east-1.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals" : {
                    "aws:SourceArn": [
                        "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:<esm_uuid>"
                    ]
                },
                "StringEquals": {
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:test-function",
                    "kms:EncryptionContext:aws:lambda:EventSourceArn": "arn:aws:sqs:us-east-1:123456789012:test-queue"
                }
            }
        },
        {
            "Sid": "Allow actions by an AWS account on the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key to specific roles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
            },
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals" : {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com"
                }
            }
        }
    ]
}

필터 기준을 암호화하기 위해 자체 KMS 키를 사용하려면 다음 CreateEventSourceMapping AWS CLI 명령을 사용할 수도 있어요. --kms-key-arn 플래그로 KMS 키 ARN을 지정해요.

aws lambda create-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599

기존 이벤트 소스 매핑이 있다면 대신 UpdateEventSourceMapping AWS CLI 명령을 사용해요. --kms-key-arn 플래그로 KMS 키 ARN을 지정해요.

aws lambda update-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599

이 작업은 이전에 지정된 모든 KMS 키를 덮어써요. --kms-key-arn 플래그를 빈 인자와 함께 지정하면 Lambda는 필터 기준 암호화에 KMS 키를 사용하는 것을 중단해요. 대신 Lambda는 Amazon 소유 키를 사용하는 기본값으로 돌아가요.

CloudFormation 템플릿에서 자체 KMS 키를 지정하려면 AWS::Lambda::EventSourceMapping 리소스 유형의 KMSKeyArn 속성을 사용해요. 예를 들어 이벤트 소스의 YAML 템플릿에 다음 스니펫을 삽입할 수 있어요.

MyEventSourceMapping:
  Type: AWS::Lambda::EventSourceMapping
  Properties:
    ...
    FilterCriteria:
      Filters:
        - Pattern: '{"a": [1, 2]}'
    KMSKeyArn: "arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599"
    ...

GetEventSourceMapping 또는 DeleteEventSourceMapping API 호출에서 암호화된 필터 기준을 일반 텍스트로 보려면 kms:Decrypt 권한이 있어야 해요.

2024년 8월 6일부터 함수가 이벤트 필터링을 사용하지 않으면 FilterCriteria 필드는 CreateEventSourceMapping, UpdateEventSourceMapping, DeleteEventSourceMapping API 호출의 AWS CloudTrail 로그에 더 이상 표시되지 않아요. 함수가 이벤트 필터링을 사용하면 FilterCriteria 필드는 빈 값({ })으로 표시돼요. 올바른 KMS 키에 대한 kms:Decrypt 권한이 있다면 GetEventSourceMapping API 호출의 응답에서 필터 기준을 일반 텍스트로 계속 볼 수 있어요.

다음 AWS CloudTrail 샘플 로그 항목(CreateEventSourceMapping 호출)에서 함수가 이벤트 필터링을 사용하므로 FilterCriteria 가 빈 값({ })으로 표시돼요. FilterCriteria 객체에 함수가 적극적으로 사용하는 유효한 필터 기준이 포함된 경우에도 마찬가지예요. 함수가 이벤트 필터링을 사용하지 않으면 CloudTrail은 로그 항목에 FilterCriteria 필드를 전혀 표시하지 않아요.

{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:userid1",
        "arn": "arn:aws:sts::123456789012:assumed-role/Example/example-role",
        "accountId": "123456789012",
        "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA987654321EXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/User1",
                "accountId": "123456789012",
                "userName": "User1"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-05-09T20:35:01Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-05-09T21:05:41Z",
    "eventSource": "lambda.amazonaws.com",
    "eventName": "CreateEventSourceMapping20150331",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "functionName": "example-function",
        "enabled": true,
        "batchSize": 10,
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "scalingConfig": {},
        "maximumBatchingWindowInSeconds": 0,
        "sourceAccessConfigurations": []
    },
    "responseElements": {
        "uUID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
        "batchSize": 10,
        "maximumBatchingWindowInSeconds": 0,
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:example-function",
        "lastModified": "May 9, 2024, 9:05:41 PM",
        "state": "Creating",
        "stateTransitionReason": "USER_INITIATED",
        "functionResponseTypes": [],
        "eventSourceMappingArn": "arn:aws:lambda:us-east-2:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "sessionCredentialFromConsole": "true"
}

다른 AWS 서비스와 함께 필터 사용 (Using filters with different AWS services)

서로 다른 유형의 이벤트 소스는 데이터 필드에 서로 다른 키 값을 사용해요. 데이터 속성으로 필터링하려면 필터 패턴에서 올바른 키를 사용해야 해요. 다음 표는 각 지원 AWS 서비스에 대한 필터링 키를 제공해요.

AWS 서비스 필터링 키
DynamoDB dynamodb
Kinesis data
Amazon MQ data
Amazon MSK value
Self-managed Apache Kafka value
Amazon SQS body

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

더 알아보기 (Learn more)