さくらのクラウド 新プランとプラン移行ツール cloud-plan-migrate

昨年9月にさくらのクラウド 石狩第1ゾーンの新規申し込み受付が再開されました。
それに伴いサーバ/ディスクの新しいプランが提供され、同一性能のプランで比較すると新プランの方が安く提供されるようになりました。

今回はこの新プランを活用すべく、旧プランから新プランへの変更を行うためのツールcloud-plan-migrateを作成しましたのでご紹介いたします。

github.com

石狩第1ゾーンの新規申し込み受付再開

2018/9/27に石狩第1ゾーンでの新規申し込みの受付が再開されました。

www.sakura.ad.jp

これまでは2016/7/1以降に新規作成されたアカウントでは石狩第1ゾーンを利用することができませんでした。

cloud-news.sakura.ad.jp

これが新規申し込み受付が再開されたことにより、アカウントの新旧問わずに石狩第1ゾーンが利用可能となりました。

新規申し込み受付再開と同時に新プランも提供開始

また、新規申し込みの再開と同時にサーバとディスクに新プランが提供されました。
新プランはプラン数が従来の石狩第2/東京第1ゾーンと同等にまで拡充され、同一性能のプランにおいては旧プランよりも低価格になるとのことです。

この新プランについて詳しく追ってみます。

新プランの特徴

新プランについての詳細は以下のさくらのクラウド マニュアルに記載されています。

manual.sakura.ad.jp

これらによると、新プランの特徴として以下のようなものがあるとのことです。

  • 選択できるプランの拡大(東京第1ゾーンとおなじく全94プランに)
  • 同一性能プランにおいて値下げ
  • 以下のディスクサイズが選択可能に
    • SSD 40GB
    • SSD 1TB
    • SSD 2TB
    • SSD 4TB
    • 標準プラン 8TB
    • 標準プラン 12TB

旧プランも継続利用可能(ただし前提条件あり)

また、これまで石狩第1ゾーンでサーバ/ディスクを利用していた場合(2016/7/1以前に作成されたアカウント)、 現在でも旧プランでサーバ/ディスクを作成することが可能です。
現時点でコントロールパネルにて石狩第1ゾーンのサーバ or ディスクの一覧画面を開いたときに、旧プランという表示がされたリソースが1つでもあれば旧プランを継続利用可能になっているはずです。

コントロールパネルでの新旧プラン表示の例:

f:id:febc_yamamoto:20190121100245p:plain

新プランを利用する場合の注意点

注意点として、サーバとディスクを接続する場合はどちらも同じ世代(新/旧)のプランでないといけないという点があります。
例えば、新プランで作成したサーバに旧プランのディスクを接続することはできません。

同一性能プランでの新旧の価格比較

ディスクの価格については新旧プランで違いはないようです。
サーバについては同一性能プラン(コア数/メモリサイズが同一)で比較したところ以下のように新プランの方は全体的に値下げされていました。

新旧プラン価格比較:

コア数 メモリサイズ(GB) 旧プランとの価格差分
1 1 〜 5 ¥-10 〜 ¥-357
2 2 〜 6 ¥0 〜 ¥-648
3 3 〜 12 ¥-810 〜 ¥-2,268
4 4 〜 16 ¥-1,620 〜 ¥-3,564
5 8 〜 24 ¥-2,916 〜 ¥-5,508
6 12 〜 32 ¥-4,212 〜 ¥-7,452
8 16 〜 48 ¥-6,156 〜 ¥-11,340
10 24 〜 64 ¥-8,748 〜 ¥-13,500
12 48 〜 128 ¥-2,700 〜 ¥-14,796

個々のコア数/メモリサイズでの価格比較については以下の画像を参照ください。

f:id:febc_yamamoto:20190118184132p:plain

注: この表/画像は2019/1/18時点で独自に調べたものです。もし誤りなどありましたらコメントください。最新の情報は公式サイトなどを参照ください。

2コア2GBメモリのプランでは新旧で価格の差がないですが、それ以外のプランは全て値下げされています。
特にハイスペックなプランほど値下げ幅が大きいですね。最大で12コア/64GBメモリで¥14,796の値下げです。
また、ここでは月額で比較しましたが、さくらのクラウドでは時間単位/日単位/月単位で課金額が変わります(その時点での最安値となる)。
時間単位/日単位の金額も月額と同じように新プランで値下げされていますので気になる方は比較してみると良いかもしれません。 (旧プランを継続利用している方はあまり時間単位/日単位での利用はしないのではないかという気もしますが)

