コミートム合同会社

コミートム合同会社

AppSyncのサブスクライブをnative WebSocketでやる

WebSocket AppSync This article is about how to subscribe to AppSync using native WebSocket. The author provides a script and explains the steps involved in detail.
by JanitorSep 29, 2023
AppSyncのサブスクライブは通常aws-amplifyをインストールして実施するかと思いますがWebSocketで実施してみます。
AppSyncのサブスクライブは通常aws-amplifyをインストールして実施するかと思いますがWebSocketで実施してみます。

Jump Links

1. スクリプトを書く
2. realtimeEndpointの確認
おわりに
1. スクリプトを書く
1. スクリプトを書く
下記のスクリプトで動作を確認することができます。今回はAPIKeyを使っています。Cognitoの認証を使う場合は、「x-api-key」を「Authorization」に変更し、apiKeyの代わりに、IdTokenを設定します。今回使用するAppSyncは下記URLの記事で作成したもので、idとdataのみのシンプルなものです。 https://comytom.com/anarticle/c8e1890a-f724-40be-a820-28601c1eb2ec
下記のスクリプトで動作を確認することができます。今回はAPIKeyを使っています。Cognitoの認証を使う場合は、「x-api-key」を「Authorization」に変更し、apiKeyの代わりに、IdTokenを設定します。今回使用するAppSyncは下記URLの記事で作成したもので、idとdataのみのシンプルなものです。 https://comytom.com/anarticle/c8e1890a-f724-40be-a820-28601c1eb2ec

Link Info

Information about the linked URL in the text above. get more infos.

WiFi水温計 Aquarium Funs!の運営 コミートム合同会社

コミートム合同会社 - ブログ DynamoDBからデータをまとめて消す
この記事では、AppSync の BatchDelete を使用して DynamoDB テーブルから特定の大量のデータを削除する方法について説明します。 手順は次のとおりです。1. DynamoDB テーブルを作成します。2. DynamoDB テーブルにデータを書き込みます。3. DynamoDB テーブルから AppSync API を作成します。4. AppSync ロールにポリシーを追加して、BatchDelete.5 を有効にします。 BatchDelete を AppSync API に設定します。6. AppSync コンソールで動作を確認します。7. Python から BatchDelete を呼び出します。This post describes how to use AppSync's BatchDelete to delete specific large amounts of data from a DynamoDB table. Here are the steps:1. Create a DynamoDB table.2. Write data to the DynamoDB table.3. Create an AppSync API from the DynamoDB table.4. Add a policy to the AppSync role to enable BatchDelete.5. Set BatchDelete to the AppSync API.6. Check the operation on the AppSync console.7. Call BatchDelete from Python.
https://www.comytom.com/anarticle/c8e1890a-f724-40be-a820-28601c1eb2ec

Link Info

Information about the linked URL in the text above. get more infos.

WiFi水温計 Aquarium Funs!の運営 コミートム合同会社

