View a markdown version of this page

Restrições da política de filtro no Amazon SNS - Amazon Simple Notification Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Restrições da política de filtro no Amazon SNS

Ao configurar políticas de filtro no Amazon SNS, há algumas regras importantes que você deve ter em mente. Essas regras ajudam a garantir a aplicação efetiva das políticas de filtro, ao mesmo tempo mantendo o desempenho e a compatibilidade do sistema.

Restrições da política de filtro

Ao configurar políticas de filtro no Amazon SNS, siga estas regras importantes para garantir que elas funcionem de forma eficaz, mantendo o desempenho e a compatibilidade do sistema:

  • Correspondência de string: para correspondência de strings na política de filtro, a comparação diferencia maiúsculas de minúsculas.

  • Correspondência numérica: para a correspondência numérica, o valor pode variar de -109 a 109 (-1 bilhão a 1 bilhão), com cinco dígitos de precisão após o separador decimal.

  • Complexidade de política de filtro: a combinação total de valores em uma política de filtro não deve exceder 150. Para calcular a combinação total, multiplique o número de valores em cada matriz na política de filtro.

  • Limitar o número de chaves: uma política de filtro pode ter no máximo cinco chaves.

Considerações adicionais
  • O JSON da política de filtro pode conter o seguinte:

    • Strings entre aspas

    • Números

    • As palavras-chave true, false e null, sem aspas

  • Ao usar a API do Amazon SNS, é necessário enviar o JSON da política de filtro como uma string UTF-8 válida.

  • O tamanho máximo de uma política de filtro é de 256 KB.

  • Por padrão, você pode ter até 200 políticas de filtro por tópico e 10.000 políticas de filtro por AWS conta.

    Esse limite de política não impedirá a criação de assinaturas de filas do Amazon SQS com a API Subscribe. No entanto, falhará quando você anexar a política de filtro à chamada de API Subscribe (ou na chamada de API SetSubscriptionAttributes).

    Para aumentar essa cota, use AWS Service Quotas.

Restrições de política para filtragem baseada em atributo

A filtragem baseada em atributo é a opção padrão. FilterPolicyScope é definido como MessageAttributes na assinatura.

  • O Amazon SNS não aceita uma política de filtro aninhada para filtragem baseada em atributo.

  • O Amazon SNS compara as propriedades de política somente com atributos de mensagens que tenham os seguintes tipos de dados:

    • String

    • String.Array

    Importante

    Ao usar filtragem baseada em atributos no Amazon SNS, você deve usar o escape duplo de certos caracteres especiais, especificamente:

    • Aspas duplas (")

    • Barras invertidas ()

    A falha no escape duplo desses caracteres fará com que a política de filtro não corresponda aos atributos de uma mensagem publicada, e a notificação não será entregue.

Considerações adicionais

  • Transmitir objetos em matrizes não é recomendado, pois pode gerar resultados inesperados devido ao aninhamento, o que não é compatível com a filtragem baseada em atributos. Usar filtragem baseada em carga para políticas aninhadas.

  • Number é compatível com valores de atributos numéricos.

  • O Amazon SNS ignora atributos de mensagens com o tipo de dados binário.

Exemplo de política para complexidade:

No exemplo de política a seguir, a primeira chave tem três operadores de correspondência, a segunda tem um operador de correspondência e a terceira tem dois operadores de correspondência.

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

A combinação total é calculada como o produto do número de operadores de correspondência para cada chave na política de filtro:

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

Restrições de política para filtragem baseada em carga útil

Para mudar da filtragem baseada em atributo (padrão) para a filtragem baseada em carga útil, defina FilterPolicyScope como MessageBody na assinatura.

  • O Amazon SNS aceita uma política de filtro aninhada para filtragem baseada em carga útil.

  • Para uma política aninhada, somente chaves leaf são contabilizadas no limite de cinco chaves.

Exemplo de política para limite de chaves:

No exemplo de política a seguir:

  • Existem duas chaves leaf: key_c e key_e.

  • key_c tem quatro operadores de correspondência com um nível aninhado de três, e key_e tem três operadores de correspondência com um nível aninhado de dois.

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

A combinação total é calculada como o produto do número de operadores de correspondência e do nível aninhado de cada chave na política de filtro:

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

Diretrizes de uso do padrão de caracteres curinga

O Amazon SQS implementa proteções para quando você registra uma política de filtro contendo caracteres curinga, a fim de garantir que políticas de filtro muito complexas não sejam criadas, pois isso afetaria o desempenho da sua aplicação.

Estrutura do padrão

Os campos contêm um ou mais padrões. O exemplo a seguir mostra um campo usando dois padrões:

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

Regras de complexidade

  • A complexidade total dos caracteres curinga em todos os campos não deve exceder 100 pontos

  • Máximo de 3 caracteres curinga por padrão

Cálculo da complexidade

  • Complexidade do campo = (Sum of pattern points) × (Number of patterns)

  • Pontos do padrão:

    Curinga único: 1 ponto

    Vários curingas: 3 pontos cada

    Indicador de exceção: 1 ponto

    Veja a seguir um exemplo do cálculo da complexidade:

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