Merge pull request #5917 from mcalthrop/enhancement/google-two-tier-example
Address #5912: google-two-tier example incomplete
This commit is contained in:
commit
c19d84bce7
|
@ -11,6 +11,17 @@ getting your application onto the servers. However, you could do so either via
|
||||||
management tool, or by pre-baking configured images with
|
management tool, or by pre-baking configured images with
|
||||||
[Packer](https://packer.io/docs/builders/googlecompute.html).
|
[Packer](https://packer.io/docs/builders/googlecompute.html).
|
||||||
|
|
||||||
|
You will need to generate SSH keys as follows:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ ssh-keygen -f ~/.ssh/gcloud_id_rsa
|
||||||
|
# press <Enter> when asked (twice) for a pass-phrase
|
||||||
|
```
|
||||||
|
|
||||||
|
Then [download your credentials from Google Cloud Console](https://www.terraform.io/docs/providers/google/#credentials); suggested path for downloaded file is `~/.gcloud/Terraform.json`.
|
||||||
|
|
||||||
|
Optionally update `variables.tf` to specify a default value for the `project_name` variable, and check other variables.
|
||||||
|
|
||||||
After you run `terraform apply` on this configuration, it will
|
After you run `terraform apply` on this configuration, it will
|
||||||
automatically output the public IP address of the load balancer.
|
automatically output the public IP address of the load balancer.
|
||||||
After your instance registers, the LB should respond with a simple header:
|
After your instance registers, the LB should respond with a simple header:
|
||||||
|
@ -33,7 +44,7 @@ terraform apply \
|
||||||
-var="region=us-central1" \
|
-var="region=us-central1" \
|
||||||
-var="region_zone=us-central1-f" \
|
-var="region_zone=us-central1-f" \
|
||||||
-var="project_name=my-project-id-123" \
|
-var="project_name=my-project-id-123" \
|
||||||
-var="account_file_path=~/.gcloud/Terraform.json" \
|
-var="credentials_file_path=~/.gcloud/Terraform.json" \
|
||||||
-var="public_key_path=~/.ssh/gcloud_id_rsa.pub" \
|
-var="public_key_path=~/.ssh/gcloud_id_rsa.pub" \
|
||||||
-var="private_key_path=~/.ssh/gcloud_id_rsa"
|
-var="private_key_path=~/.ssh/gcloud_id_rsa"
|
||||||
```
|
```
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
provider "google" {
|
provider "google" {
|
||||||
region = "${var.region}"
|
region = "${var.region}"
|
||||||
project = "${var.project_name}"
|
project = "${var.project_name}"
|
||||||
account_file = "${file(var.account_file_path)}"
|
credentials = "${file("${var.credentials_file_path}")}"
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "google_compute_http_health_check" "default" {
|
resource "google_compute_http_health_check" "default" {
|
||||||
|
@ -31,31 +31,47 @@ resource "google_compute_instance" "www" {
|
||||||
count = 3
|
count = 3
|
||||||
|
|
||||||
name = "tf-www-${count.index}"
|
name = "tf-www-${count.index}"
|
||||||
machine_type = "n1-standard-1"
|
machine_type = "f1-micro"
|
||||||
zone = "${var.region_zone}"
|
zone = "${var.region_zone}"
|
||||||
tags = ["www-node"]
|
tags = ["www-node"]
|
||||||
|
|
||||||
disk {
|
disk {
|
||||||
image = "ubuntu-os-cloud/ubuntu-1204-precise-v20150625"
|
image = "ubuntu-os-cloud/ubuntu-1404-trusty-v20160314"
|
||||||
}
|
}
|
||||||
|
|
||||||
network_interface {
|
network_interface {
|
||||||
network = "default"
|
network = "default"
|
||||||
access_config {
|
access_config {
|
||||||
# Ephemeral
|
# Ephemeral
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
metadata {
|
metadata {
|
||||||
sshKeys = "ubuntu:${file("~/.ssh/gcloud_id_rsa.pub")}"
|
ssh-keys = "root:${file("${var.public_key_path}")}"
|
||||||
startup-script = <<SCRIPT
|
}
|
||||||
apt-get -y update
|
|
||||||
apt-get -y install nginx
|
provisioner "file" {
|
||||||
HOSTNAME=$(hostname | tr -d "\n")
|
source = "${var.install_script_src_path}"
|
||||||
IP=$(curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/network-interfaces/0/ip)
|
destination = "${var.install_script_dest_path}"
|
||||||
echo "Welcome to ${count.index} - $HOSTNAME ($IP)" > /usr/share/nginx/www/index.html
|
connection {
|
||||||
service nginx start
|
type = "ssh"
|
||||||
SCRIPT
|
user = "root"
|
||||||
|
private_key = "${file("${var.private_key_path}")}"
|
||||||
|
agent = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
provisioner "remote-exec" {
|
||||||
|
connection {
|
||||||
|
type = "ssh"
|
||||||
|
user = "root"
|
||||||
|
private_key = "${file("${var.private_key_path}")}"
|
||||||
|
agent = false
|
||||||
|
}
|
||||||
|
inline = [
|
||||||
|
"chmod +x ${var.install_script_dest_path}",
|
||||||
|
"${var.install_script_dest_path} ${count.index}"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
service_account {
|
service_account {
|
||||||
|
|
|
@ -3,5 +3,5 @@ output "pool_public_ip" {
|
||||||
}
|
}
|
||||||
|
|
||||||
output "instance_ips" {
|
output "instance_ips" {
|
||||||
value = "${join(" ", google_compute_instance.www.*.network_interface.0.access_config.0.nat_ip)}"
|
value = "${join(" ", google_compute_instance.www.*.network_interface.0.access_config.0.assigned_nat_ip)}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/bash -xe
|
||||||
|
|
||||||
|
RESOURCE_INDEX=$1
|
||||||
|
apt-get -y update
|
||||||
|
apt-get -y install nginx
|
||||||
|
IP=$(curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/network-interfaces/0/ip)
|
||||||
|
echo "Welcome to Resource ${RESOURCE_INDEX} - ${HOSTNAME} (${IP})" > /usr/share/nginx/html/index.html
|
||||||
|
service nginx start
|
|
@ -10,6 +10,27 @@ variable "project_name" {
|
||||||
description = "The ID of the Google Cloud project"
|
description = "The ID of the Google Cloud project"
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "account_file_path" {
|
variable "credentials_file_path" {
|
||||||
description = "Path to the JSON file used to describe your account credentials"
|
description = "Path to the JSON file used to describe your account credentials"
|
||||||
|
default = "~/.gcloud/Terraform.json"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "public_key_path" {
|
||||||
|
description = "Path to file containing public key"
|
||||||
|
default = "~/.ssh/gcloud_id_rsa.pub"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "private_key_path" {
|
||||||
|
description = "Path to file containing private key"
|
||||||
|
default = "~/.ssh/gcloud_id_rsa"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "install_script_src_path" {
|
||||||
|
description = "Path to install script within this repository"
|
||||||
|
default = "scripts/install.sh"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "install_script_dest_path" {
|
||||||
|
description = "Path to put the install script on each destination resource"
|
||||||
|
default = "/tmp/install.sh"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue