paint-brush
Amazon IVS チャット ログを使用して Web チャット メッセージをアーカイブする方法@amazonivs
385 測定値
385 測定値

Amazon IVS チャット ログを使用して Web チャット メッセージをアーカイブする方法

長すぎる; 読むには

前回の投稿では、Amazon Interactive Video Service (Amazon IVS) ライブ ストリームを Amazon Simple Storage Service (Amazon S3) バケットに自動記録する方法について説明しました。 Amazon IVS チャット メッセージをログに記録する方法を学習することで、完全なオンデマンド エクスペリエンスを提供するための次のステップに進みます。チャット ログの保存先として、Amazon CloudWatch、Amazon Kinesis Firehose、または Amazon S3 から選択できます。
featured image - Amazon IVS チャット ログを使用して Web チャット メッセージをアーカイブする方法
Amazon Interactive Video Service (IVS)  HackerNoon profile picture
0-item


Amazon IVS を使用したオンデマンド ライブ ストリーム再生 (3 部構成)

1 Amazon IVS ライブストリームの S3 への自動記録

2 Amazon IVS チャットログを使用して Web チャットメッセージをアーカイブする方法

3 チャット リプレイを使用した Amazon IVS ライブ ストリームの再生


前回の投稿では、Amazon Interactive Video Service (Amazon IVS) ライブ ストリームを Amazon Simple Storage Service (Amazon S3) バケットに自動録画する方法について説明しました。この機能は、アプリケーションで以前のライブ ストリームのオンデマンド表示を提供するための最初のステップであるため、ユーザー生成コンテンツ (UGC) プラットフォームの強力なツールです。しかし、ライブ ストリームのリプレイは、ストリームと並行して発生するインタラクティブ チャットの完全なコンテキストなしでは不完全です。この投稿では、Amazon IVS チャット メッセージをログに記録する方法を学習することで、完全なオンデマンド エクスペリエンスを提供するための次のステップに進みます。

ロギング構成

Amazon S3 への自動記録に記録設定が必要だったのと同様に、チャット ログにも、チャット ルームに必要な詳細を定義する設定が必要です。選択したロギング先によっては、追加のIAM アクセス許可も必要になる場合があることに注意してください。

Amazon IVS コンソールを使用してロギング設定を作成する

Amazon IVS コンソールでログ設定を作成するには、左側のサイドバーで[ログ設定]をクリックします。

[ロギング構成]リスト ページで、 [ロギング構成の作成]をクリックします。

Amazon IVS チャット ログは、ログに記録されたチャット メッセージの保存先をいくつか提供します。チャット ログの保存先として、Amazon CloudWatch、Amazon Kinesis Data Firehose、または Amazon S3 から選択できます。 CloudWatch SDK を介してチャット メッセージを簡単に取得できるため、個人的には CloudWatch が最も便利な宛先であると感じているので、このデモではそれを使用します。アプリケーションの宛先として Amazon Kinesis Data Firehose または Amazon S3 を利用する場合は、ドキュメントを参照してください。


: チャット メッセージが投稿されてからログ出力先に表示されるまでには、わずかな遅延が生じる場合があります。 Amazon S3 の場合、遅延は最大 5 分、Amazon CloudWatch および Amazon Kinesis Data Firehose の場合、最大 10 秒です。


