aboutsummaryrefslogtreecommitdiff
path: root/terraform/aws_using_ami/mini_environment/main.tf
blob: 08445af0ef212e4222f85e9daf420ad67e90c30b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
terraform {
  backend "http" {}
}

variable "slug" {
  type = "string"
}

variable "aws_access_key" {
  type = "string"
}

variable "aws_secret_key" {
  type = "string"
}

variable "aws_region" {
  type = "string"
}

variable "aws_route_53_zone_id" {
  type = "string"
}

variable "ami_id" {
  type = "string"
}

variable "backend_remote_state_address" {
  type = "string"
}

variable "backend_remote_state_username" {
  type = "string"
}

variable "backend_remote_state_password" {
  type = "string"
}

variable "ssh_private_key" {
  type = "string"
}

provider "aws" {
  access_key = "${var.aws_access_key}"
  secret_key = "${var.aws_secret_key}"
  region  = "${var.aws_region}"
}


data "terraform_remote_state" "backend" {
  backend = "http"
  config {
    address = "${var.backend_remote_state_address}"
    username = "${var.backend_remote_state_username}"
    password = "${var.backend_remote_state_password}"
  }
}

data "aws_route53_zone" "main" {
  zone_id = "${var.aws_route_53_zone_id}"
}


resource "aws_spot_instance_request" "main" {
  ami           = "${var.ami_id}"
  instance_type = "t2.xlarge"
  key_name      = "${data.terraform_remote_state.backend.deployer_key_pair_name}"
  security_groups = [
    "${data.terraform_remote_state.backend.guix_client_security_group_name}",
    "${data.terraform_remote_state.backend.public_webserver_security_group_name}",
    "${data.terraform_remote_state.backend.ssh_access_from_mini_environment_admin_security_group_name}"
  ]

  wait_for_fulfillment = true
  spot_price = "0.21"
  spot_type = "one-time"

  root_block_device {
    volume_size = "200"
  }
}

resource "aws_route53_record" "main" {
  zone_id = "${data.aws_route53_zone.main.zone_id}"
  name    = "${var.slug}"
  type    = "A"
  ttl     = "60"
  records = ["${aws_spot_instance_request.main.public_ip}"]
}

resource "aws_route53_record" "wildcard" {
  zone_id = "${data.aws_route53_zone.main.zone_id}"
  name    = "*.${var.slug}"
  type    = "A"
  ttl     = "60"
  records = ["${aws_spot_instance_request.main.public_ip}"]
}

# Outputs

output "spot_bid_status" {
  value = "${aws_spot_instance_request.main.spot_bid_status}"
}

output "spot_request_status" {
  value = "${aws_spot_instance_request.main.spot_request_state}"
}

output "mini_environment_up" {
  value = "${aws_spot_instance_request.main.spot_bid_status == "fulfilled"}"
}