[アップデート] Amazon SNS のサブスクリプションフィルターポリシーで文字列一致の際にワイルドカードが使えるようになりました
いわさです。
Amazon SNS にはサブスクリプションフィルターポリシーという機能があり、サブスクリプションごとにトピックへ送信されたメッセージをフィルターする条件を設定することが出来ます。
この条件を設定する際、これまでサフィックスやプレフィックスは指定出来たのですがワイルドカードを使うことができなかったため設定の柔軟性に限界がありました。
しかし、先日のアップデートでフィルタールールにワイルドカードを指定できるようになりました。ついに...
今回こちらの機能を使ってみたので紹介します。
「wildcard」機能
フィルターポリシーの中で、様々なフィルター演算子を指定できるのですが、今回のアップデートで文字列一致の際にwildcard
を指定出来ます。
今回、次のようなメッセージ属性スコープのフィルターポリシーを設定してみました。
hoge 属性に対してワイルドカード付きの条件を指定しています。
これに対して、ワイルドカード条件に一致するメッセージをトピックへ送ってみましょう。
そうすると、対象サブスクリプションにメッセージが配信されることを確認しました。
また、ワイルドカードに一致するほかの値(bbbfuga など)も配信されることを確認しました。
続いて、ワイルドカード条件に一致しない、次のようなメッセージをトピックに送信してみたところ...
こちらは対象サブスクリプションへ配信がされませんでした。
うまくサブスクリプションフィルターが機能していることが確認できますね。
anything-but でも wildcard 機能
従来からanything-but
というフィルター演算子自体はありまして、こちらは一致しないことを指定する演算子になっています。
こちらに対してもネストする形でwildcard
演算子を指定できるようになっています。
次のように指定してみましょう。これで、先程と逆の配信条件になる感じです。
先ほどは配信出来た以下については対象サブスクリプションに配信されないことを確認しました。
そして、先程は配信できていなかった以下については配信されることを確認できました。
元のwildcard
演算子と組み合わせてトピック内でのサブスクリプション分岐をワイルドカードで完全に制御出来そうです。
ワイルドカードは一つのパターン内に最大3つまで、複雑さの概念あり
ワイルドカード機能ですが、いくつか制限があります。
まず一つのフィールドあたり、ワイルドカードは3つまで設定ができます。
そのためにひとつのパターンに4つ以上指定すると、Wildcard complexity too high: pattern exceeds maximum allowed wildcards
というエラーが発生します。
ただし、このルールはパターンごとなので、ワイルドカード3つ以内のパターンが複数存在する分には問題ありません。
ただし、複数のパターンに分散させる場合でもポリシー全体で複雑さを判定しており、一定の複雑さを超えると次のようにWildcard complexity too high
エラーとなります。
このパターンの組み合わせによってポイントが計算されるようで、そのポイントが100を超えるとエラーになるようです。公式ドキュメントにルールが記載されているのでこちらも参考にしてください。ちなみに上記ルールは私の計算ではポイントが48なのですが、なぜかエラーになりました。なぜだ...
さいごに
本日は Amazon SNS のサブスクリプションフィルターポリシーで文字列一致の際にワイルドカードが使えるようになったので試してみました。
これは良いアップデートですが、フィルターポリシーが柔軟に設定しやすくなりました。
ドキュメントにも記載されていましたが、複雑なルールを構築するとパフォーマンスに影響が出る場合があるそうなので、ほどほどにしておきましょう。