|
|
|
provider "google" { |
|
version = "~> 2.0" |
|
project = var.project |
|
region = var.region |
|
} |
|
|
|
resource "random_pet" "streaming_app" { |
|
keepers = { |
|
machine_type = "${var.machine_type}" |
|
machine_image = "${var.machine_image}" |
|
} |
|
} |
|
|
|
resource "google_compute_network" "streaming_app" { |
|
name = "${random_pet.streaming_app.id}-vpc" |
|
auto_create_subnetworks = false |
|
} |
|
|
|
resource "google_compute_subnetwork" "streaming_app" { |
|
name = "${random_pet.streaming_app.id}-subnet" |
|
region = var.region |
|
network = google_compute_network.streaming_app.self_link |
|
ip_cidr_range = var.subnet_prefix |
|
} |
|
|
|
resource "google_compute_firewall" "streaming_app" { |
|
name = "${random_pet.streaming_app.id}-allow-ssh" |
|
network = google_compute_network.streaming_app.self_link |
|
|
|
allow { |
|
protocol = "tcp" |
|
ports = ["22"] |
|
} |
|
|
|
source_ranges = ["0.0.0.0/0"] |
|
target_tags = [random_pet.streaming_app.id] |
|
} |
|
|
|
resource "google_compute_disk" "streaming_app" { |
|
name = "${random_pet.streaming_app.id}-disk" |
|
type = "pd-ssd" |
|
zone = "${var.region}-b" |
|
size = 5 |
|
physical_block_size_bytes = 4096 |
|
} |
|
|
|
resource "tls_private_key" "ssh-key" { |
|
algorithm = "RSA" |
|
rsa_bits = "4096" |
|
} |
|
|
|
resource "google_compute_instance" "streaming_app" { |
|
name = "${random_pet.streaming_app.id}-instance" |
|
zone = "${var.region}-b" |
|
machine_type = random_pet.streaming_app.keepers.machine_type |
|
|
|
boot_disk { |
|
initialize_params { |
|
image = random_pet.streaming_app.keepers.machine_image |
|
} |
|
} |
|
|
|
network_interface { |
|
subnetwork = google_compute_subnetwork.streaming_app.self_link |
|
access_config { |
|
} |
|
} |
|
|
|
attached_disk { |
|
source = google_compute_disk.streaming_app.self_link |
|
device_name = google_compute_disk.streaming_app.name |
|
mode = "READ_WRITE" |
|
} |
|
|
|
metadata = { |
|
ssh-keys = "ubuntu:${chomp(tls_private_key.ssh-key.public_key_openssh)} terraform" |
|
} |
|
|
|
tags = [random_pet.streaming_app.id] |
|
|
|
} |
|
|
|
resource "null_resource" "streaming_app" { |
|
depends_on = [ |
|
google_compute_instance.streaming_app, |
|
] |
|
|
|
triggers = { |
|
build_number = timestamp() |
|
} |
|
|
|
provisioner "file" { |
|
source = "mount_disk.sh" |
|
destination = "/home/ubuntu/mount_disk.sh" |
|
|
|
connection { |
|
type = "ssh" |
|
user = "ubuntu" |
|
timeout = "300s" |
|
private_key = tls_private_key.ssh-key.private_key_pem |
|
host = google_compute_instance.streaming_app.network_interface.0.access_config.0.nat_ip |
|
} |
|
} |
|
|
|
provisioner "remote-exec" { |
|
inline = [ |
|
"chmod +x mount_disk.sh", |
|
"./mount_disk.sh google-${google_compute_instance.streaming_app.attached_disk.0.device_name}", |
|
] |
|
|
|
connection { |
|
type = "ssh" |
|
user = "ubuntu" |
|
timeout = "300s" |
|
private_key = tls_private_key.ssh-key.private_key_pem |
|
host = google_compute_instance.streaming_app.network_interface.0.access_config.0.nat_ip |
|
} |
|
} |
|
} |