Amazon SNS에서 필터 정책 제약 조건 - Amazon Simple Notification Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon SNS에서 필터 정책 제약 조건

Amazon SNS에서 필터 정책을 설정할 때 유의해야 할 몇 가지 중요한 규칙이 있습니다. 이러한 규칙은 시스템 성능과 호환성을 유지하면서 필터 정책을 효과적으로 적용하는 데 도움이 됩니다.

필터 정책 제약 조건

Amazon SNS에서 필터 정책을 구성할 때 다음과 같은 중요한 규칙을 따라 시스템 성능과 호환성을 유지하면서 효과적으로 작동하는지 확인합니다.

  • 문자열 일치 - 필터 정책에서 문자열 일치의 경우 비교는 대/소문자를 구분합니다.

  • 숫자 일치 - 숫자 일치의 경우 값의 범위는 -109~109(-10억~10억)이며 소수점 뒤의 정확도는 5자리입니다.

  • 필터 정책 복잡성 - 필터 정책의 총 값 조합은 150을 초과해서는 안 됩니다. 전체 조합을 계산하려면 필터 정책에 있는 각 어레이의 값의 개수를 곱합니다.

  • 키 수 제한 - 필터 정책에는 최대 5개의 키가 있을 수 있습니다.

추가 고려 사항
  • 필터 정책의 JSON에는 다음이 포함될 수 있습니다.

    • 인용 부호로 묶인 문자열

    • 숫자

    • 인용 부호 없는 키워드 true, falsenull

  • Amazon SNS API를 사용하는 경우 필터 정책의 JSON을 유효한 UTF-8 문자열로 전달해야 합니다.

  • 필터 정책의 최대 크기는 256KB입니다.

  • 기본적으로 주제당 최대 200개의 필터 정책과 AWS 계정당 10,000개의 필터 정책을 가질 수 있습니다.

    이 정책 제한은 Subscribe API를 사용하여 Amazon SQS 대기열 구독이 생성되는 것을 중지하지 않습니다. 하지만 Subscribe API 호출(또는 SetSubscriptionAttributes API 호출)에 필터 정책을 연결하면 실패합니다.

    할당량 증가를 요청하려면 AWS Service Quotas를 사용합니다.

속성 기반 필터링에 대한 정책 제약 조건

속성 기반 필터링은 기본 옵션으로, 구독에서 FilterPolicyScopeMessageAttributes로 설정되어 있습니다.

  • Amazon SNS는 속성 기반 필터링을 위한 중첩된 필터 정책을 허용하지 않습니다.

  • Amazon SNS는 다음 데이터 형식을 갖는 메시지 속성만 정책 속성과 비교합니다.

    • String

    • String.Array

    중요

    Amazon SNS에서 속성 기반 필터링을 사용하는 경우 특정 특수 문자, 특히 다음을 이중 이스케이프해야 합니다.

    • 큰따옴표(")

    • 백슬래시()

    이러한 문자를 두 번 이스케이프하지 않으면 필터 정책이 게시된 메시지의 속성과 일치하지 않고 알림이 전달되지 않습니다.

추가 고려 사항

  • 배열에 객체를 전달하면 속성 기반 필터링에서 지원되지 않는 중첩으로 인해 예상치 못한 결과가 발생할 수 있으므로 권장되지 않습니다. 중첩된 정책에 페이로드 기반 필터링을 사용합니다.

  • Number는 숫자 속성 값에 대해 지원됩니다.

  • Amazon SNS는 이진 데이터 형식의 메시지 속성을 무시합니다.

복잡성에 대한 정책 예제:

다음 정책 예제에서 첫 번째 키에는 세 개의 일치 연산자가 있고, 두 번째 키에는 하나의 일치 연산자가 있으며, 세 번째 키에는 두 개의 일치 연산자가 있습니다.

{ "key_a": ["value_one", "value_two", "value_three"], "key_b": ["value_one"], "key_c": ["value_one", "value_two"] }

총 조합은 필터 정책의 각 키에 대한 일치 연산자 수의 곱으로 계산됩니다.

3(match operators of key_a) x 1(match operators of key_b) x 2(match operators of key_c) = 6

페이로드 기반 필터링에 대한 정책 제약 조건

속성 기반(기본값)에서 페이로드 기반 필터링으로 전환하려면 구독에서 FilterPolicyScopeMessageBody로 설정해야 합니다.

  • Amazon SNS는 페이로드 기반 필터링을 위한 중첩된 필터 정책을 허용합니다.

  • 중첩된 정책의 경우 리프 키5개의 키 제한에 포함됩니다.

키 제한에 대한 정책 예제:

다음 정책 예제에서는 다음과 같습니다.

  • 리프 키에는 key_c 및 라는 두 가지가 있습니다key_e.

  • key_c 에는 중첩 수준이 34개의 일치 연산자가 있고, key_e에는 중첩 수준이 23개의 일치 연산자가 있습니다.

{ "key_a": { "key_b": { "key_c": ["value_one", "value_two", "value_three", "value_four"] } }, "key_d": { "key_e": ["value_one", "value_two", "value_three"] } }

총 조합은 필터 정책의 각 키에 대한 중첩 수준과 일치 연산자 수의 곱으로 계산됩니다.

4(match operators of key_c) x 3(nested level of key_c) x 3(match operators of key_e) x 2(nested level of key_e) = 72

와일드카드 패턴 사용 지침

Amazon SQS는 와일드카드가 포함된 필터 정책을 등록할 때에 대한 보호를 구현하여 필터 정책이 너무 복잡하게 생성되지 않도록 합니다. 이는 애플리케이션 성능에 영향을 미치기 때문입니다.

패턴 구조

필드에는 하나 이상의 패턴이 포함됩니다. 다음 예제에서는 두 가지 패턴을 사용하는 필드를 보여줍니다.

{ "greeting": [ {"anything-but": {"prefix": "Hello"}}, {"wildcard": "H*"} ] // 2 patterns }

복잡성 규칙

  • 모든 필드의 총 와일드카드 복잡성은 100점을 초과해서는 안 됩니다.

  • 패턴당 최대 3개의 와일드카드

복잡성 계산

  • 필드 복잡성 = (Sum of pattern points) × (Number of patterns)

  • 패턴 포인트:

    단일 와일드카드: 1점

    여러 와일드카드: 각각 3점

    Anything-but: 1점

    다음은 복잡성 계산의 예입니다.

    { "filename": [ {"wildcard": "*.txt"}, // 1 point {"wildcard": "log*"} // 1 point ] // Total: (1 + 1) × 2 = 4 points }