sacloudプロダクトとの連携を強化したvagrant-sakuraの新機能

f:id:febc_yamamoto:20180910233040p:plain

今日は最近開発が再開した、Vagrantさくらのクラウドのサーバを操作するためのプロバイダーvagrant-sakuraについて、 最近追加された新機能についてご紹介します。

github.com

vagrant-sakuraって?

一言で言うと「Vagrantさくらのクラウド上のサーバを操作する機能を追加するためのプラグイン」です。
基本的な機能は以下の記事が詳しいです。

knowledge.sakura.ad.jp

vagrant-sakuraの開発再開

このvagrant-sakuraですが、元々はtsaharaさんが開発されたものです。
2016年5月にリリースされたv0.0.8以降は新規機能追加などの活動があまり行われていませんでしたが、 2018年7月にさくらのクラウド関連のユーザーコミュニティによるOSSを置いているGitHub上のオーガニゼーションsacloudリポジトリ移転がなされ、 そこから開発を再開しいくつかの機能追加/改善を行ってきました。

github.com

sacloud配下にはVagrantをはじめ、PackerやTerraformといったHashiCorpプロダクトのさくらのクラウド向けプラグインCLI Usacloudなどもあります。

vagrant-sakuraの新機能には、これらのプロダクトとの相互運用を楽にするための機能追加なども含まれています。
ということで早速新機能を紹介していきます。

sacloud/vagrant-sakuraの新機能

本日(2018/9/10)リリースした vagrant-sakura v0.1.0時点では以下のような機能が追加されています。

  • 環境変数 SAKURACLOUD_xxxからのAPIキーの読み込み機能
  • Usacloudの設定ファイル(APIキー)の読み込み機能
  • パケットフィルター/スタートアップスクリプト指定機能
  • コピー元アーカイブを種別(os_typeパラメータ)で指定する機能
  • OSの再インストール機能

順にみていきます。

環境変数 SAKURACLOUD_xxxからのAPIキーの読み込み機能

以下の環境変数APIキーの指定が可能となりました。

  • SAKURACLOUD_ACCESS_TOKEN : APIアクセストーク
  • SAKURACLOUD_ACCESS_TOKEN_SECRET: APIアクセスシークレット
  • SAKURACLOUD_ZONE: 操作対象ゾーン

これまでもSAKURA_ACCESS_TOKENといった環境変数が利用できましたが、これはvagrant-sakura独自のものでした。
追加された環境変数はUsacloudやTerraform for さくらのクラウド、Packer for さくらのクラウドといったSacloudプロダクトと共通で利用できるもので、 既にSacloudのプロダクトをご利用中の方であれば設定していることの多い環境変数です。

Vagrantで開発してたものをPackerでパッケージングし、Terraformでproduction環境に反映、運用保守はUsacloudでといった場合に それぞれでAPIキーの設定をせずとも共通の環境変数が利用できるようになったのは地味ですが意外と便利です。

Usacloudの設定ファイル(APIキー)の読み込み機能

同じくAPIキーの設定関連の機能ですが、APIキーをUsacloudの設定ファイルから自動で読み込んでくれる機能です。 Usacloudは複数のアカウントを使い分けられるようにAPIキーを設定ファイルに複数保存しておき、必要に応じて切り替えて使う機能を持っています。

今回追加された機能により、この設定ファイルをvagrantでも認識できるようになりました。

前述の機能と合わせるとAPIキーの設定は以下3通りの設定方法があることになります。

複数の方法でAPIキーを指定した場合は、より上に記載されている方法が優先されます。

使い方

VagrantfileにAPIキーの指定を行っていない場合は自動的にUsacloud設定ファイルを読み込むようになっています。

Usacloudで複数のAPIキー設定がある場合はカレントの設定を利用しようとします。 (以下の例だとuser01の設定を利用する)

# 登録されているAPIキー設定(コンフィグ)を一覧表示
$ usacloud config list

default
user01
user02

# 現在利用しているAPIキー設定を表示
$ usacloud config current

user01

Usacloud側でカレントの設定を変更するとVagrant側も追随するようになっています。

# Usacloudでカレントを変更
$ usacloud config use user02

Current profile: "user02"

# 現在利用しているAPIキー設定を表示
$ usacloud config current

