Регулярная фильтрация сообщений в SNS - PullRequest
0 голосов
/ 14 мая 2018

Есть ли способ фильтрации сообщений на основе Regex или подстроки в AWS SNS ?

Документация AWS для фильтрации сообщений упоминает три типа фильтрации строк:

  • Точное соответствие (белый список)
  • Ничего, кроме соответствия (черный список)
  • Соответствие префикса

Я хочу отфильтровать сообщения на основе подстрок в сообщениях, например

У меня есть событие S3, которое отправляет сообщение в SNS, когда к S3 добавляется новый объект, содержание сообщения следующее:

{
    "Records": [
        {
            "s3": {
                "bucket": {
                    "name": "images-bucket"
                },
                "object": {
                    "key": "some-key/more-key/filteringText/additionaldata.png"
                }
            }
        }
    ]
}

Я хочу сохранить сообщения, если в поле key присутствует только filteringText .

Примечание : Служба уведомлений S3 отправляет все сообщение в виде текста, поэтому записи - это не объект json, а строка.

1 Ответ

0 голосов
/ 14 мая 2018

Из того, что я видел в документации, вы не можете делать регулярные выражения или подстроки, но вы можете сопоставлять префиксы и создавать свои собственные атрибуты в поле MessageAttributes.

Для этого я отправляюсобытие S3 для простой лямбды, которая добавляет MessageAttributes и затем отправляет в SNS.

По сути, S3 -> Lambda -> SNS -> другие потребители (с фильтрацией).

Lambda можетсделать что-то вроде этого (где вам придется программно решать, когда добавлять атрибут):

let messageAttributes = {
                    myfilterkey: {DataType: "String", StringValue:"filteringText"}
                };
let params = {
                    Message: JSON.stringify(payload),
                    MessageAttributes: messageAttributes,
                    MessageStructure: 'json',
                    TargetArn: SNS_ARN
                };
await sns.publish(params).promise();

Затем в SNS вы можете фильтровать:

{"myfilterkey": ["filtertext"]}

Это кажется немного запутаннымпоставить Lambda там, но мне нравится идея возможности подключать и отключать потребителей от SNS на лету и использовать фильтрацию, чтобы определить, кто что получает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...