
Пример конфигурации Terraform, который создает GCN (Google Compute Network), GCF (Google Compute Firewall), Instance. Пример использования "metadata_startup_script" в Instance
main.tf
provider "google" {
credentials = "${file("terraform-account.json")}"
project = "artem-terraform"
region = "us-central1"
}
variables.tf
variable "PROJECT_NAME" {
default = "web-server"
}
variable "BITBUCKET_USER" {
default = "terraform-git-website"
}
variable "BITBUCKET_PASS" {
default = "MyTempPass1234"
}
gcf.tf
resource "google_compute_firewall" "default" {
name = "${var.PROJECT_NAME}-firewall"
network = "${google_compute_network.default.name}"
allow {
protocol = "icmp"
}
allow {
protocol = "tcp"
ports = ["22", "80", "443"]
}
}
resource "google_compute_network" "default" {
name = "${var.PROJECT_NAME}-network"
auto_create_subnetworks = "true"
}
instance.tf
resource "google_compute_instance" "web" {
name = "${var.PROJECT_NAME}-instance"
machine_type = "f1-micro"
zone = "us-west1-a"
tags = ["web"]
boot_disk {
initialize_params {
image = "ubuntu-minimal-1804-bionic-v20181120"
}
}
network_interface {
network = "${google_compute_network.default.name}"
access_config {
// Ephemeral IP
}
}
metadata_startup_script = <<SCRIPT
apt update
apt install -y apache2 git
rm -r /var/www/html/*
cd /var/www/html/ && git clone https://"${var.BITBUCKET_USER}":"${var.BITBUCKET_PASS}"@bitbucket.org/terraform-git-website/html.git .
systemctl enable apache2
systemctl start apache2
SCRIPT
service_account {
scopes = ["userinfo-email", "compute-ro", "storage-ro"]
}
}
output.tf
output "public_ip" {
value = "${google_compute_instance.web.network_interface.0.access_config.0.nat_ip}"
}
Скачать ZIP архив с Terraform файлами.