Terraform for さくらのクラウド 最新情報(2018年10月版)

本日Terraform for さくらのクラウド v1.7をリリースしました。

github.com

Terraform for さくらのクラウドはこまめなバージョンアップを行なっており、最新情報を追いきれていない方もいらっしゃるかと思います。
そこで今回は最近追加された機能のサマリーとして影響の大きな変更や新規追加された機能などをピックアップしてご紹介します。

最近追加された/変更された主な機能一覧

最近(直近3ヶ月くらい)で追加/変更された大きなものとして以下のようなものがあります。

サーバ/ディスク関連
アプライアンス関連
その他

他にも細々した変更も行われています。すべての変更内容はCHANGELOG.mdにまとめられています。

順番にご紹介していきます。

サーバ/ディスク関連

サーバ/ディスク新プラン対応

2016年7月から新規申し込み受付を停止していた石狩第1ゾーンが先日再び利用できるようになりました。

www.sakura.ad.jp

これにより石狩第1/石狩第2/東京第1と3つのゾーンが再び利用可能になり、ゾーンをまたぐ冗長構成の構築が容易になりました。

また、これに伴いサーバ/ディスクプランも新しくなりました。

manual.sakura.ad.jp

従来プランと比較して値下げされているほか、大容量ディスク(最大4TB)が利用できるようになりました。

Terraform for さくらのクラウドではv1.7以降で新プランに対応しており、v1.7以降でサーバを作成すると自動的に新プランでサーバ作成されるようになっています。

1点ご注意いただきたいのが、Terraform for さくらのクラウドでは旧プランの利用はサポートしていないという点です。

これまで石狩第1ゾーンを利用していた方(2016/7以前から利用しており、かつ石狩第1ゾーンにリソースを作成していた)に限り引き続き旧プランも利用可能なのですが、 Terraform for さくらのクラウドでは新プランにのみ対応しています。 もしTerraformでも旧プランを利用したいという方がいらっしゃいましたらGitHubなどからご要望ください。

ディスクの修正関連のパラメータをサーバリソースに移動

これまでディスクの修正機能で設定する項目についてはディスクリソースにて指定するようになっていました。

これまでのディスクの修正関連パラメータの指定例

data sakuracloud_archive "ubuntu" {
  os_type = "ubuntu"
}

# ディスクリソース
resource sakuracloud_disk "foobar" {
  name = "mydisk"
  source_archive_id = "${data.sakuracloud_archive.ubuntu.id}"

  # ディスクの修正関連のパラメータ 
  hostname = "myserver"
  password = "p@ssw0rd"
  ssh_key_ids = ["100000000000", "200000000000"]
  disable_pw_auth = true
  note_ids = ["100000000000", "200000000000"]

}

# サーバリソース
resource sakuracloud_server "foobar" {
  name = "myserver"
  disks = ["${sakuracloud_disk.foobar.id}"]
}

ホスト名やパスワードといった項目はサーバではなくディスクに紐づいていることからディスクリソース内で設定を行うようにしていましたが、 少々直感的ではなく、どこで設定すべきか迷うことがありました。

また、一部の項目(主にネットワーク関連)についてはディスクとサーバとを接続した後に改めてディスクの修正APIを呼ぶ必要があり、 これまでもディスクリソース/サーバリソースの両方でディスクの修正APIを呼び出していました。

これらの改善のため、ディスクの修正関連パラメータはサーバリソース側で指定するように変更されました。

変更後のディスクの修正関連パラメータの指定例

data sakuracloud_archive "ubuntu" {
  os_type = "ubuntu"
}

# ディスクリソース
resource sakuracloud_disk "foobar" {
  name = "mydisk"
  source_archive_id = "${data.sakuracloud_archive.ubuntu.id}"
}

# サーバリソース
resource sakuracloud_server "foobar" {
  name = "myserver"
  disks = ["${sakuracloud_disk.foobar.id}"]

  # ディスクの修正関連のパラメータ 
  hostname = "myserver"
  password = "p@ssw0rd"
  ssh_key_ids = ["100000000000", "200000000000"]
  disable_pw_auth = true
  note_ids = ["100000000000", "200000000000"]
}

