LoginSignup
2
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-05-19

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2