Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

のフィルターを使用した WebSocket 接続のサブスクリプション解除 AWS AppSync

フォーカスモード
のフィルターを使用した WebSocket 接続のサブスクリプション解除 AWS AppSync - AWS AppSync GraphQL

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

では AWS AppSync、特定のフィルタリングロジックに基づいて、接続されたクライアントから WebSocket 接続を強制的にサブスクリプション解除して閉じる (無効化) ことができます。これは、ユーザーをグループから削除する場合など、承認関連のシナリオで役立ちます。

サブスクリプションの無効化は、ミューテーションで定義されたペイロードに応じて行われます。サブスクリプション接続の無効化に使用されるミューテーションは API の管理操作として扱い、その使用を管理ユーザー、グループ、またはバックエンドサービスに限定して、それに応じて権限の範囲を設定することをおすすめします。例えば、@aws_auth(cognito_groups: ["Administrators"]) または @aws_iam などのスキーマ認可ディレクティブを使用します。詳細については、「その他の認可モードを使用する」を参照してください。

無効化フィルターは、拡張サブスクリプションフィルターと同じ構文とロジックを使用します。これらのフィルターは、以下のユーティリティを使用して定義します。

  • extensions.invalidateSubscriptions() – GraphQL リゾルバーのミューテーションのレスポンスハンドラーで定義されます。

  • extensions.setSubscriptionInvalidationFilter() – ミューテーションにリンクされたサブスクリプションの GraphQL リゾルバーのレスポンスハンドラーで定義されます。

無効化フィルタリング拡張機能の詳細については、「JavaScript リゾルバーの概要」を参照してください。

サブスクリプションの無効化の使用

サブスクリプション無効化の仕組みを確認するには AWS AppSync、次の GraphQL スキーマを使用します。

type User { userId: ID! groupId: ID! } type Group { groupId: ID! name: String! members: [ID!]! } type GroupMessage { userId: ID! groupId: ID! message: String! } type Mutation { createGroupMessage(userId: ID!, groupId : ID!, message: String!): GroupMessage removeUserFromGroup(userId: ID!, groupId : ID!) : User @aws_iam } type Subscription { onGroupMessageCreated(userId: ID!, groupId : ID!): GroupMessage @aws_subscribe(mutations: ["createGroupMessage"]) } type Query { none: String }

removeUserFromGroup ミューテーションリゾルバーコードで無効化フィルターを定義します。

import { extensions } from '@aws-appsync/utils'; export function request(ctx) { return { payload: null }; } export function response(ctx) { const { userId, groupId } = ctx.args; extensions.invalidateSubscriptions({ subscriptionField: 'onGroupMessageCreated', payload: { userId, groupId }, }); return { userId, groupId }; }

ミューテーションが呼び出されると、payload オブジェクトに定義されているデータを使用して、subscriptionField で定義されたサブスクリプションの購読が解除されます。onGroupMessageCreated サスクリプションのレスポンスマッピングテンプレートには無効化フィルターも定義されています。

extensions.invalidateSubscriptions() ペイロードに、フィルターで定義されているサブスクライブされたクライアントの ID と一致する ID が含まれている場合、対応するサブスクリプションはサブスクライブ解除されます。さらに、WebSocket 接続は閉じられます。onGroupMessageCreated サブスクリプションのサブスクリプションリゾルバーコードを定義します。

import { util, extensions } from '@aws-appsync/utils'; export function request(ctx) { // simplfy return null for the payload return { payload: null }; } export function response(ctx) { const filter = { groupId: { eq: ctx.args.groupId } }; extensions.setSubscriptionFilter(util.transform.toSubscriptionFilter(filter)); const invalidation = { groupId: { eq: ctx.args.groupId }, userId: { eq: ctx.args.userId } }; extensions.setSubscriptionInvalidationFilter(util.transform.toSubscriptionFilter(invalidation)); return null; }

サブスクリプションレスポンスハンドラーには、サブスクリプションフィルターと無効化フィルターの両方を同時に定義できることに注意してください。

例えば、クライアント A が次のサブスクリプションリクエストを使用して、その ID group-1 を持つ新しいユーザーを ID user-1 のグループにサブスクライブするとします。

onGroupMessageCreated(userId : "user-1", groupId: :"group-1"){...}

AWS AppSync はサブスクリプションリゾルバーを実行します。このリゾルバーは、前述のonGroupMessageCreatedレスポンスマッピングテンプレートで定義されているサブスクリプションフィルターと無効化フィルターを生成します。クライアント A の場合、サブスクリプションフィルタはへのデータ送信のみを許可しgroup-1、無効化フィルタは user-1group-1 の両方に定義されます。

ここで、クライアント B が次のサブスクリプションリクエストを使用して、その ID user-2 を持つユーザーをその ID group-2のグループにサブスクライブすると仮定します。

onGroupMessageCreated(userId : "user-2", groupId: :"group-2"){...}

AWS AppSync はサブスクリプションリゾルバーを実行し、サブスクリプションフィルターと無効化フィルターを生成します。クライアント B の場合、サブスクリプションフィルタはデータ送信先を group-2 のみを許可し、無効化フィルタは user-2group-2 の両方に定義されます。

次に、ID message-1の付いた新しいグループメッセージが、次の例のようにミューテーションリクエストを使用して作成されると仮定します。

createGroupMessage(id: "message-1", groupId : "group-1", message: "test message"){...}

定義されたフィルターに一致するサブスクライブされたクライアントは、WebSockets を介して次のデータペイロードを自動的に受信します。

{ "data": { "onGroupMessageCreated": { "id": "message-1", "groupId": "group-1", "message": "test message", } } }

フィルター条件が定義済みのサブスクリプションフィルターと一致するため、クライアント A はメッセージを受信します。ただし、ユーザーは group-1 に参加していないため、クライアント B はメッセージを受信しません。また、リクエストはサブスクリプションリゾルバーで定義されているサブスクリプションフィルターと一致しません。

最後に、user-1が次のミューテーションリクエストの使用して group-1 から削除されたと仮定します。

removeUserFromGroup(userId: "user-1", groupId : "group-1"){...}

ミューテーションは、extensions.invalidateSubscriptions()リゾルバーレスポンスハンドラーコードで定義されているサブスクリプションの無効化を開始します。 AWS AppSync その後、クライアント A のサブスクリプションを解除し、WebSocket 接続を閉じます。ミューテーションで定義された無効化ペイロードがユーザーまたはグループと一致しないため、クライアント B は影響を受けません。

が接続 AWS AppSync を無効にすると、クライアントはサブスクリプション解除されたことを確認するメッセージを受け取ります。

{ "message": "Subscription complete." }

サブスクリプション無効化フィルターでのコンテキスト変数の使用

拡張サブスクリプションフィルターと同様に、サブスクリプション無効化フィルター拡張のcontext変数を使用して特定のデータにアクセスできます。

例えば、ミューテーションの無効化ペイロードとして E メールアドレスを設定し、そのアドレスを Amazon Cognito ユーザープールまたは OpenID Connect で認証されたサブスクライブユーザーからのメール属性またはクレームと照合することができます。extensions.setSubscriptionInvalidationFilter() サブスクリプション無効化ツールで定義された無効化フィルターは、ミューテーションの extensions.invalidateSubscriptions() ペイロードによって設定されたメールアドレスが、context.identity.claims.email でユーザーの JWT トークンから取得したメールアドレスと一致するかどうかを確認し、無効化を開始します。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.