コミートム合同会社 - ブログ DynamoDBからデータをまとめて消す
この記事では、AppSync の BatchDelete を使用して DynamoDB テーブルから特定の大量のデータを削除する方法について説明します。 手順は次のとおりです。1. DynamoDB テーブルを作成します。2. DynamoDB テーブルにデータを書き込みます。3. DynamoDB テーブルから AppSync API を作成します。4. AppSync ロールにポリシーを追加して、BatchDelete.5 を有効にします。 BatchDelete を AppSync API に設定します。6. AppSync コンソールで動作を確認します。7. Python から BatchDelete を呼び出します。This post describes how to use AppSync's BatchDelete to delete specific large amounts of data from a DynamoDB table. Here are the steps:1. Create a DynamoDB table.2. Write data to the DynamoDB table.3. Create an AppSync API from the DynamoDB table.4. Add a policy to the AppSync role to enable BatchDelete.5. Set BatchDelete to the AppSync API.6. Check the operation on the AppSync console.7. Call BatchDelete from Python.
https://www.comytom.com/anarticle/c8e1890a-f724-40be-a820-28601c1eb2ec
var host = "xxxxxxxxxxxxxx.appsync-api.リージョン名.amazonaws.com"; var realtimeEndpoint = "wss://xxxxxxxxxxxxxx.appsync-realtime-api.リージョン名.amazonaws.com/graphql"; var apiKey = APIキー; var header = { host: host, "x-api-key": apiKey }; // Cognitoの認証を使う場合は、Authorization: IdToken var url = realtimeEndpoint + "?header=" + btoa( JSON.stringify( header ) ) + "&payload=" + btoa( JSON.stringify( {} ) ); var socket = new WebSocket( url, [ 'graphql-ws' ] ); var subscId = "abcdefg"; setTimeout( () => { socket.send( JSON.stringify( { "type": "stop", "id": subscId } ) ); }, 60000 ); socket.addEventListener( "open", ( event ) => { socket.send( JSON.stringify( { "type": "connection_init" } ) ); } ); socket.addEventListener( "message", ( event ) => { var eventDataJson = JSON.parse( event.data ); if( eventDataJson.type == "connection_ack" ) socket.send( getSubscRegistMessage( subscId ) ); else if( eventDataJson.type == "data" ) console.log( "Message from server ", eventDataJson ); else if( eventDataJson.type == "complete" ) console.log( "subscription done." ); } ); // Cognitoの認証を使う場合は、Authorization: IdToken function getSubscRegistMessage( subscId ){ return JSON.stringify( { id: subscId, payload: { data: JSON.stringify( { query: getQuery(), variables: {} } ), extensions: { authorization: { "x-api-key": apiKey, host: host } } }, type: "start" } ); } function getQuery(){ return `subscription MySubscription{ onCreateExistingTable{ data id } }`; }
var host = "xxxxxxxxxxxxxx.appsync-api.リージョン名.amazonaws.com"; var realtimeEndpoint = "wss://xxxxxxxxxxxxxx.appsync-realtime-api.リージョン名.amazonaws.com/graphql"; var apiKey = APIキー; var header = { host: host, "x-api-key": apiKey }; // Cognitoの認証を使う場合は、Authorization: IdToken var url = realtimeEndpoint + "?header=" + btoa( JSON.stringify( header ) ) + "&payload=" + btoa( JSON.stringify( {} ) ); var socket = new WebSocket( url, [ 'graphql-ws' ] ); var subscId = "abcdefg"; setTimeout( () => { socket.send( JSON.stringify( { "type": "stop", "id": subscId } ) ); }, 60000 ); socket.addEventListener( "open", ( event ) => { socket.send( JSON.stringify( { "type": "connection_init" } ) ); } ); socket.addEventListener( "message", ( event ) => { var eventDataJson = JSON.parse( event.data ); if( eventDataJson.type == "connection_ack" ) socket.send( getSubscRegistMessage( subscId ) ); else if( eventDataJson.type == "data" ) console.log( "Message from server ", eventDataJson ); else if( eventDataJson.type == "complete" ) console.log( "subscription done." ); } ); // Cognitoの認証を使う場合は、Authorization: IdToken function getSubscRegistMessage( subscId ){ return JSON.stringify( { id: subscId, payload: { data: JSON.stringify( { query: getQuery(), variables: {} } ), extensions: { authorization: { "x-api-key": apiKey, host: host } } }, type: "start" } ); } function getQuery(){ return `subscription MySubscription{ onCreateExistingTable{ data id } }`; }
やっていることは下記の通りです。 1. headerに情報を詰めて、realtimeEndpointとconnectionを張る準備 2. connectionがopenになったら「{ "type": "connection_init" }」をWebSocketで送信 3. サーバから「connection_ack」が返ってきたらサブスクリプション登録メッセージに情報を詰めて、WebSocketで送信 4. サーバから「data」が来たらコンソールに出力 5. 1分経ったらconnectionをclose サブスクライブID(上のスクリプト上ではsubscId)を「abcdefg」としていますが、一意に定まるのであればなんでもよくて、uuidなどをインストールしておけばよいかと思います。 参考にさせて頂いたウェブサイトURL https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/real-time-websocket-client.html https://stackoverflow.com/questions/74293606/websocket-with-appsync-error-unsupportedoperation-unknown-not-supported-throug https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
やっていることは下記の通りです。 1. headerに情報を詰めて、realtimeEndpointとconnectionを張る準備 2. connectionがopenになったら「{ "type": "connection_init" }」をWebSocketで送信 3. サーバから「connection_ack」が返ってきたらサブスクリプション登録メッセージに情報を詰めて、WebSocketで送信 4. サーバから「data」が来たらコンソールに出力 5. 1分経ったらconnectionをclose サブスクライブID(上のスクリプト上ではsubscId)を「abcdefg」としていますが、一意に定まるのであればなんでもよくて、uuidなどをインストールしておけばよいかと思います。 参考にさせて頂いたウェブサイトURL https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/real-time-websocket-client.html https://stackoverflow.com/questions/74293606/websocket-with-appsync-error-unsupportedoperation-unknown-not-supported-throug https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
2. realtimeEndpointの確認
2. realtimeEndpointの確認
下の画像のように、AppSyncのコンソール -> 該当のAppSync -> 設定 -> リアルタイムエンドポイントから確認できます。 hostはリアルタイムエンドポイントから先頭の「wss://」と、中間の「realtime-」と、末尾の「/graphql」を除いたものです。
下の画像のように、AppSyncのコンソール -> 該当のAppSync -> 設定 -> リアルタイムエンドポイントから確認できます。 hostはリアルタイムエンドポイントから先頭の「wss://」と、中間の「realtime-」と、末尾の「/graphql」を除いたものです。
おわりに
おわりに
とても複雑なのだろうなと思っていましたが意外にシンプルにできました。
とても複雑なのだろうなと思っていましたが意外にシンプルにできました。