user02

Usacloudではconfig edit機能で対話的にAPIキーの設定が可能となっています。複数のAPIキーを利用している場合は手軽に切り替えができるようになりますのでぜひご利用ください。

パケットフィルター/スタートアップスクリプト指定機能

結構要望があった機能です。サーバ作成時にパケットフィルタやスタートアップスクリプトを指定可能となっています。

使い方

VagrantfileにてそれぞれにIDを指定すればOKです。

Vagrant.configure("2") do |config|
  # ...

  config.vm.provider :sakura do |sakura, override|
    # ...

    #============================================
    # スタートアップスクリプトの指定
    #============================================
    # IDで指定
    sakura.startup_scripts = 123456789012
    
    # 文字列でもOK
    # sakura.startup_scripts = "123456789012"
  
    # 複数指定する場合
    # sakura.startup_scripts = [123456789012, xxx, yyy, ...]

    #============================================
    # パケットフィルタの指定
    #============================================
    sakura.packet_filter = 123456789012

  end
end

コピー元アーカイブを種別(os_typeパラメータ)で指定する機能

これまではサーバ作成時にコピー元アーカイブのIDを指定する必要がありました。

Vagrant.configure("2") do |config|
  config.vm.box = "dummy"
  config.ssh.username = "root"

  config.vm.provider :sakura do |sakura|
    sakura.disk_source_archive = 111111111111 # アーカイブのIDを指定
  
    sakura.use_insecure_key = true
  end
end

アーカイブのIDを知るにはコントロールパネルで調べたり、vagrant-sakuraのsakura-list-idコマンドやUsacloudでアーカイブを検索して調べるという作業が必要でした。
さくらのクラウドではいくつかのOSについてはパブリックアーカイブというアーカイブが提供されているため、これらのIDを指定することでサーバの作成が可能となっています。

しかし、厄介なことにパブリックアーカイブのIDはゾーンごとに異なります。
例えば石狩第2ゾーンでのCentOS7と東京第1ゾーンでのCentOS7では違うIDとなっています。
また、同じCentOS7でも、さくらのクラウド側でアップデートが行われることがあり、その際にはIDが変更されることが多いです。

なのでIDを直接指定する形だとある日突然サーバの作成が行えなくなるといったことが発生していました。

UsacloudやTerraform、Packerでも同様の問題が発生しますが、これらのプロダクトではos_typeというOSの種別を指定できる機能で対応しています。
これは、centosubuntuといったOS種別を指定すると種別に対応する各ゾーンの最新安定板のアーカイブのIDを検索し設定してくれるものです。

例えばUbuntuパブリックアーカイブの場合は16.04.4や18.04といった複数のバージョンが存在するため、それらの中から最新安定板を選ぶようにしています

vagrant-sakuraでは以下の値が指定可能です。

  • ubuntu(デフォルト)
  • centos
  • centos6
  • debian
  • coreos
  • freebsd
  • rancheros

パブリックアーカイブを利用する場合はos_typeを用い、自分で作成したアーカイブ(マイアーカイブ)を利用する場合はdisk_source_archiveを利用するという使い分けがオススメです。

OSの再インストール機能

従来はvagrant-sakuraで作成したサーバのOS再インストールを行う場合は、一旦destroyしてから再度upする必要がありました。 こうするとさくらのクラウドで割り当てられたグローバルIPが変更されてしまうことがあり、DNS登録していた場合はそちらも変更しなければいけないケースがありました。

そこで今回作成されたサーバはそのまま(もちろん割り当てられたグローバルIPは確保したまま)でOSの再インストールを行うためのサブコマンドを追加しました。

使い方

sakura-reinstallというコマンドを実行することでOS再インストールが行えます。

$ vagrant sakura-reinstall

Ansibleなどのサーバ構成管理ツールを試行錯誤しながら作る際に便利だと思います。

終わりに

ということで、今後も様々な機能追加/改善を行う予定です。 質問やバグ報告、ご要望などはぜひGitHubにIssue/PRを投げてください。

github.com

なお、Sacloudプロダクトの使い方などが質問できるSlackワークスペースもあります。

https://slack.usacloud.jp/

どなたでも参加可能になっていますので、操作方法などでお困りの方はぜひご参加ください。

以上です。