このデモの構成を作成するには、ロギング構成名を入力し (#1)、宛先として CloudWatch を選択し (#2)、新しい CloudWatch ログ グループの作成を選択し (#3)、ログ グループ名を入力します (#4)。 .


オプションのタグを入力し、 [Create logging configuration]をクリックします。


AWS SDK を使用してロギング設定を作成する

設定の記録と同様に、AWS SDK を利用してログ設定を作成できます。この投稿では CloudWatch にログを記録しているため、CloudWatch Logs SDK を使用してログ グループを作成する必要があります。


 import { CloudWatchLogsClient, CreateLogGroupCommand } from "@aws-sdk/client-cloudwatch-logs"; const cloudWatchLogsClient = new CloudWatchLogsClient(); const createLogGroupInput = { logGroupName: 'ivs-demo-chat-logging-group', }; const createLogGroupRequest = new CreateLogGroupCommand(createLogGroupInput); const createLogGroupResponse = await cloudWatchLogsClient.send(createLogGroupRequest); console.log(createLogGroupResponse);


これで、Amazon IVS チャット クライアントを使用してログ設定 ( docs ) を作成できます。

 import { IvschatClient, CreateLoggingConfigurationCommand } from "@aws-sdk/client-ivschat"; const ivsChatClient = new IvschatClient(); const createLoggingConfigInput = { name: 'ivs-demo-chat-logging-config-sdk', destinationConfiguration: { cloudWatchLogs: { logGroupName: 'ivs-demo-chat-logging-group' } } }; const createLoggingConfigRequest = new CreateLoggingConfigurationCommand(createLoggingConfigInput); const createLoggingConfigResponse = await ivsChatClient.send(createLoggingConfigRequest); console.log(createLoggingConfigResponse);


これにより、次のような出力が生成されます。

 { "$metadata": { "httpStatusCode": 200, "requestId": "[redacted]", "cfId": "[redacted]", "attempts": 1, "totalRetryDelay": 0 }, "arn": "arn:aws:ivschat:us-east-1:[redacted]:logging-configuration/[redacted]", "createTime": "2023-01-09T14:48:35.358Z", "destinationConfiguration": { "cloudWatchLogs": { "logGroupName": "ivs-demo-chat-logging-group" } }, "id": "[redacted]", "name": "ivs-demo-chat-logging-config-sdk", "state": "ACTIVE", "tags": {}, "updateTime": "2023-01-09T14:48:35.485Z" }

AWS CLI を使用してログ記録設定を作成する

オプションで、AWS CLI を使用してログ設定を作成することもできます。ここでも、CloudWatch ログ グループを作成し、新しいログ グループの名前をチャット ログ設定に渡す必要があります。

 $ aws logs \ create-log-group \ --log-group-name ivs-demo-logging-config-log-group $ aws ivschat \ create-logging-configuration \ --name ivs-demo-logging-config \ --destination-configuration cloudWatchLogs={logGroupName=ivs-demo-logging-config-log-group}


Amazon IVS コンソールを介してログ記録設定を既存の Amazon IVS チャット ルームに関連付ける

ログ設定を既存の Amazon IVS チャット ルームに関連付けることができるようになりました。左側のサイドバーの[チャット][ルーム]を選択し、構成を関連付けるルームを選択して、 [編集]をクリックします。

ルーム編集ページで下にスクロールし、 [メッセージとイベントを自動的にログに記録する(#1)] を選択します。 [ログ構成]ドロップダウン (#2) で、上で作成した構成を検索して関連付けます。ルームには複数の設定を関連付けることができるため、Amazon Kinesis Data Firehose または Amazon S3 にもログを記録したい場合は、個別の設定を作成してルームに関連付けることができます。また、 [Create logging configuration]ボタン (#3) をクリックして、編集ルーム ページから直接新しい構成を作成できることにも注意してください。


AWS SDK を介してログ記録設定を既存の Amazon IVS チャット ルームに関連付ける

本番環境では、SDK を使用して、ロギング構成を新規または既存のチャット ルームに関連付ける可能性があります。これを行うには、 CreateRoomCommand ( docs ) またはUpdateRoomCommand ( docs ) を使用します。チャット ログ構成を使用して既存のチャット ルームを更新する例を次に示します。予想どおり、ARN をチャット ルームのidentifierとして渡し、任意/すべてのチャット ログ構成 ARN を配列でloggingConfigurationIdentifiersに渡す必要があります。


 import { IvschatClient, UpdateRoomCommand } from "@aws-sdk/client-ivschat"; const ivsChatClient = new IvschatClient(); const updateChatRoomInput = { identifier: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]', loggingConfigurationIdentifiers: [ 'arn:aws:ivschat:us-east-1:v:logging-configuration/[redacted]', ] }; const updateChatRoomRequest = new UpdateRoomCommand(updateChatRoomInput); const updateChatRoomResponse = await ivsChatClient.send(updateChatRoomRequest); console.log(updateChatRoomResponse);


注:チャット ルームに対して複数のログ構成を指定できます。これにより、必要に応じて複数の宛先を使用できます。 SDK を介してUpdateRoomCommandに渡すチャット ロギング識別子の配列は、既存の識別子を上書きするため、追加の設定を追加する場合は、既存の設定 ARN を含めて、それらが削除されないようにしてください。

チャット ログの取得

この時点で、Amazon IVS チャット ルームに投稿されたすべての新しいメッセージは、添付されたログ設定によって指定された宛先に記録されます。前述のように、ロギング先として CloudWatch を使用する場合、CloudWatch SDK を使用して一定期間のチャット ログを取得できます。これを行うには、 logGroupName 、開始と終了のタイムスタンプ (Unix タイムスタンプ形式)、およびlogStreamNamesが必要です。 logStreamName はaws/IVSChatLogs/1.0/room_[suffix of chat room ARN]形式になります。したがって、ARN がarn:aws:ivschat:us-east-1:[redacted]:room/0wgOPVl4ZRduチャット ルームの場合、 logStreamName はaws/IVSChatLogs/1.0/room_0wgOPVl4ZRduになります。

CloudWatch ログに記録されたチャット メッセージの取得

CloudWatchLogsClientを使用して、チャット ログの取得に使用されるFilterLogEventsCommand ( docs ) を作成する方法を次に示します。


 import { CloudWatchLogsClient, FilterLogEventsCommand } from "@aws-sdk/client-cloudwatch-logs"; const cloudwatchClient = new CloudWatchLogsClient(); const filterLogEventsInput = { logGroupName: 'demo-chat-log-cw-group', logStreamNames: ['aws/IVSChatLogs/1.0/room_0wgOPVl4ZRdu'], startTime: 1672929210000, endTime: 1672929330000, }; const filterLogEventsRequest = new FilterLogEventsCommand(filterLogEventsInput); const filterLogEventsResponse = await cloudwatchClient.send(filterLogEventsRequest); const events = filterLogEventsResponse.events.map(e => JSON.parse(e.message));


使用する開始時刻と終了時刻を知るにはどうすればよいですか? Amazon IVS は、チャネルにストリーミングするときにイベントを EventBridge に送信することに注意してください。特定の Amazon IVS ライブ ストリームのチャット ログを取得しようとしている場合は、ストリームの開始時刻と終了時刻を使用できます。


FilterLogEventsCommandは無数のイベントを返すことができないことに注意してください。 SDK からの 1 回の応答に収まりきらないほど多くのイベントが期間にある場合は、 nextTokenの存在についてFilterLogEventsCommandOutputを確認し、ページネーションを処理する必要がある場合があります。詳細については、SDK ドキュメントを参照してください。


デフォルトでは、この操作は 1 MB に収まる数のログ イベント (最大 10,000 ログ イベント)、または指定された時間範囲内で見つかったすべてのイベントを返します。結果にトークンが含まれている場合は、利用可能なログ イベントが他にもあることを意味します。後続の呼び出しでトークンを指定することにより、追加の結果を取得できます。この操作では、トークンを介して使用可能なログ イベントがさらにある場合でも、空の結果が返されることがあります。


この時点で、チャット ログで必要なことは何でもできます。チャット ログは、カスタム イベントやチャット モデレートに関連するイベントなど、Amazon IVS チャット ルームに投稿されたすべてのイベントをログに記録することを忘れないでください。チャット ストリームを再生したい場合は、おそらくイベントを少し解析して、モデレートされたメッセージをクリーンアップし、「再生可能な」メッセージ ストリームを構築する必要があります。


チャットのモデレートの詳細: まだ読んでいない場合は、Amazon IVS チャットを使用した 自動および手動のチャット モデレートに関する私のブログ投稿をチェックしてください。


ログに記録されたイベントを解析する関数は、次のようになります。あなたのマイレージは異なる場合があります!


 const parseEvents = (events) => { let parsedEvents = []; events.forEach(e => { switch (e.type) { case 'MESSAGE': parsedEvents.push(e); break; case 'EVENT': if (e.payload.EventName === 'aws:DELETE_MESSAGE') { const existingEventIdx = parsedEvents.findIndex(parsedEvent => { return parsedEvent.payload.Id === e.payload.Attributes.MessageID }); if (existingEventIdx > -1) { parsedEvents.splice(existingEventIdx, 1); } } break; } }); return parsedEvents; };


この関数は、チャット ログからモデレートされたメッセージを削除して、チャットのリプレイに適した配列を返します。イベント ストリームがどのように見えるかの小さな例を次に示します。

 [ { "event_timestamp": "2023-01-05T14:33:32.894Z", "type": "MESSAGE", "payload": { "Type": "MESSAGE", "Id": "WhO6MW6iRdS5", "RequestId": "", "Attributes": { "username": "gleningp" }, "Content": "bbiab!", "SendTime": "2023-01-05T14:33:32.894089757Z", "Sender": { "UserId": "75758272-f3f2-4f65-83c5-9b8f144116b8", "Attributes": {} } }, "version": "1.0" }, { "event_timestamp": "2023-01-05T14:33:39.896Z", "type": "MESSAGE", "payload": { "Type": "MESSAGE", "Id": "VwEPwPV74GN3", "RequestId": "", "Attributes": { "username": "rpeirazzia" }, "Content": "perfect", "SendTime": "2023-01-05T14:33:39.896519733Z", "Sender": { "UserId": "704D6BF8-22D2-4A52-B6A7-BDEFB115ECE5", "Attributes": {} } }, "version": "1.0" }, { "event_timestamp": "2023-01-05T14:33:47.330Z", "type": "MESSAGE", "payload": { "Type": "MESSAGE", "Id": "00kqu1sPa6dF", "RequestId": "", "Attributes": { "username": "jmycroft2" }, "Content": "🔥🔥🔥", "SendTime": "2023-01-05T14:33:47.330983449Z", "Sender": { "UserId": "2F12AA2D-DF65-42CF-AE99-133A5A06F7B4", "Attributes": {} } }, "version": "1.0" } ]

まとめ

この投稿では、Amazon IVS チャット ルームに投稿されたメッセージをログに記録する方法を学びました。次の投稿では、自動記録されたライブ ストリームとログに記録されたチャット メッセージをアプリケーションにまとめて、適切な「オンデマンド」リプレイ ユーザー エクスペリエンスを作成する方法について説明します。