AppSyncのサブスクライブをnative WebSocketでやる

WebSocket AppSync This article is about how to subscribe to AppSync using native WebSocket. The author provides a script and explains the steps involved in detail.
by JanitorSep 29, 2023
AppSyncのサブスクライブは通常aws-amplifyをインストールして実施するかと思いますがWebSocketで実施してみます。
AppSyncのサブスクライブは通常aws-amplifyをインストールして実施するかと思いますがWebSocketで実施してみます。

Jump Links

1. スクリプトを書く
2. realtimeEndpointの確認
おわりに
1. スクリプトを書く
1. スクリプトを書く
下記のスクリプトで動作を確認することができます。今回はAPIKeyを使っています。Cognitoの認証を使う場合は、「x-api-key」を「Authorization」に変更し、apiKeyの代わりに、IdTokenを設定します。今回使用するAppSyncは下記URLの記事で作成したもので、idとdataのみのシンプルなものです。 https://comytom.com/anarticle/c8e1890a-f724-40be-a820-28601c1eb2ec
下記のスクリプトで動作を確認することができます。今回はAPIKeyを使っています。Cognitoの認証を使う場合は、「x-api-key」を「Authorization」に変更し、apiKeyの代わりに、IdTokenを設定します。今回使用するAppSyncは下記URLの記事で作成したもので、idとdataのみのシンプルなものです。 https://comytom.com/anarticle/c8e1890a-f724-40be-a820-28601c1eb2ec

Link Info

Information about the linked URL in the text above. get more infos.

WiFi水温計 Aquarium Funs!の運営 コミートム合同会社

