2016/5/24追記
Terraform for さくらのクラウドのバージョンアップに伴い、
resource項目などが最新バージョンと異なる可能性があります。
最新の情報はGitHubを参照してください。
関連記事
Terraform for さくらのクラウド スタートガイド
自分用メモ。
Terraform for さくらのクラウドで複数ゾーン間(石狩/東京など)での
ブリッジ接続をおこなうまで。
作成されるクラウド上のリソース
- サーバー2台(石狩第1・第2)
- ディスク2本(各サーバーに1本ずつ)
- スイッチ2台(石狩第1・第2、ブリッジとの接続用)
- ブリッジ1台
サーバへのSSH接続は公開鍵認証のみとする。
前準備
-
terraform
のインストール -
terraform for さくらのクラウド
のダウンロード ssh-keygen
などでSSH用にキーペア作成(id_rsa
とid_rsa.pub
)以下2つのシェルスクリプトを作成しておく。プロビジョニング用
provision_sv01.sh
#!/bin/sh
# eth1のIP設定
cat << EOS >> /etc/sysconfig/network-scripts/ifcfg-eth1
BOOTPROTO=static
PREFIX0=24
DEVICE=eth1
IPADDR0=192.168.1.1
ONBOOT=yes
EOS
#反映
ifdown eth1; ifup eth1
provision_sv02.sh
#!/bin/sh
# eth1のIP設定
cat << EOS >> /etc/sysconfig/network-scripts/ifcfg-eth1
BOOTPROTO=static
PREFIX0=24
DEVICE=eth1
IPADDR0=192.168.1.2
ONBOOT=yes
EOS
#反映
ifdown eth1; ifup eth1
- 以下環境変数にAPIキー情報を設定しておく
-
SAKURACLOUD_ACCESS_TOKEN
:アクセストークン -
SAKURACLOUD_ACCESS_TOKEN_SECRET
:シークレット
-
terraform設定ファイル(tfファイル)
sakura.tf
provider "sakuracloud" {}
##################################################
# サーバー1(石狩第1)
##################################################
resource "sakuracloud_server" "is1a_sv01" {
name = "sv01"
disks = ["${sakuracloud_disk.disk01.id}"]
tags = ["@virtio-net-pci"]
switched_interfaces = [ "${sakuracloud_switch.sw01.id}" ]
connection {
user = "root"
host = "${sakuracloud_server.is1a_sv01.shared_nw_ipaddress}"
private_key = "${file("./id_rsa")}"
}
provisioner "file" {
source = "provision_sv01.sh"
destination = "/tmp/script.sh"
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/script.sh",
"/tmp/script.sh"
]
}
zone = "is1a"
}
##################################################
# サーバー2(石狩第2)
##################################################
resource "sakuracloud_server" "is1b_sv02" {
name = "sv02"
disks = ["${sakuracloud_disk.disk02.id}"]
tags = ["@virtio-net-pci"]
switched_interfaces = [ "${sakuracloud_switch.sw02.id}" ]
connection {
user = "root"
host = "${sakuracloud_server.is1b_sv02.shared_nw_ipaddress}"
private_key = "${file("./id_rsa")}"
}
provisioner "file" {
source = "provision_sv02.sh"
destination = "/tmp/script.sh"
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/script.sh",
"/tmp/script.sh"
]
}
zone = "is1b"
}
##################################################
# サーバー1用ディスク(石狩第1)
##################################################
resource "sakuracloud_disk" "disk01" {
name = "disk01"
source_archive_name = "CentOS 7.2 64bit"
ssh_key_ids = ["${sakuracloud_ssh_key.mykey.id}"]
disable_pw_auth = true
zone = "is1a"
}
##################################################
# サーバー2用ディスク(石狩第1)
##################################################
resource "sakuracloud_disk" "disk02" {
name = "disk02"
source_archive_name = "CentOS 7.2 64bit"
ssh_key_ids = ["${sakuracloud_ssh_key.mykey.id}"]
disable_pw_auth = true
zone = "is1b"
}
##################################################
# スイッチ(石狩第1):ブリッジに接続
##################################################
resource "sakuracloud_switch" "sw01"{
name = "sw01"
zone = "is1a"
bridge_id = "${sakuracloud_bridge.br.id}"
}
##################################################
# スイッチ(石狩第2):ブリッジに接続
##################################################
resource "sakuracloud_switch" "sw02"{
name = "sw02"
zone = "is1b"
bridge_id = "${sakuracloud_bridge.br.id}"
}
##################################################
# ブリッジ(ゾーン間の接続)
##################################################
resource "sakuracloud_bridge" "br"{
name = "br01"
zone = "is1a"
}
/************************
SSHKey
************************/
resource "sakuracloud_ssh_key" "mykey" {
name = "key"
public_key = "${file("./id_rsa.pub")}"
}
実行
# 確認
terraform plan
# 実行
terraform apply
# 作ったマシンのグローバルIP確認(2台分表示される)
terraform show | grep "shared_nw_address"
# 作ったマシンへのSSH
ssh root@[先ほど確認したIP] -i id_rsa
# ping(異なるゾーンへつながってることを確認)
ping 192.168.1.1
# または
ping 192.168.1.2