1/31まで!OneDrive で 25GB を失いたくないから登録してみた

先日、OneDrive が 15GB から 5GB への容量の削減を発表しましたが、事前に申請することで従来の容量が維持できるようになりました。

まずは、現在どれだけの容量を利用しているか確認してみました。
[H27.12.16] OneDrive 現在の容量

  • 無料:15GB
  • 紹介特典:0GB(最大10人紹介で+5GB)
  • ロイヤリティボーナス:10GB
  • カメラロールボーナス:15GB

“1/31まで!OneDrive で 25GB を失いたくないから登録してみた”の続きを読む

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種類のコンソールについて調べてみた”の続きを読む

ConoHa の DB 接続用ネットワークが手順通りにできないのでメモ

6/22 追記:
サポートに問い合わせたところ、チュートリアルページの説明が変更されました。新しい設定については、時間があるときに確認したいと思います。

ConoHa には「アプリケーションサーバー」機能が追加され、MySQL 互換のデータベースサーバーが利用できます。

現在、ConoHa の API に関する記事を書くといいことがありますが(キャンペーンページ)、今回は API を利用しない内容です。
また、こちらのリンクから ConoHa に登録していただくと、1000円分のクーポンがもらえますので是非こちらから登録してみてください。

具体的なサーバーの追加手順については、ConoHa のチュートリアルをご覧ください。

ここまでは順調にできたのですが、詰まったのは VPS と DB サーバーを専用のプライベートネットワークで接続する設定です。
ちなみに、接続する VPS サーバーの設定はこの通りです。

ConoHa LAMP

リージョン:東京
イメージタイプ:アプリケーション
アプリケーション:LAMP(PHP)
バージョン:latest-64bit

VPS の起動後、バージョンを確認してみました。

$ cat /etc/redhat-release
CentOS release 6.6 (Final)
$ php -v
PHP 5.6.8 (cli) (built: Apr 16 2015 20:00:59)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
$ mysql -u root --password==(パスワード)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.73 Source distribution

下記のチュートリアルページを参考に、「DBサーバー接続用ネットワークを作成する」と「ネットワークの設定情報を確認する」までは確認できましたが、最後の「VPSの設定を行う」で、ヘルプ通りにできませんでした。

チュートリアルは CentOS 6.6で東京リージョンの設定を紹介しており、こちらの環境も同じ設定です。

ネットワークインターフェイス(eth1)の設定を行います。

$ cd /etc/sysconfig/network-scripts/
$ vi ifcfg-eth1

ifcfg-eth1の内容は以下のようにします。

DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.21.***.***
NETMASK=255.255.254.0

ここの IPADDR は、VPS のネットワーク情報→shared から始まる NIC の IP アドレスです。
ここで、間違ってゲートウェイアドレスを書いてしまわないよう気を付けてください。(一回やってしまいました)

途中ですが、設定の反映とその確認をします。

$ service network restart
(略)
$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr (略)
          inet addr:172.21.***.***  Bcast:172.21.***.255  Mask:255.255.254.0
(以下略)

正しく反映されました。

次に、このネットワーク用の静的ルーティングを設定します。ルーティングはリージョン毎に異なっており、東京リージョンは 172.21.74.0/23 を設定します。

$ vi route-eth1

ifcfg-eth1の内容は以下のようにします。(以下は東京リージョンの場合)

172.21.74.0/23 via 172.21.74.1 dev eth1

公式ドキュメントの方には「172.21.140.0/23 via 172.21.140.1 dev eth1」と書かれていますが、すぐ上には 172.21.74.0/23 と書かれていますし、VPS の設定画面でも 140 は出てこないので間違いでしょう。

設定の反映と ネットワークが正しく設定されていることを確認するため、DBサーバーにpingを送信してみます。

$ service network restart
$ ping -c 3 private.***.tyo1.database-hosting.conoha.io
PING private.unit01.database-hosting.tyo1.conoha.io (172.21.74.**) 56(84) bytes of data.

--- private.unit01.database-hosting.tyo1.conoha.io ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 11999ms

??? エラーが出てしまいました。

もちろん、データベースにもアクセスできません。

$ mysql -u [接続ユーザー名] -h private.***.tyo1.database-hosting.conoha.io -p [データベース名]
ERROR 2003 (HY000): Can't connect to MySQL server on 'private.***.tyo1.database-hosting.conoha.io' (110)

ルーティングテーブルを確認すると、追加されていないことが分かったので、routeコマンドで追加してみました。

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
133.130.54.0    0.0.0.0         255.255.254.0   U         0 0          0 eth0
172.21.138.0    0.0.0.0         255.255.254.0   U         0 0          0 eth1
0.0.0.0         133.130.54.1    0.0.0.0         UG        0 0          0 eth0
$ route add -net 172.21.74.0 netmask 255.255.254.0 gw 172.21.74.1 eth1
SIOCADDRT: No such process

エラーメッセージで検索するとこのページを見つけました。

この中で気になったのが、この部分。

あまり今まで考えたことが無かったのですが、GW と dev を一緒にするとこのエラーになるようです。
man で見た例でも一緒に使用している例は無いようです。

gw の部分を削り、設定してみました。

$ route add -net 172.21.74.0 netmask 255.255.254.0 eth1
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
133.130.54.0    0.0.0.0         255.255.254.0   U         0 0          0 eth0
172.21.138.0    0.0.0.0         255.255.254.0   U         0 0          0 eth1
<strong>172.21.74.0     0.0.0.0         255.255.254.0   U         0 0          0 eth1</strong>
0.0.0.0         133.130.54.1    0.0.0.0         UG        0 0          0 eth0

とりあえず、登録できましたが、ゲートウェイの部分が設定されていません。これでもいいのかなと思いつつ接続テストを行いました。

$ ping -c 3 private.***.tyo1.database-hosting.conoha.io
PING private.unit01.database-hosting.tyo1.conoha.io (172.21.74.**) 56(84) bytes of data.
64 bytes from 172.21.74.**: icmp_seq=1 ttl=63 time=0.451 ms
64 bytes from 172.21.74.**: icmp_seq=2 ttl=63 time=0.406 ms
64 bytes from 172.21.74.**: icmp_seq=3 ttl=63 time=0.310 ms

--- private.unit01.database-hosting.tyo1.conoha.io ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.310/0.389/0.451/0.058 ms
$ mysql -u [接続ユーザー名] -h private.***.tyo1.database-hosting.conoha.io -p [データベース名]
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4488694
Server version: 5.5.5-10.0.19-MariaDB-log MariaDB Server

接続できました!しかし、毎回ルーティングを追加するのも困りますので、ファイルに設定します。

$ cd /etc/sysconfig/network-scripts/
$ vi route-eth1
# 172.21.74.0/23 dev eth1
$ service network restart

ファイルの書き換え後は、再起動を行っても問題なく接続できるようになりました。

まとめ

ConoHa チュートリアルの /etc/sysconfig/network-scripts/route-eth1 は
172.21.140.0/23 via 172.21.140.1 dev eth1
では動作しない。
→ 東京リージョンの場合 172.21.74.0/23 dev eth1 で動作する。

この内容を、ConoHa のサポートに問い合わせてみたいと思います。
ネットワーク関係に詳しい方で、この記事におかしい点がありましたらコメントをいただけると幸いです。

最後に、こちらのリンクから ConoHa に登録していただくと、1000円分のクーポンがもらえますので是非こちらから登録してみてください。