概要

terraform で各 IaaS ベンダーの仮想マシンを作成する

今回は DigitalOcean のベースとなる tf ファイルを作成

対象ベンダー

※AWSは今更なので割愛

事前準備

  • まずは サインアップ
  • 上メニューの [API] リンクより、token を作成
  • SSH公開鍵(id_rsa.pub)を tf ファイルと同じ場所に設置

手順

tf ファイルを作成

provider.tf

provider "digitalocean" {
  token = "${var.token}"
}

ssh_key.tf

resource "digitalocean_ssh_key" "default" {
    name = "default"
    public_key = "${file("id_rsa.pub")}"
}

floating_ip.tf

resource "digitalocean_floating_ip" "default" {
    droplet_id = "${digitalocean_droplet.default.id}"
    region = "${digitalocean_droplet.default.region}"
}

droplet.tf

resource "digitalocean_droplet" "default" {
  region = "${var.region}"
  name = "${var.droplet_name}"
  image = "${var.image}"
  size = "${var.size}"
  private_networking = true
  ssh_keys = ["${digitalocean_ssh_key.default.id}"]
}

domain.tf

resource "digitalocean_domain" "default" {
    name = "${var.domain_name}"
    ip_address = "${digitalocean_floating_ip.default.ip_address}"
}

resource "digitalocean_record" "default" {
    domain = "${digitalocean_domain.default.name}"
    type = "A"
    name = "${var.subdomain}"
    value = "${digitalocean_floating_ip.default.ip_address}"
}

output.tf

output "digitalocean_floating_ip_address" {
  value = "${digitalocean_floating_ip.default.ip_address}"
}

variables.tf

variable "token" {}
variable "region" {
  default = "sgp1"
}
variable "droplet_name" {}
variable "image" {}
variable "size" {}
variable "domain_name" {}
variable "subdomain" {}

tfvars は以下の通り

terraform.tfvars

## token
token = "**********************"

## droplet
region = "sgp1"
droplet_name = "********"
image = "centos-6-5-x64"
size = "512mb"

## domain
domain_name = "example.com"
subdomain = "www"

結果

$ terraform apply

Outputs:

  digitalocean_floating_ip_address = ***.***.***.***

作成されたリソース

$ terraform graph | dot -Tpng > graph.png