QUICKGUARD ホームページ >

terraform で 仮想インスタンスを作成 (CloudStack/IDCFクラウド)

2015.12.25

terraform で各 IaaS ベンダーの仮想マシンを作成する
今回は IDCFクラウド のベースとなる tf ファイルを作成

■事前準備
まずはIDCFにサインアップ
左メニューの [API] リンクより、以下の情報を取得

エンドポイントURL
API Key
Secret Key

■手順

〇tf ファイルを作成

・provider.tf

 provider “cloudstack” {
api_url = “${var.api_url}”
api_key = “${var.api_key}”
secret_key = “${var.secret_key}”
http_get_only = true
}

※http_get_only = true 必須

・ipaddress.tf

 resource “cloudstack_ipaddress” “default” {
network = “${var.network}”
}

・incetance.tf

 resource “cloudstack_instance” “default” {
name = “${var.instance_name}”
display_name = “${var.instance_name}”
zone = “${var.zone}”
service_offering = “${var.default_service_offering}”
network = “${var.network}”
template = “${var.template}”
keypair = “${var.keypair}”
ipaddress = “${var.default_ipaddress}”

provisioner “local-exec” {
command = “./kick_api.sh command=enableStaticNat ipaddressid=${cloudstack_ipaddress.default.id} virtualmachineid=${cloudstack_instance.default.id}”
}
}

※terraform に Static NAT 機能が実装されていないため、bash script for CloudStack API を使用

・disk.tf

 resource “cloudstack_disk” “default” {
name = “${cloudstack_instance.default.name}-DATA”
disk_offering = “Custom Disk”
size = “${var.default_disk_size}”
attach = true
virtual_machine = “${cloudstack_instance.default.name}”
zone = “${cloudstack_instance.default.zone}”
}

・firewall.tf
 
 resource “cloudstack_firewall” “default” {
ipaddress = “${cloudstack_ipaddress.default.ipaddress}”

rule {
source_cidr = “0.0.0.0/0”
protocol = “tcp”
ports = [“22”]
}
}

・variables.tf

 variable “api_url” {}
 variable “api_key” {}
 variable “secret_key” {}
 variable “zone” {
 default = “pascal”
 }
 variable “default_service_offering” {}
 variable “template” {}
 variable “default_disk_size” {}
 variable “keypair” {}
 variable “network” {
  default = “paskal-network1”
 }
 variable “instance_name” {}
 variable “default_ipaddress” {}

tfvars は以下の通り

・terraform.tfvars
 ## credential
 api_url = “https://compute.jp-east.idcfcloud.com/client/api”
 api_key = “*********************”
 secret_key = “*********************”

 ## zone
 zone = “joule”

 ## machine type
 default_service_offering = “light.S1”

 ## image
 template = “CentOS 6.6 64-bit”

 ## volume
 default_disk_size = “10”

 ## ssh key
 keypair = “ssh-key”

 ## network interface
 network = “joule-network1”

 ## incetance
 instance_name = “************”

 ## private ip address
 default_ipaddress = “10.15.0.10”

■結果
 $ terraform apply

・作成されたリソース
 $ terraform graph | dot -Tpng > graph.png

terraform-idcf

アカウントに登録されたメールアドレスにrootパスワードのメールが送信されるので確認