gokigenmaruのブログ

40から始めるクラウドエンジニア

さくらのクラウドのロードバランサー構築をTerraform化する

DBの作成も出来たので、さくらのクラウドでオートスケールの検証をしようと考えています。
オートスケールの検証で考えているのは、ロードバランサー配下にWebサーバを立ててスケールさせられるかどうかテストしようと考えています。

んで、いつも通りですが、何度も検証環境を構築するのが面倒なので、まずは標準構成を考えてその構成をTerraformで作れるようにしようと思います。

Terraform

構成

構成ですが、DB構築時の構成をベースにDB用セグメントではないセグメントにロードバランサーとWebサーバを作ろうと思います。
ということで、以下のような構成にしました。

Terraformコード

gokigenmaru.hatenablog.com
変更がないものについては本ブログの上にリンクを貼ってある以前のブログのコードを参考にしてください

loadbalancer.tf

resource "sakuracloud_load_balancer" "asgtestlb01" {
  name              = "asgtestlb01"
  network_interface {
    switch_id    = sakuracloud_switch.testswitch.id
    vrid         = 200
    ip_addresses = ["192.168.0.110"]
    gateway      = "192.168.0.254"
    netmask      = 24
  }
  vip {
    vip    = "192.168.0.200"
    port   = 80
    server {
      ip_address = "192.168.0.2"
      protocol   = "tcp"
      path       = "/index.html"
      status     = "200"
    }
  }
}

server.tf

#############################################
# server
#############################################


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

resource "sakuracloud_disk" "vpctestdisk" {
  name                 = "vpctestdisk"
  plan                 = "ssd"
  connector            = "virtio"
  size                 = 20
  source_archive_id    = data.sakuracloud_archive.ubuntu.id
  encryption_algorithm = "aes256_xts"
}

resource "sakuracloud_server" "vpctestserver" {
  name   = "vpctestserver01"
  disks  = [sakuracloud_disk.vpctestdisk.id]
  core   = 1
  memory = 2
  network_interface {
    upstream        = sakuracloud_switch.testswitch.id
    user_ip_address = "192.168.0.2"
  }
  disk_edit_parameter {
    hostname   = "vpctestserver01"
    password   = "xxxxxxxxxxxx"
    ip_address = "192.168.0.2"
    netmask    = 24
    gateway    = "192.168.0.254"
  }
}

resource "sakuracloud_disk" "vpctestdisk2" {
  name                 = "vpctestdisk02"
  plan                 = "ssd"
  connector            = "virtio"
  size                 = 20
  source_archive_id    = data.sakuracloud_archive.ubuntu.id
  encryption_algorithm = "aes256_xts"
}

resource "sakuracloud_server" "vpctestserver02" {
  name   = "vpctestserver02"
  disks  = [sakuracloud_disk.vpctestdisk2.id]
  core   = 1
  memory = 2
  network_interface {
    upstream        = sakuracloud_switch.testswitch.id
    user_ip_address = "192.168.0.103"
  }
  disk_edit_parameter {
    hostname   = "vpctestserver02"
    password   = "xxxxxxxxxxxx"
    ip_address = "192.168.0.103"
    netmask    = 24
    gateway    = "192.168.0.254"
  }
}

vpcrouter.tf

#############################################
# VPCRouter
#############################################

resource "sakuracloud_vpc_router" "vpcrouter" {
  name = "vpctestrouter01"
  private_network_interface {
    index        = 1
    switch_id    = sakuracloud_switch.testswitch.id
    ip_addresses = ["192.168.0.254"]
    netmask      = 24
  }
  private_network_interface {
    index        = 2
    switch_id    = sakuracloud_switch.testswitch2.id
    ip_addresses = ["192.168.1.254"]
    netmask      = 24
  }

  port_forwarding {
    protocol     = "tcp"
    public_port  = 22
    private_ip   = "192.168.0.103"
    private_port = 22
  }
  depends_on = [
    sakuracloud_switch.testswitch
  ]
}


192.168.0.103のサーバは踏み台として利用し、103からロードバランサーとオートスケールの検証(curlとか)を行おうと思います。

おわり

次からはオートスケールの検証を行っていこうと思います。
が、ロードバランサーにサーバをぶら下げる場合はsysctl.confとInterface系の設定(Ubuntuだと/etc/netplan/01-netcfg.yaml)が必要で、その設定を都度手動でやるのが面倒なので、こっそりansible作っています。。。