翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon でのサブスクリプションフィルターポリシーの適用 SNS
Amazon でのメッセージフィルタリングSNSを使用すると、フィルターポリシーに基づいてサブスクライバーにメッセージを選択的に配信できます。これらのポリシーは、サブスクリプションに配信するためにメッセージが満たす必要がある条件を定義します。raw メッセージ配信はメッセージ処理に影響を与える可能性のあるオプションですが、サブスクリプションフィルターが機能する必要はありません。
Amazon SNSコンソールを使用して、Amazon SNSサブスクリプションにフィルターポリシーを適用できます。または、プログラムでポリシーを適用するには、Amazon SNS 、 AWS Command Line Interface (AWS CLI)API、または Amazon AWS SDKをサポートする任意の を使用できますSNS。を使用することもできます AWS CloudFormation。
Raw メッセージ配信の有効化
Raw メッセージ配信により、メッセージペイロードはそのままサブスクライバーに配信され、エンコードや変換は追加されません。これは、サブスクライバーが処理に元のメッセージ形式を必要とする場合に便利です。ただし、raw メッセージ配信はサブスクリプションフィルターの機能に直接関係しません。
サブスクリプションフィルターの適用
メッセージフィルターをサブスクリプションに適用するには、JSON構文を使用してフィルターポリシーを定義します。このポリシーは、サブスクリプションに配信するためにメッセージが満たす必要がある条件を指定します。フィルターは、メッセージ属性、メッセージ構造、メッセージコンテンツなどのメッセージ属性に基づいて設定できます。
Raw メッセージ配信とサブスクリプションフィルターの関係
raw メッセージ配信を有効にすると、サブスクライバーによるメッセージの配信と処理方法に影響を与える可能性がありますが、サブスクリプションフィルターを使用するための前提条件ではありません。ただし、サブスクライバーが変更なしで元のメッセージ形式を必要とするシナリオでは、raw メッセージ配信を有効にすると、サブスクリプションフィルターと一緒に役立つ場合があります。
効果的なフィルタリングに関する考慮事項
メッセージフィルタリングを実装するときは、アプリケーションとサブスクライバーの特定の要件を考慮してください。メッセージ配信の基準に正確に一致するフィルターポリシーを定義して、効率的でターゲットを絞ったメッセージ配信を実現します。
重要
AWS IAMや Amazon などの サービスは、結果整合性と呼ばれる分散コンピューティングモデルSNSを使用します。サブスクリプションフィルターポリシーへの追加または変更は、完全に有効になるまでに最大 15 分かかります。
AWS Management Console
Amazon SNSコンソール
にサインインします。 -
ナビゲーションパネルで、[サブスクリプション] を選択します。
-
サブスクリプションを選択したら、[編集] を選択します。
-
[Edit](編集) ページで、[Subscription filter policy](サブスクリプションフィルターポリシーセクション) を展開します。
-
属性ベースのフィルタリングまたはペイロードベースのフィルタリングのいずれかを選択します。
-
JSON エディタフィールドに、フィルターポリシーのJSON本文を指定します。
-
[変更の保存] を選択します。
Amazon SNSは、フィルターポリシーをサブスクリプションに適用します。
AWS CLI
AWS Command Line Interface (AWS CLI) でフィルターポリシーを適用するには、次の例に示すように set-subscription-attributes
コマンドを使用します。--attribute-name
オプションで、FilterPolicy
を指定します。には--attribute-value
、JSONポリシー を指定します。
$
aws sns set-subscription-attributes --subscription-arn
arn:aws:sns: ...
--attribute-name FilterPolicy --attribute-value'{"store":["example_corp"],"event":["order_placed"]}'
ポリシーJSONに有効な を指定するには、属性名と値を二重引用符で囲みます。また、ポリシーの引数全体を引用符で囲む必要があります。引用符のエスケープを回避するには、上記の例に示すように、一重引用符を使用してポリシーを囲み、二重引用符を使用してJSON名前と値を囲みます。
属性ベース (デフォルト) からペイロードベースのメッセージフィルタリングに切り替える場合は、 set-subscription-attributes コマンドも使用できます。--attribute-name
オプションで、FilterPolicyScope
を指定します。--attribute-value
の場合、MessageBody
を指定します。
$
aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name FilterPolicyScope --attribute-value MessageBody
フィルターポリシーが適用されたことを確認するには、get-subscription-attributes
コマンドを使用します。ターミナル出力の属性には、以下の例に示すように、FilterPolicy
キーのフィルターポリシーが表示されます。
$
aws sns get-subscription-attributes --subscription-arn arn:aws:sns: ...
{
"Attributes": {
"Endpoint": "endpoint . . .",
"Protocol": "https",
"RawMessageDelivery": "false",
"EffectiveDeliveryPolicy": "delivery policy . . .",
"ConfirmationWasAuthenticated": "true",
"FilterPolicy": "{\"store\": [\"example_corp\"], \"event\": [\"order_placed\"]}",
"FilterPolicyScope": "MessageAttributes",
"Owner": "111122223333",
"SubscriptionArn": "arn:aws:sns: . . .",
"TopicArn": "arn:aws:sns: . . ."
}
}
AWS SDKs
以下のコード例は、SetSubscriptionAttributes
の使用方法を示しています。
重要
SDK for Java 2.x の例を使用している場合、 クラスSNSMessageFilterPolicy
はすぐには使用できません。このクラスをインストールする方法については、 GitHub ウェブサイトの例
Amazon SNS API
Amazon でフィルターポリシーを適用するにはAPI、 SNS SetSubscriptionAttributes
アクションにリクエストを行います。AttributeName
パラメータを に設定しFilterPolicy
、 AttributeValue
パラメータをフィルターポリシー に設定しますJSON。
メッセージフィルタリングを属性ベース (デフォルト) からペイロードベースのメッセージフィルタリングに切り替える場合は、SetSubscriptionAttributes
アクションも使用できます。AttributeName
パラメータを FilterPolicyScope
に設定し、AttributeValue
パラメータを MessageBody
に設定します。
AWS CloudFormation
を使用してフィルターポリシーを適用するには AWS CloudFormation、 JSONまたは YAML テンプレートを使用してスタックを作成します AWS CloudFormation 。詳細については、「 AWS CloudFormation ユーザーガイド」の「 AWS::SNS::Subscription
リソースの FilterPolicy
プロパティ」とAWS CloudFormation テンプレート の例
-
AWS CloudFormation コンソール
にサインインします。 -
[スタックの作成] を選択します。
-
[テンプレートの選択] ページで、[テンプレートを Amazon S3 にアップロード] を選択してから、ファイルを選択して [次へ] をクリックします。
-
[詳細の指定] ページで、以下の作業を行います。
-
[スタックの名前] に「
MyFilterPolicyStack
」と入力します。 -
にはmyHttpEndpoint、トピックにサブスクライブするHTTPエンドポイントを入力します。
ヒント
HTTP エンドポイントがない場合は、エンドポイントを作成します。
-
-
[オプション] ページで、[次へ] を選択します。
-
[Review] ページで、[作成] を選択します。