なお、最新版のv1.7では従来通りディスクリソースで指定する方法も引き続きサポートされています。
ただし非推奨となっており将来のバージョンで指定できなくなる予定ですので早めの移行をお勧めします。

移行はtfファイル上に記載しているディスクの修正関連のパラメータをコピペでサーバリソース側に移動するだけでOKです。 (terrafory applyするタイミングで再度ディスクの修正が行われます。)

アプライアンス関連

続いてアプライアンス関連についてです。

石狩第1ゾーンでの利用可能リソース拡大

これまで石狩第1ゾーンではデータベースアプライアンスやモバイルゲートウェイの利用はできませんでした。
しかし先ほども紹介した石狩第1ゾーンの受付再開に伴いこれらのリソースが利用可能となりました。

これにより、ほぼ全てのリソースが全ゾーンで利用可能な状態となりました。
例外は以下2つです。

  • 専有ホスト(東京第1/石狩第2でのみ利用可能)
  • 自動バックアップ(現在、石狩第1での受付は停止中)

Terraform for さくらのクラウドではv1.7以降で石狩第1ゾーンを指定可能となっています。

モバイルゲートウェイでのトラフィックコントロール機能

SIMからさくらのクラウドへ直結することでデバイスのセキュアな通信を行えるようにする「セキュアモバイルコネクト」という機能があります。

www.sakura.ad.jp

専用のSIM(Amazonなどで購入可能)を監視カメラやドライブレコーダーといったSIMのさせるデバイスで利用することで、インターネットを経由することなくさくらのクラウドへ直結させることができるようになります。

セキュアモバイルコネクトを利用するにはSIMを購入することに加え、さくらのクラウド側にSIMとの通知の受け口となる「モバイルゲートウェイ」を作成/設定する必要があります。 モバイルゲートウェイは月額6480円/台、SIM一枚あたり月額12円の基本利用料、通信量課金として1MBあたり6円となっています。 (モバイルゲートウェイあたり1万枚のSIMが登録可能、またモバイルゲートウェイには毎月500MBまでのデータ通信量が含まれている)

Terraform for さくらのクラウドではSIMの登録、モバイルゲートウェイの作成/設定、SIMとモバイルゲートウェイの紐付けが行えるようになっています。

SIM/モバイルゲートウェイを利用する例

# SIMの定義
resource sakuracloud_sim "sim" {
  name              = "example-sim"
  iccid             = "<SIMに記載されているICCID>"
  passcode          = "<SIMに記載されているPasscode>"
  imei              = "<端末識別番号(IMEIロックする場合のみ)>"
  #enabled          = true
  mobile_gateway_id = "${sakuracloud_mobile_gateway.mgw.id}" # 接続するモバイルゲートウェイのID
  ipaddress         = "192.168.100.2"                        # SIMに割り当てるIPアドレス        
}

# モバイルゲートウェイの定義
resource sakuracloud_mobile_gateway "mgw" {
  name        = "example-mobile-gateway"
  dns_server1 = "8.8.8.8" # DNSサーバ1
  dns_server2 = "8.8.4.4" # DNSサーバ2
}

モバイルゲートウェイでのトラフィックコントロール機能

今月初めにモバイルゲートウェイに「トラフィックコントロール」機能が追加されました。

cloud-news.sakura.ad.jp

これは指定した通信量を超えたら速度制限を実施するというようなことができる機能です。

これもTerraformから設定できるようになっています。

# モバイルゲートウェイの定義
resource sakuracloud_mobile_gateway "mgw" {
  name        = "example-mobile-gateway"
  dns_server1 = "8.8.8.8" # DNSサーバ1
  dns_server2 = "8.8.4.4" # DNSサーバ2
  
  # トラフィックコントロール
  traffic_control = {
    quota                = 256  # 通信量閾値(MB)
    auto_traffic_shaping = true # 帯域制限 有効/無効
    band_width_limit     = 64   # 帯域制限値(Kbps)
    enable_email         = true # Emailでの通知
    enable_slack         = true # Slackでの通知
    slack_webhook        = "https://hooks.slack.com/services/xxx/xxx/xxx"
  }
}