旧プランから新プランへの移行

前述のマニュアルによると、プラン移行には以下の方法があるようです。

  • コントロールパネル/APIなどでプラン変更を行う(要シャットダウン)
  • 旧サーバをクローンして新サーバを作成する

これ以外にも、自前で新規サーバを作成&プロビジョニングして必要なデータ類をコピーして移行といった方法も考えられますが、 この方法はプラン変更としては本質的にクローンする処理と同じですので説明は割愛します。

それぞれの方法をもう少し詳しくみてみます。

コントロールパネル/APIでプラン変更を行う

さくらのクラウドではサーバのプラン変更を行うためのAPIPUT /server/:serverid/planが提供されています。

このAPIは新プラン提供開始に伴いPlanIDの指定方法が変わりました。
APIのドキュメント: https://developer.sakura.ad.jp/cloud/api/1.1/server/#put_server_serverid_to_plan_planid

APIを利用する際は以下のプラン変更API利用時の注意を参照してください。
プラン変更API利用時の注意: https://manual.sakura.ad.jp/cloud/support/is1a-gen2.html#api

コントロールパネルからプラン変更を行うことでこのAPI経由でプラン変更が行えます。

f:id:febc_yamamoto:20190118184330p:plain

コントロールパネルからサーバのプラン変更を行なった場合、サーバのプランのみが変更されディスクのプランは変更されない点にご注意ください。
前述の通り、新プランのサーバに旧プランのディスクを接続したままの利用はできないため、このままだと起動時に以下のようなエラーが出ます。

f:id:febc_yamamoto:20190118184350p:plain

このため、サーバのプラン変更時にはディスクのプラン変更も合わせて行う必要があります。

ディスクについてはディスクの新規作成時に旧プランのディスクをソースとして選択した上で新プランで作成するという形になります。

f:id:febc_yamamoto:20190118184416p:plain

新プランでのディスクの作成後はサーバに対して旧ディスクの切り離し/新ディスクの接続という作業も必要になりますので忘れないようにしましょう。 また、ディスクソースとした旧プランのディスクは不要になりますので、新旧で2重に課金されないようにこちらも忘れずに削除しましょう。

コントロールパネル/APIでプラン変更を行う際の作業まとめ

ここまでをまとめると、コントロールパネル/APIでプラン変更を行うには以下のような作業が必要ということです。

  • サーバのシャットダウン
  • 旧プランのディスクをコピーして新プランのディスク作成(※1)
  • サーバを新プランに変更
  • 旧プランのディスクをサーバから切り離し(※1)
  • 新プランのディスクをサーバに接続(※1)
  • サーバの起動
  • 旧プランのディスクを削除(※1)

※1: 複数のディスクを接続している場合は各ディスクに対して作業が必要

コントロールパネル/APIでプラン変更を行う際の注意点(特にTerraform関連)

この方法でプラン変更を行う場合、プラン変更後はサーバ/ディスクのIDが変更される点に注意が必要です。

これは特にリソースマネージャーTerraform for さくらのクラウドを利用して構成管理している場合に問題になります。
Terraform for さくらのクラウドでは作成したリソースのIDを状態として保持(terraform.tfstateファイルなど)しておき、それを元にさくらのクラウドAPIを呼び出しています。
IDが変わってしまうとterraform apply時に処理対象のリソースが見つからないということでリソースの新規作成を行おうとしてしまいます。
これを防ぐにはterraform.tfstateファイルの編集といった作業が必要になります。

Terraformをご利用中の場合は対応作業が発生する可能性を考慮しておいてください。 (不安な方はさくらのクラウドユーザーコミュニティ向けのSlackワークスペースなどでご相談ください)

旧サーバをクローンして新サーバを作成する

旧ディスクをコピーして新プランのディスクを作成、新たに作成したサーバと接続することでプラン移行する方法です。
これを行うために、コントロールパネルにて クローン機能 が提供されています。

manual.sakura.ad.jp

クローン機能を用いることでサーバ/ディスクを同時に新プランへ移行することが可能です。
(なお、さくらのクラウド CLIであるusacloudではクローン機能に該当する機能は提供しておりません…クローン機能はコンパネが提供している便利機能なんですよね)