コミートム合同会社 - ブログ DynamoDBからデータをまとめて消す
この記事では、AppSync の BatchDelete を使用して DynamoDB テーブルから特定の大量のデータを削除する方法について説明します。 手順は次のとおりです。1. DynamoDB テーブルを作成します。2. DynamoDB テーブルにデータを書き込みます。3. DynamoDB テーブルから AppSync API を作成します。4. AppSync ロールにポリシーを追加して、BatchDelete.5 を有効にします。 BatchDelete を AppSync API に設定します。6. AppSync コンソールで動作を確認します。7. Python から BatchDelete を呼び出します。This post describes how to use AppSync's BatchDelete to delete specific large amounts of data from a DynamoDB table. Here are the steps:1. Create a DynamoDB table.2. Write data to the DynamoDB table.3. Create an AppSync API from the DynamoDB table.4. Add a policy to the AppSync role to enable BatchDelete.5. Set BatchDelete to the AppSync API.6. Check the operation on the AppSync console.7. Call BatchDelete from Python.
https://www.comytom.com/anarticle/c8e1890a-f724-40be-a820-28601c1eb2ec

Link Info

Information about the linked URL in the text above. get more infos.

WiFi水温計 Aquarium Funs!の運営 コミートム合同会社

コミートム合同会社 - ブログ DynamoDBからデータをまとめて消す
この記事では、AppSync の BatchDelete を使用して DynamoDB テーブルから特定の大量のデータを削除する方法について説明します。 手順は次のとおりです。1. DynamoDB テーブルを作成します。2. DynamoDB テーブルにデータを書き込みます。3. DynamoDB テーブルから AppSync API を作成します。4. AppSync ロールにポリシーを追加して、BatchDelete.5 を有効にします。 BatchDelete を AppSync API に設定します。6. AppSync コンソールで動作を確認します。7. Python から BatchDelete を呼び出します。This post describes how to use AppSync's BatchDelete to delete specific large amounts of data from a DynamoDB table. Here are the steps:1. Create a DynamoDB table.2. Write data to the DynamoDB table.3. Create an AppSync API from the DynamoDB table.4. Add a policy to the AppSync role to enable BatchDelete.5. Set BatchDelete to the AppSync API.6. Check the operation on the AppSync console.7. Call BatchDelete from Python.
https://www.comytom.com/anarticle/c8e1890a-f724-40be-a820-28601c1eb2ec
var host = "xxxxxxxxxxxxxx.appsync-api.リージョン名.amazonaws.com"; var realtimeEndpoint = "wss://xxxxxxxxxxxxxx.appsync-realtime-api.リージョン名.amazonaws.com/graphql"; var apiKey = APIキー; var header = { host: host, "x-api-key": apiKey }; // Cognitoの認証を使う場合は、Authorization: IdToken var url = realtimeEndpoint + "?header=" + btoa( JSON.stringify( header ) ) + "&payload=" + btoa( JSON.stringify( {} ) ); var socket = new WebSocket( url, [ 'graphql-ws' ] ); var subscId = "abcdefg"; setTimeout( () => { socket.send( JSON.stringify( { "type": "stop", "id": subscId } ) ); }, 60000 ); socket.addEventListener( "open", ( event ) => { socket.send( JSON.stringify( { "type": "connection_init" } ) ); } ); socket.addEventListener( "message", ( event ) => { var eventDataJson = JSON.parse( event.data ); if( eventDataJson.type == "connection_ack" ) socket.send( getSubscRegistMessage( subscId ) ); else if( eventDataJson.type == "data" ) console.log( "Message from server ", eventDataJson ); else if( eventDataJson.type == "complete" ) console.log( "subscription done." ); } ); // Cognitoの認証を使う場合は、Authorization: IdToken function getSubscRegistMessage( subscId ){ return JSON.stringify( { id: subscId, payload: { data: JSON.stringify( { query: getQuery(), variables: {} } ), extensions: { authorization: { "x-api-key": apiKey, host: host } } }, type: "start" } ); } function getQuery(){ return `subscription MySubscription{ onCreateExistingTable{ data id } }`; }
var host = "xxxxxxxxxxxxxx.appsync-api.リージョン名.amazonaws.com"; var realtimeEndpoint = "wss://xxxxxxxxxxxxxx.appsync-realtime-api.リージョン名.amazonaws.com/graphql"; var apiKey = APIキー; var header = { host: host, "x-api-key": apiKey }; // Cognitoの認証を使う場合は、Authorization: IdToken var url = realtimeEndpoint + "?header=" + btoa( JSON.stringify( header ) ) + "&payload=" + btoa( JSON.stringify( {} ) ); var socket = new WebSocket( url, [ 'graphql-ws' ] ); var subscId = "abcdefg"; setTimeout( () => { socket.send( JSON.stringify( { "type": "stop", "id": subscId } ) ); }, 60000 ); socket.addEventListener( "open", ( event ) => { socket.send( JSON.stringify( { "type": "connection_init" } ) ); } ); socket.addEventListener( "message", ( event ) => { var eventDataJson = JSON.parse( event.data ); if( eventDataJson.type == "connection_ack" ) socket.send( getSubscRegistMessage( subscId ) ); else if( eventDataJson.type == "data" ) console.log( "Message from server ", eventDataJson ); else if( eventDataJson.type == "complete" ) console.log( "subscription done." ); } ); // Cognitoの認証を使う場合は、Authorization: IdToken function getSubscRegistMessage( subscId ){ return JSON.stringify( { id: subscId, payload: { data: JSON.stringify( { query: getQuery(), variables: {} } ), extensions: { authorization: { "x-api-key": apiKey, host: host } } }, type: "start" } ); } function getQuery(){ return `subscription MySubscription{ onCreateExistingTable{ data id } }`; }
やっていることは下記の通りです。 1. headerに情報を詰めて、realtimeEndpointとconnectionを張る準備 2. connectionがopenになったら「{ "type": "connection_init" }」をWebSocketで送信 3. サーバから「connection_ack」が返ってきたらサブスクリプション登録メッセージに情報を詰めて、WebSocketで送信 4. サーバから「data」が来たらコンソールに出力 5. 1分経ったらconnectionをclose サブスクライブID(上のスクリプト上ではsubscId)を「abcdefg」としていますが、一意に定まるのであればなんでもよくて、uuidなどをインストールしておけばよいかと思います。 参考にさせて頂いたウェブサイトURL https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/real-time-websocket-client.html https://stackoverflow.com/questions/74293606/websocket-with-appsync-error-unsupportedoperation-unknown-not-supported-throug https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
やっていることは下記の通りです。 1. headerに情報を詰めて、realtimeEndpointとconnectionを張る準備 2. connectionがopenになったら「{ "type": "connection_init" }」をWebSocketで送信 3. サーバから「connection_ack」が返ってきたらサブスクリプション登録メッセージに情報を詰めて、WebSocketで送信 4. サーバから「data」が来たらコンソールに出力 5. 1分経ったらconnectionをclose サブスクライブID(上のスクリプト上ではsubscId)を「abcdefg」としていますが、一意に定まるのであればなんでもよくて、uuidなどをインストールしておけばよいかと思います。 参考にさせて頂いたウェブサイトURL https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/real-time-websocket-client.html https://stackoverflow.com/questions/74293606/websocket-with-appsync-error-unsupportedoperation-unknown-not-supported-throug https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
2. realtimeEndpointの確認
2. realtimeEndpointの確認
下の画像のように、AppSyncのコンソール -> 該当のAppSync -> 設定 -> リアルタイムエンドポイントから確認できます。 hostはリアルタイムエンドポイントから先頭の「wss://」と、中間の「realtime-」と、末尾の「/graphql」を除いたものです。
下の画像のように、AppSyncのコンソール -> 該当のAppSync -> 設定 -> リアルタイムエンドポイントから確認できます。 hostはリアルタイムエンドポイントから先頭の「wss://」と、中間の「realtime-」と、末尾の「/graphql」を除いたものです。
おわりに
おわりに
とても複雑なのだろうなと思っていましたが意外にシンプルにできました。
とても複雑なのだろうなと思っていましたが意外にシンプルにできました。
© 2023 - Comytom LLC