ConoHa で WebSocket 接続を試みるも 502 エラーが出現


またまたMacbook が欲しいために「ConoHa」の API に関する記事を公開します。

タイトルにもありますが、今回は上手くいかなかった例を紹介します。
どなたか詳しい方がいらっしゃれば、アドバイスをいただけると嬉しいです。

挑戦したいこと

先日更新した記事で、ConoHa には noVNC コンソールと HTTP のシリアルコンソールがあると紹介しました。

API ドキュメントにはあるものの紹介していないコンソールがありました。

WebSocket については Wikipedia にもありますが、サーバーとクライアントを常時接続するようなプロトコルで、プロキシサーバーが必要な環境でも接続できるのが特徴です。

WebSocket 接続用 URL の取得

前回紹介した PowerShell のスクリプトの

{"os-getVNCConsole":{"type": "novnc"}}

{"os-getSerialConsole":{"type": "serial"}}

に書き換えるだけです。

$apiUser = "APIユーザー名"
$apiPassword = "APIパスワード"
$tenantId = "テナントID"
$identityServiceUrl = "https://identity.tyo1.conoha.io/v2.0"
$computeService = "https://compute.tyo1.conoha.io/v2"
$uuid = "VPS設定-UUID"
# 有効な期間のトークンがあれば
$token = "" 

# トークンの取得
function getToken([string] $tenantId, [string] $apiUser, [string] $apiPassword, [string] $authurl){
    $body = '{"auth":{"passwordCredentials":{"username":"' + $apiUser + '","password":"'+$apiPassword+'"},"tenantId":"'+$tenantId+'"}}'
    $url = $identityServiceUrl+"/tokens"
    $result = Invoke-RestMethod $url -Method POST -Body $body
    return $result
}

# コンソールの URL 取得
function getWebSocketConsole([string] $tenantId, [string] $uuid, [Hashtable] $tokenHeader, [string] $computeService){
    $body = '{"os-getSerialConsole":{"type": "serial"}}'
    $url = $computeService + "/" + $tenantId + "/servers/" + $uuid + "/action"
    $result = Invoke-RestMethod $url -Method POST -Body $body -Headers $tokenHeader
    return $result.console.url
}

# 処理
if ($token -eq "") {
    $mytokens = getToken $tenantId $apiUser $apiPassword $identityServiceUrl
    $token = $mytokens.access.token
}
$tokenHeader = @{"X-Auth-Token" = $token}
$url = getWebSocketConsole $tenantId $uuid $tokenHeader $computeService
# URL 表示
Write-Output $url

成功するとこのような wss で始まる WebSocket の URL が得られます。

wss://console.tyo1.conoha.io/?token=○○

WebSocket クライアントからの接続

とりあえず WebSocket の接続サンプルを使うことにしました。

JavaScript

WebSocket の公式サイトにテストがあったので試してみました。

WebSocket の URL を入力して接続しても、ERROR:undefined と表示されてしまいました。
Creating your own test を自分で書き換えても同様のエラーが発生しました。

テストサーバーである、
ws://echo.websocket.org/
wss://echo.websocket.org/
は問題なく接続できるので、回線が WebSocket を制限しているわけでもなさそうです。

ブラウザの開発者ツールで確認してみると、502 Bad Gateway エラーが発生しているようです。

[H27.07.17]ConoHa WebSocket 502

C#

こちらのブログを参考に、C# での確認も行いました。

こちらも、ws://echo.websocket.org/ や wss://echo.websocket.org/ は問題なく接続できました。
違うネットワークから接続してもだめでした。

サポートに問い合わせてみた

困ったので、ConoHa のサポートに問い合わせてみました。

回答は「APIで接続用URL取得後の動作については案内が困難」とのことでした。
クライアントの問題や利用者の回線の問題も考えられるため、そこまではサポートできないというのも納得できます。

今回は、こうしてブログに書くことによって、誰かの参考になればと思います。

おわりに

現在友達の紹介キャンペーンを実施しており、こちらのリンクから ConoHa に登録していただくと、1000円分のクーポンがもらえますので是非登録し、試してみてください。


Comments

comments

コメントを残す

メールアドレスが公開されることはありません。

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)