ただし、クローン機能を利用する場合、以下の点に注意が必要です。

  • サーバは新規作成されるため、共有セグメントを利用してグローバルIPを割り当てている場合にグローバルIPが変更される
  • 追加NICや2つ目以降のディスクのコピーは行われない

プラン変更APIの場合は共有セグメント利用時に割り当てられたグローバルIPを保持したままプラン変更できますが、クローンの場合はサーバの新規作成となるためグローバルIPが変更されます。
スイッチ+ルータ(固定のIPアドレスブロックを確保するサービス)を利用している場合などは問題ないと思いますが、そうでない場合は注意が必要です。

また、追加NICや2つ目以降のディスクについても個別に対応が必要になります。

移行方法まとめ

それぞれの方法の特徴や注意点をまとめると以下のようになります。

移行方法 特徴 注意点
プラン変更API コンパネなどからプラン変更用のAPIを利用する - あらかじめサーバのシャットダウンが必要
- サーバ/ディスクで個別に作業が必要
- プラン変更後はサーバのIDが変わる
クローン機能 旧ディスクをコピーして新規作成したサーバに接続する - サーバのグローバルIPが変更される場合がある
- 追加NIC/追加ディスクがある場合は個別に作業が必要

旧プランから新プランに移行すべきか?

今の所は旧プランも(旧プランのリソースが残ってる限りは)継続して利用可能ですのですぐに移行する必要はないと思います。
しかし、新プランでは全体的に値引きされており、継続的に利用するサーバであれば新プランへ移行してしまった方がおトクです。

移行にはサーバの停止や移行作業(これらに伴う準備/検証などの作業も)が必要となりますので、それらの工数も考慮して移行すべきか決定すると良いでしょう。

このため基本的な方針としては、

  • 一時的に止めても良いサーバであればプラン変更APIで移行する
  • サーバを止められない場合は個別に検討する

といった形になるとおもいます。

移行する決定をした場合、出来るだけ速やかに移行した方が料金的におトクですのであまり手間をかけずサッと作業してしまいたいところですね。

プラン移行ツール cloud-plan-migrate

ということでやっと本題です。
前述の通り、プラン変更APIを利用するには結構手間がかかる & クローン機能を使うとグローバルIPが変わる、追加NIC/ディスクは個別に対応が必要、とどちらを選んでも結構手間がかかります。 1〜2台であれば手作業でも良いですが、それ以上、場合によっては数10〜数100台にもなった場合に手作業を行うのは大変です。

個別にAPIを叩くスクリプトを組んでも良いですが、今回限りのソリューションとなるため作り込むことをためらう方も多いと思います。

そこで、さくらのクラウド関連のOSSを集めたsacloudオーガニゼーション配下にcloud-plan-migrateというツールを公開しておきました。

github.com

cloud-plan-migrateについて

Go言語で書かれたCLIツール

cloud-plan-migrateはGo言語で書かれた、プラン変更に特化したCLIツールです。
シングルバイナリでインストールは実行ファイルをダウンロードするだけ、さらにWindows/Linux/macOSなどの各種プラットフォームをサポートしています。

処理の流れ

cloud-plan-migrateは前述のプラン変更APIを用いる方式を採用しています。
具体的にはさくらのクラウドAPIを用いて以下のような処理を行います。

  • サーバのシャットダウン
  • サーバに接続されたディスクをコピーして新プランのディスクを作成
  • サーバに接続されたディスクの切り離し
  • サーバのプラン変更
  • 新プランのサーバに新プランのディスクを接続
  • サーバの起動(オプションで無効化できる)
  • 旧プランのディスクの削除(デフォルトで無効、オプションで有効化できる)

複数台のサーバを一気に処理することができるようになっており、 最大で同時に10サーバ分の処理を平行で行うようになっています。 (処理対象は10サーバ以上を指定可能です。)

プラン変更APIを利用しますので、以下の点は注意が必要です。

  • 処理中はサーバがシャットダウンされる
  • プラン変更後はサーバのIDが変更になる

その代わりにグローバルIPは保持したままとなりますので、プラン変更後にサーバ起動を起動した後はプラン変更前と変わらずご利用いただけるようになっています。
停止時間が許容できる、かつ複数台を一括でプラン変更したい場合などでご利用いただけるかと思います。

インストール

以下のGitHubリリースページから各プラットフォーム向けのバイナリをダウンロードするだけです。

github.com

使い方

