翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS でメッセージフィルタリングを使用すると、フィルターポリシーに基づいてサブスクライバーにメッセージを選択的に配信できます。これらのポリシーは、メッセージがサブスクリプションに配信されるために満たす必要がある条件を定義します。raw メッセージ配信はメッセージ処理に影響を与える可能性があるオプションですが、サブスクリプションフィルターが機能するために必須ではありません。
Amazon SNS コンソールを使用して、Amazon SNS サブスクリプションにフィルターポリシーを適用できます。または、プログラムでポリシーを適用するには、Amazon SNS API、 AWS Command Line Interface (AWS CLI)、または Amazon SNS をサポートする任意の AWS SDK を使用できます。 Amazon 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 editor](JSON エディタ) フィールドで、フィルターポリシーの [JSON body](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 ウェブサイトの例
- AWS CLI
-
サブスクリプション属性を設定するには
次の
set-subscription-attributes
の例では、RawMessageDelivery
属性を SQS サブスクリプションに設定します。aws sns set-subscription-attributes \ --subscription-arn
arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc
\ --attribute-nameRawMessageDelivery
\ --attribute-valuetrue
このコマンドでは何も出力されません。
次の
set-subscription-attributes
の例では、FilterPolicy
属性を SQS サブスクリプションに設定します。aws sns set-subscription-attributes \ --subscription-arn
arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc
\ --attribute-nameFilterPolicy
\ --attribute-value "{ \"anyMandatoryKey\": [\"any\", \"of\", \"these\"] }"このコマンドでは何も出力されません。
次の
set-subscription-attributes
の例では、FilterPolicy
属性を SQS サブスクリプションから削除します。aws sns set-subscription-attributes \ --subscription-arn
arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc
\ --attribute-nameFilterPolicy
\ --attribute-value"{}"
このコマンドでは何も出力されません。
-
API の詳細については、「AWS CLI コマンドリファレンス」の「SetSubscriptionAttributes
」を参照してください。
-
Amazon SNS API
Amazon SNS API を使用してフィルターポリシーを適用するには、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] ページで、[作成] を選択します。