データベースアプライアンスでのリードレプリカ機能

データベースアプライアンスにてレプリケーションの設定が行えるようになりました。

cloud-news.sakura.ad.jp

現在はPostgreSQLでのリードレプリカ(読み取り専用のスレーブデータベース)の作成がサポートされています。

リードレプリカの作成例

# マスターとなるデータベースアプライアンスの定義
resource sakuracloud_database "master" {
  database_type = "postgresql" # 現在、リードレプリカ作成はPostgreSQLのみ対応
  plan          = "10g"
  user_name     = "defuser"
  user_password = "<パスワード>"
  
  # レプリケーション用ユーザーのパスワードを指定することでレプリケーションが有効になる
  replica_password = "<パスワード>" 

  switch_id     = "${sakuracloud_switch.sw.id}"
  ipaddress1    = "192.168.11.101"
  nw_mask_len   = 24
  default_route = "192.168.11.1"

  name        = "master"
}

# リードレプリカの定義
resource sakuracloud_database_read_replica "foobar" {
   
  master_id  = "${sakuracloud_database.foobar.id}" # マスター側データベースのID
  ipaddress1 = "192.168.11.111"                    # IPアドレス
  
  # IPアドレス以外のネットワーク関連項目が未指定の場合、マスター側から引き継ぐ
  #switch_id     = "${sakuracloud_switch.sw.id}"
  #nw_mask_len   = 24
  #default_route = "192.168.11.1"  

  name = "slave"
}

マスター側でレプリケーションを有効にしておく必要がある点に注意が必要です。
レプリケーションを有効にする(かつレプリケーションのマスターとして構成する)には、マスター側でレプリケーション用ユーザーのパスワードを指定すればOKです。
(replica_passwordという項目です)

リードレプリカ側ではマスターとなるデータベースアプライアンスのIDを指定します。
IPアドレス以外のネットワーク関連の設定(接続するスイッチやネットワークマスク長、デフォルトルート)は指定しなかった場合はマスター側と同じ値が設定されます。

当然ですがマスター側とネットワーク的に疎通できるようなネットワーク構成となるようにしてください。

シンプル監視でのBasic認証

シンプル監視にてHTTP/HTTPSでの監視時にBasic認証が行えるようになりました。

cloud-news.sakura.ad.jp

以下のように利用します。

# HTTP監視の例
resource sakuracloud_simple_monitor "mymonitor" {
  target = "<監視対象のFQDN or IPアドレス>"

  health_check = {
    protocol   = "http"
    delay_loop = 60
    path       = "/"
    status     = "200"
    
    username   = "foo" # Basic認証 ユーザー名
    password   = "bar" # Basic認証 パスワード
  }

  notify_email_enabled = true
}

その他: Terraform公式サイトのスタイルを用いて英語版ドキュメントをプレビュー

Terraform for さくらのクラウドでは英語版ドキュメントを用意しています。
英語版ドキュメントについてはTerraform公式サイト(terraform.io)と同じスタイルで確認できる仕組みを用意しています。

gitとdockerが利用できればGitHubからソース一式を取得してmake serve-english-docsコマンドを実行することでプレビューが行えます。

# GitHubからソース一式をクローン
$ git clone https://github.com/sacloud/terraform-provider-sakuracloud.git
$ cd terraform-provider-sakuracloud

# プレビュー
# make serve-english-docs

この後http://localhost:4567/docs/providers/sakuracloudをブラウザなどで開くことでプレビューできます。

f:id:febc_yamamoto:20181017201559p:plain

終わりに

ということで、今回は最近のTerraform for さくらのクラウドで追加/変更となった機能を紹介しました。
もしご要望や不具合の報告などありましたらぜひGitHubにておしらせください。

以上です。