Web サーバーを ConoHa に移行しました

このブログを含む、oyasu.info は2010年のブログ移転時(当時の記事)からずっと、ロリポップのレンタルサーバーにお世話になってきました。

最初は月額250円のプランを利用していましたが、2014年には500円の上位プランが2年間の契約を前提に250円で利用できるキャンペーンがあり、今月がその更新期限です。

ロリポップを継続することも考えましたが、今回はこのブログでも紹介してきた、GMO インターネットのクラウドサーバー「ConoHa」に移転することにしました。

現在動かしているものやトレンドを考慮し、今回は下記の要件を設定しました。

Nginx、PHP、MySQL、Let’s Encrypt については、ウェブ検索すると多くの事例が見つかるのですが、Perl はやはり今更対応するという事例も少なそうです。

このサイトでは、アクセス解析、ダウンロード数計測掲示板で CGI を使用しており、特にアクセス解析は代替できるものが見つかりませんでしたので残しておこうと思いました。

実は7月19日に移転を行い、ConoHa 上で動作しています。
しばらくパフォーマンスなどを見守りたいと思います。

新しいサーバーの構成や、移転の際に注意したことについてはまたこのブログで紹介できたらと思います。

実際、PHP 7 で動作しないコードがあることから、修正の手間よりフィーチャーフォンの対応を切り捨てたりしています。

Opera フォーラムの Linux に関する質問に ConoHa が役に立った話(CentOS 編)

私は Opera のフォーラムでも回答を行っているのですが、このような質問を見かけました。

Linux に IPA フォントをインストールすると、Opera でリンクを選択しようとするとフリーズしてしまうという問題です。

この場合、適当な Linux に Opera をインストールして、IPA フォントをインストールする前後での動作を確認すればよいことが分かります。
(もちろん、英語でバグレポートを書くところまでできたらいいのですが、自分で書くと伝わるかどうか不安なので)

Windows についてはメインでは利用しない評価版も含めて複数のバージョンで検証できる環境があるのですが、Linux の環境は持っていません。
そのためだけに、Linux の ISO ファイルをダウンロードするのも面倒。

そこで、ひらめきました。
ConoHa の Linux イメージを使えば簡単にテスト環境が構築できるのでは?

ConoHa とは GMO インターネットのクラウドサービスです。
詳しくは公式サイトをチェックして欲しいのですが、ここで紹介するポイントは3つ。

  • テンプレートにある OS なら25秒で構築 ※公式サイトより
  • 高速 SSD ストレージ
  • 一番安い VPS(1.3円/時)でもCPU2コア・メモリ1GB

サーバー用途としての Linux の利用経験はあるのですが、ブラウザといったクライアント用途でクラウドを使うのは初めてです。

今回の流れ

  1. サーバーの追加
  2. GUI のインストール
  3. Opera のインストール
  4. 再現性の確認

“Opera フォーラムの Linux に関する質問に ConoHa が役に立った話(CentOS 編)” の続きを読む

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円分のクーポンがもらえますので是非登録し、試してみてください。

PowerShell の Invoke-RestMethod を使って ConoHa の API を触ってみた

一つ前の記事に引き続き、Macbook が欲しいために「ConoHa」の API に関する記事を公開します。

以前、旧 ConoHa のオブジェクトストレージの API を用いて PowerShell で操作してみようという記事を公開しました。

そのときのコメントで、Tonghyun Kim さんが

Powershellなら、Invoke-RestMethodはどうでしょう。

とアドバイスしてくださったので、今回はそれを用いて新 ConoHa の API を操作したいと思います。

準備

Invoke-RestMethod を使用するには、PowerShell 3.0 が必要です。
Windows 8.1 では問題ありませんが、Windows 7 でこれまで PowerShell の開発をしたことがない方は気をつけてください。

スクリプトの実行がシステムで無効になっているため、ファイル ○○ を読み込めません。詳細については、「get-help about_signing」と入力してヘルプを参照してください。

上記のメッセージが表示される場合、管理者でPowerShellを起動し以下のコマンドを実行すると解決します。

Set-ExecutionPolicy RemoteSigned

トークンの取得

“PowerShell の Invoke-RestMethod を使って ConoHa の API を触ってみた” の続きを読む

ConoHa の API を使って分かった!3種類のコンソールについて調べてみた

GMOインターネット株式会社の「ConoHa」では API が公開されており、アイデア次第では多くのことができそうです。

今回は、API ドキュメントページを見て、VNC コンソールとシリアルコンソールの違いと、それらのコンソールの URL を API を用いて自動で取得する方法について調べてみました。
確認に利用した C# のソースコードは最後に記載しています。

ConoHa 標準のコンソール

[H27.07.14] ConoHa 通常のコンソール

ConoHa のコントロールパネルから表示できるため、コンソールといえば、これという方も多いでしょう。

特殊キーの送信や、複数行のテキスト送信も可能です。
弱点は、URLは一定ですが、ブラウザを閉じた後の再接続時にログインが求められることです。 “ConoHa の API を使って分かった!3種類のコンソールについて調べてみた” の続きを読む