実行時にさくらのクラウドAPIキー(トークンとシークレット)が必要です。
APIキーには作成・削除権限が必要となりますので忘れずに権限を設定しておいてください。

APIキーが準備できたら以下のように実行します。

$ cloud-plan-migrate <オプション> <対象サーバのID or 名称>

実行すると以下のようにAPIキーの入力が求められますので用意しておいたAPIキーを入力してください。

$ cloud-plan-migrate <ID or 名称>

Your API AccessToken is not set
    Enter your token: <トークンを入力>
Your API AccessTokenSecret is not set
    Eneter your secret: <シークレットを入力>

実行中は以下のようにサーバ/ディスクごとに処理状況が表示されます。

f:id:febc_yamamoto:20190118185115p:plain

ディスクのコピー処理に時間がかかりますが、それ以外は数秒〜数10秒で終わるはずです。
ディスクのコピー処理はディスクサイズやクラウドAPI側の負荷状況にもよりますが数時間かかることもあります。

参考までに、コントロールパネルのディスクコピーを行う画面には 【完了までの目安時間】2TB: 約6時間, 4TB: 約12時間と書かれています。
実行するタイミングでも結構上下していた感触です(私の手元のマシンで実行した際は20GBのディスクで2〜3分しかかからなかったこともありました。)。
実際に本番環境で実行する際はあらかじめ数回テスト用のサーバなどで試してどれくらいの時間がかかるか試しておくことをお勧めします。

(オプション) 環境変数でのAPIキーの指定

APIキーはコマンド実行時に対話入力する方法以外に、コマンドラインオプションで渡す or 環境変数で指定する方法もあります。

環境変数で指定する場合は以下のようにします。 (usacloudやTerraform/Packer for さくらのクラウドなどと共通の環境変数です)

$ export SAKURACLOUD_ACCESS_TOKEN="APIトークン"
$ export SAKURACLOUD_ACCESS_TOKEN_SECRET="APIシークレット"

パラメータ/オプションについて

コマンドの引数としてプラン変更対象サーバのIDまたは名称を指定します。
名称を指定した場合、部分一致する全ての旧プランサーバが対象となります。

また、ID/名称以外にも--selectorオプションでサーバにつけられたタグを用いて対象を指定可能です。
例えば以下のようにした場合、app=webというタグを持つサーバのみ対象とできます。

なおサーバの名称を指定する場合と異なり、完全一致するタグを持つサーバのみが対象となる点に注意してください。

$ cloud-plan-migrate --selector "app=web"

その他のオプションは以下のものが指定可能です。

APIキー関連

  • --token: [必須] APIキー(トークン)、環境変数 SAKURACLOUD_ACCESS_TOKENでも指定可能です。
  • --secret: [必須] APIキー(シークレット)、環境変数 SAKURACLOUD_ACCESS_TOKEN_SECRETでも指定可能です。

これらを省略した場合、実行時に入力を促すダイアログが表示されます。

マイグレーションの動作関連

  • --selector: 対象サーバをタグで指定する
  • --disable-reboot: プラン変更後にサーバの起動を行わない
  • --cleanup-disk: プラン変更後に旧ディスクを削除する

その他

  • --assumeyes/-y: 実行前の確認を省略する

コマンド実行のログ出力

コマンドを実行するとカレントディレクトリにmigrate-[日付].logというファイル名でログ出力されます。
エラー発生時のトラブルシューティングなどにご利用ください。

エラー時の挙動について

API呼び出しでエラーが発生した場合、エラーが発生した対象のサーバの処理はスキップされます。 それ以外のサーバについては処理が続行されます。

Dockerでの実行

Docker向けのイメージも用意しています。
以下のようにすることでDockerを用いてcloud-plan-migrateを実行できます。

# カレントディレクトリにログ出力されるため-vオプションを指定
$ docker run -it --rm -v $PWD:/work sacloud/cloud-plan-migrate <ID or 名称>

まとめ

今回は石狩第1ゾーンでの新プランについてと旧プランからの移行ツールcloud-plan-migrateを紹介しました。
複数台のサーバ/ディスクのプラン変更を行う際に便利だと思いますのでぜひご活用ください。

皆様のお役に立てば幸いです。

もしプラン変更作業にお悩みの際はユーザーコミュニティ向けのSlackワークスペースでQAなどを行なっておりますので是非ご活用ください。 以下のURLから参加できます。

https://slack.usacloud.jp/

以上です。