Load Balanced Vms adalah skrip pembangunan infrastruktur yang menyiapkan cluster VM dan mengonfigurasi Load Balancer untuk mengekspos rute publik ke VM:
- Komputasi - VM - Compute Engine
- Komputasi - Cluster - Grup Instance Terkelola
- Komputasi - Template Mesin - Template Instance
- Jaringan - Load Balancing - Cloud Load Balancer
Aplikasi contoh ini menyiapkan situs HTML statis sederhana menggunakan NGINX, dan melakukan load balancing di seluruh cluster Anda.
Mulai
Klik link berikut untuk mendapatkan salinan kode sumber di Cloud Shell. Setelah ada, satu perintah akan menjalankan salinan aplikasi yang berfungsi di project Anda..
Komponen Vms Load Balanced
Arsitektur Vms Load Balanced menggunakan beberapa produk. Berikut ini daftar komponen, beserta informasi selengkapnya tentang komponen, termasuk link ke video terkait, dokumentasi produk, dan panduan interaktif.Skrip
Skrip penginstalan menggunakan file yang dapat dieksekusi yang ditulis di alat CLI Terraform dan go
untuk mengambil project kosong dan menginstal aplikasi di dalamnya. Output harus berupa aplikasi yang berfungsi dan URL untuk alamat IP load balancing.
./main.tf
Mengaktifkan layanan
Layanan Google Cloud dinonaktifkan dalam project secara default. Aktifkan layanan yang diperlukan berikut:
- Compute Engine - Virtual machine dan layanan jaringan (seperti Load Balancer)
variable "gcp_service_list" {
description = "The list of apis necessary for the project"
type = list(string)
default = [
"compute.googleapis.com",
]
}
resource "google_project_service" "all" {
for_each = toset(var.gcp_service_list)
project = var.project_number
service = each.key
disable_dependent_services = false
disable_on_destroy = false
}
Membuat contoh instance yang menjadi dasar VM terkelola
Perintah berikut membuat VM, menginstal software yang diperlukan, dan men-deploy kode.
resource "google_compute_instance" "exemplar" {
name = "${var.basename}-exemplar"
machine_type = "n1-standard-1"
zone = var.zone
project = var.project_id
tags = ["http-server"]
metadata_startup_script = "apt-get update -y \n apt-get install nginx -y \n printf '${data.local_file.index.content}' | tee /var/www/html/index.html \n chgrp root /var/www/html/index.html \n chown root /var/www/html/index.html \n chmod +r /var/www/html/index.html"
boot_disk {
auto_delete = true
device_name = "${var.basename}-exemplar"
initialize_params {
image = "family/debian-10"
size = 200
type = "pd-standard"
}
}
network_interface {
network = "default"
access_config {
// Ephemeral public IP
}
}
depends_on = [google_project_service.all]
}
Membuat snapshot dan disk image
Perintah berikut menggunakan VM untuk membuat snapshot. Snapshot tersebut kemudian digunakan untuk membuat Disk Image. Semua VM di cluster didasarkan pada image ini.
resource "google_compute_snapshot" "snapshot" {
project = var.project_id
name = "${var.basename}-snapshot"
source_disk = google_compute_instance.exemplar.boot_disk[0].source
zone = var.zone
storage_locations = ["${var.region}"]
depends_on = [time_sleep.startup_completion]
}
resource "google_compute_image" "exemplar" {
project = var.project_id
name = "${var.basename}-latest"
family = var.basename
source_snapshot = google_compute_snapshot.snapshot.self_link
depends_on = [google_compute_snapshot.snapshot]
}
Buat template instance
Perintah berikut membuat template dengan setelan dan konfigurasi untuk semua VM dalam cluster. Menggunakan disk image yang dibuat di perintah sebelumnya.
Perintah tersebut mencakup skrip startup yang menyesuaikan HTML yang ditayangkan oleh VM di cluster.
resource "google_compute_instance_template" "default" {
project = var.project_id
name = "${var.basename}-template"
description = "This template is used to create app server instances."
tags = ["httpserver"]
metadata_startup_script = "sed -i.bak \"s/\{\{NODENAME\}\}/$HOSTNAME/\" /var/www/html/index.html"
instance_description = "BasicLB node"
machine_type = "n1-standard-1"
can_ip_forward = false
// Create a new boot disk from an image
disk {
source_image = google_compute_image.exemplar.self_link
auto_delete = true
boot = true
}
network_interface {
network = "default"
}
depends_on = [google_compute_image.exemplar]
}
Buat Grup Instance Terkelola
Meminta N jumlah mesin dari Instance Template untuk dikelola sebagai bagian dari grup ini.
resource "google_compute_instance_group_manager" "default" {
project = var.project_id
name = "${var.basename}-mig"
zone = var.zone
target_size = var.nodes
base_instance_name = "${var.basename}-mig"
version {
instance_template = google_compute_instance_template.default.id
}
named_port {
name = "http"
port = "80"
}
depends_on = [google_compute_instance_template.default]
}
Buat Alamat IP Eksternal
Diperlukan untuk mengikat {i>host<i} ke nama domain, dan berkomunikasi secara umum di Internet.
resource "google_compute_global_address" "default" {
project = var.project_id
name = "${var.basename}-ip"
ip_version = "IPV4"
}
Buat load balancer
Perintah berikut membuat load balancer dan mengimplementasikan health check dan layanan backend. Otorisasi mengonfigurasi load balancer untuk terhubung ke grup instance.
resource "google_compute_health_check" "http" {
project = var.project_id
name = "${var.basename}-health-chk"
tcp_health_check {
port = "80"
}
}
resource "google_compute_firewall" "allow-health-check" {
project = var.project_id
name = "allow-health-check"
network = local.defaultnetwork
source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
allow {
protocol = "tcp"
ports = ["80"]
}
}
resource "google_compute_backend_service" "default" {
project = var.project_id
name = "${var.basename}-service"
load_balancing_scheme = "EXTERNAL"
protocol = "HTTP"
port_name = "http"
backend {
group = google_compute_instance_group_manager.default.instance_group
}
health_checks = [google_compute_health_check.http.id]
}
resource "google_compute_url_map" "lb" {
project = var.project_id
name = "${var.basename}-lb"
default_service = google_compute_backend_service.default.id
}
Aktifkan HTTP
Perintah berikut mengonfigurasi aturan jaringan yang mengarahkan port 80 pada load balancer ke layanan.
resource "google_compute_target_http_proxy" "default" {
project = var.project_id
name = "${var.basename}-lb-proxy"
url_map = google_compute_url_map.lb.id
}
resource "google_compute_forwarding_rule" "google_compute_forwarding_rule" {
project = var.project_id
name = "${var.basename}-http-lb-forwarding-rule"
provider = google-beta
region = "none"
load_balancing_scheme = "EXTERNAL"
port_range = "80"
target = google_compute_target_http_proxy.default.id
ip_address = google_compute_global_address.default.id
}
Kesimpulan
Setelah dijalankan, sekarang Anda akan memiliki situs web sederhana yang berjalan di beberapa instance Compute Engine, yang ditangani oleh load balancer di project Anda. Selain itu, Anda harus memiliki semua kode untuk dimodifikasi atau memperluas solusi ini agar sesuai dengan lingkungan Anda.