Terraform for さくらのクラウド(ブリッジ接続メモ)

  • 2
    Like
  • 0
    Comment
More than 1 year has passed since last update.

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_rsaid_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