チュートリアル4: エンドツーエンド通信をする
このチュートリアルでは、エンドツーエンド通信を行います。 送信側のエッジデバイスから、intdash Edge Agent 2とintdashサーバーを経由して、受信側のエッジデバイスまでエンドツーエンドコールを届けます。
準備するもの
注釈
このチュートリアルでは、コール送信用エッジとコール受信用エッジの合計2つのエッジを使用します。
このチュートリアルを実行するには以下が必要です。
intdash Edge Agent 2をインストール済みのエッジデバイス2つ
接続先のintdashサーバーのホスト名(例:xxxxx.intdash.jp)
プロジェクトUUID
コール送信用エッジデバイスに割り当てるエッジUUIDとクライアントシークレット
コール受信用エッジデバイスに割り当てるエッジUUIDとクライアントシークレット
grpcurl の実行バイナリ(インストールの方法はgrpcurlのREADME.mdにある Installation を参照してください。)
エッジUUIDとクライアントシークレットは、ウェブブラウザーでintdashにログイン後、My Pageで発行することができます。 エッジは使用するプロジェクトに所属させておいてください。
接続先サーバーを設定する
コール送信用エッジでの操作
注釈
デーモン(intdash-agentd)の自動起動が行われない環境(Docker Hubで公開されているUbuntuなど)をご使用の場合は、 sudo /etc/init.d/intdash-agentd start
でデーモンを起動してから以下の操作を行ってください。
intdash-agentctl configコマンドを使って接続先サーバーと認証情報を設定します。
$ intdash-agentctl config connection --modify '
server_url: https://xxxxxx.intdash.jp
project_uuid: 00000000-0000-0000-0000-000000000000
edge_uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
client_secret: f1OMTtns..........................JhvNgPJFRk.EXAMPLE
'
--modify
に続く引数はYAML形式の文字列です。あらかじめ準備した接続情報を使用してください。
キー |
入力する値 |
---|---|
server_url |
intdashサーバーのホスト名 |
project_uuid |
使用するプロジェクトのUUID |
edge_uuid |
コール送信用エッジのUUID |
client_secret |
コール送信用エッジのクライアントシークレット |
注釈
YAML形式ではなくJSON形式で設定を与えたい場合は、configコマンドの後に -j
を指定してください。
$ intdash-agentctl config -j connection --modify '{
"server_url": "https://xxxxxx.intdash.jp",
"project_uuid": "00000000-0000-0000-0000-000000000000",
"edge_uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"client_secret": "f1OMTtns..........................JhvNgPJFRk.EXAMPLE"
}'
注釈
intdash-agentctlコマンドの使用方法は -h
オプションにより確認できます。
コマンドごとに異なる情報が表示されます。
$ intdash-agentctl -h
$ intdash-agentctl config -h
$ intdash-agentctl config connection -h
コール受信用エッジでの操作
intdash-agentctl configコマンドを使って接続先サーバーと認証情報を設定します。
$ intdash-agentctl config connection --modify '
server_url: https://xxxxxx.intdash.jp
project_uuid: 00000000-0000-0000-0000-000000000000
edge_uuid: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
client_secret: h7MWjrO..........................XdVdm0Nbs6.EXAMPLE
'
--modify
に続く引数はYAML形式の文字列です。あらかじめ準備した接続情報を使用してください。
キー |
入力する値 |
---|---|
server_url |
intdashサーバーのホスト名(コール送信用エッジで設定したのと同じ値) |
project_uuid |
使用するプロジェクトのUUID(コール送信用エッジで設定したのと同じ値) |
edge_uuid |
コール受信用エッジのUUID |
client_secret |
コール受信用エッジのクライアントシークレット |
コールの受信を行う
E2Eコーラーを起動する
コール受信用エッジでの操作
エンドツーエンド通信を行うには、E2Eコーラーを起動する必要があります。
以下のコマンドを実行してE2Eコーラーを起動します。
$ intdash-agentctl run
これにより、E2Eコーラーが持っているgRPCサーバーがポート50052で起動します。
コールを受信待ちする
コール受信用エッジでの操作
grpcurlを使用して、E2Eコーラーの ReceiveCalls
メソッドをコールします。 ReceiveCalls
はエンドツーエンドコールの受信を指示するメソッドです。
$ grpcurl -plaintext 127.0.0.1:50052 intdash.agent.e2e.E2ECall/ReceiveCalls
注釈
grpcurlのフラグについては grpcurl -help
で確認できます。
コールの送信を行う
E2Eコーラーを起動する
コール送信用エッジでの操作
以下のコマンドを実行してE2Eコーラーを起動します。
$ intdash-agentctl run
これにより、E2Eコーラーが持っているgRPCサーバーがポート50052で起動します。
コールを送信する
コール送信用エッジでの操作
grpcurlを使用して、E2Eコーラーの SendCall
メソッドをコールします。 SendCall
はエンドツーエンドコールの送信を指示するメソッドです。
$ grpcurl -plaintext -d '{
"destination_node_id": "731e9fbd-ec9b-4c52-b959-44f427e03dbf",
"name": "call",
"type": "bytes",
"payload": "aGVsbG8="
}' 127.0.0.1:50052 intdash.agent.e2e.E2ECall/SendCall
このコマンドにより以下の内容のエンドツーエンドコールが送信されます。 SendCall
メソッドの詳細については、 Agent E2E Call API を参照してください。
キー |
入力する値 |
---|---|
destination_node_id |
送信先エッジのUUID |
name |
名称 |
type |
型 |
payload |
base64変換したペイロード |
重要
payloadにbase64変換が必要な理由
SendCall
メソッドのリクエストパラメーターとなるメッセージ SendCallRequest
では、payloadはbytes型のフィールドとして定義されています。
grpcurlのデフォルト設定では入出力はJSON形式ですが、 gRPCメッセージのJSONへのマッピング に従うと、bytes型はbase64変換を行う必要があります。
そのため、上記のようにpayloadはbase64変換を行ってからJSONに含めています。
受信したコールを確認する
コール受信用エッジでの操作
コールの受信待ちを行なっているgrpcurlコマンドの標準出力を確認します。
$ grpcurl -plaintext -d "{}" 127.0.0.1:50052 intdash.agent.e2e.E2ECall/ReceiveCalls
{
"callId": "f4243196-fc3f-4652-b216-578fbf6acdca",
"sourceNodeId": "9f9391de-7277-40b9-bd88-78d4065c6869",
"name": "call",
"type": "bytes",
"payload": "aGVsbG8="
}
受信したコールの文字列が出力されています。
確認が済んだら、 Ctrl+Cを押して、grpcurlを終了します。
コール受信用エッジでの操作
intdash-agentctl run を実行したターミナルでCtrl+Cを押して、intdash-agentctl runを終了します。
コール送信用エッジでの操作
intdash-agentctl run を実行したターミナルでCtrl+Cを押して、intdash-agentctl runを終了します。