Men-deploy server web Flask dasar dengan menggunakan Terraform

Dalam tutorial ini, Anda akan mempelajari cara mulai menggunakan Terraform untuk membuat server web dasar di Compute Engine.

Dalam tutorial ini, Anda akan melakukan beberapa hal berikut:

  • Menggunakan Terraform untuk membuat VM di Google Cloud.
  • Mulai server Python Flask dasar.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:

Compute Engine

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

Bersiaplah untuk memulai tutorial.

Pilih atau buat project

  1. In the Google Cloud console, go to the project selector page.

    Go to project selector

  2. Select or create a Google Cloud project.

Siapkan izin

Pastikan Anda memiliki izin Compute Engine yang diperlukan pada akun pengguna Anda:

  • compute.instances.*
  • compute.firewalls.*

Buka halaman IAM

Pelajari lebih lanjut tentang peran dan perizinan

Mengaktifkan API

Enable the Compute Engine API.

Enable the API

Memulai Cloud Shell

Cloud Shell adalah mesin virtual Compute Engine.

Kredensial layanan yang terkait dengan mesin virtual ini bersifat otomatis. Sehingga, Anda tidak perlu menyiapkan atau mendownload kunci akun layanan.

Terraform terintegrasi dengan Cloud Shell dan Cloud Shell secara otomatis mengautentikasi Terraform. Sehingga, Anda dapat memulai dengan lebih sedikit penyiapan.

Membuat VM Compute Engine

Pertama, tentukan setelan VM dalam file konfigurasi Terraform. Selanjutnya, jalankan perintah Terraform untuk membuat VM di project Anda.

Membuat direktori

Buat direktori baru. Di direktori baru, buat file main.tf untuk konfigurasi Terraform. Isi file ini menjelaskan semua resource Google Cloud yang akan dibuat dalam project.

Dalam Cloud Shell:

mkdir tf-tutorial && cd tf-tutorial
nano main.tf

Membuat jaringan dan subnet Virtual Private Cloud

Di bagian ini, Anda akan membuat jaringan dan subnet Virtual Private Cloud (VPC) untuk antarmuka jaringan VM.

Tambahkan resource Terraform berikut ke file main.tf yang Anda buat:

resource "google_compute_network" "vpc_network" {
  name                    = "my-custom-mode-network"
  auto_create_subnetworks = false
  mtu                     = 1460
}

resource "google_compute_subnetwork" "default" {
  name          = "my-custom-subnet"
  ip_cidr_range = "10.0.1.0/24"
  region        = "us-west1"
  network       = google_compute_network.vpc_network.id
}

Membuat resource VM Compute Engine

Di bagian ini, Anda akan membuat satu instance Compute Engine yang menjalankan Debian. Dalam tutorial ini, Anda menggunakan jenis mesin terkecil yang tersedia. Nantinya, Anda dapat mengupgrade ke jenis mesin yang lebih besar.

Tambahkan resource Terraform google_compute_instance berikut ke file main.tf yang Anda buat.

# Create a single Compute Engine instance
resource "google_compute_instance" "default" {
  name         = "flask-vm"
  machine_type = "f1-micro"
  zone         = "us-west1-a"
  tags         = ["ssh"]

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  # Install Flask
  metadata_startup_script = "sudo apt-get update; sudo apt-get install -yq build-essential python3-pip rsync; pip install flask"

  network_interface {
    subnetwork = google_compute_subnetwork.default.id

    access_config {
      # Include this section to give the VM an external IP address
    }
  }
}

Kode contoh menetapkan zona Google Cloud ke us-west1-a. Anda dapat mengubahnya ke zona yang berbeda.

Lakukan inisialisasi Terraform

Pada tahap ini, Anda dapat menjalankan terraform init untuk menambahkan plugin yang diperlukan dan membangun direktori .terraform.

terraform init

Output:

Initializing the backend...

Initializing provider plugins...
...

Terraform has been successfully initialized!

Memvalidasi konfigurasi Terraform

Secara opsional, Anda dapat memvalidasi kode Terraform yang telah Anda bangun sejauh ini. Jalankan terraform plan yang melakukan hal berikut:

  • Memverifikasi bahwa sintaksis main.tf benar
  • Menampilkan pratinjau resource yang akan dibuat
terraform plan

Output:

...

Plan: 1 to add, 0 to change, 0 to destroy.

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.

Terapkan konfigurasi:

Untuk membuat VM, jalankan terraform apply.

terraform apply

Saat diminta, masukkan yes.

Terraform memanggil Google Cloud API untuk menyiapkan VM baru. Periksa halaman instance VM untuk melihat VM yang baru.

Menjalankan server web di Google Cloud

Langkah selanjutnya adalah membuat aplikasi web, men-deploy-nya ke VM, dan membuat aturan firewall untuk mengizinkan permintaan klien ke aplikasi web.

Menambahkan aturan firewall SSH kustom

Aturan firewall default-allow-ssh di jaringan default memungkinkan Anda menggunakan SSH untuk terhubung ke VM. Jika lebih suka menggunakan aturan firewall kustom, Anda dapat menambahkan resource berikut di akhir file main.tf:

resource "google_compute_firewall" "ssh" {
  name = "allow-ssh"
  allow {
    ports    = ["22"]
    protocol = "tcp"
  }
  direction     = "INGRESS"
  network       = google_compute_network.vpc_network.id
  priority      = 1000
  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["ssh"]
}

Jalankan terraform apply untuk membuat aturan firewall.

Menghubungkan ke VM menggunakan SSH:

Validasikan bahwa semuanya telah disiapkan dengan benar pada tahap ini dengan menghubungkan ke VM menggunakan SSH.

  1. Buka halaman VM Instances.

  2. Temukan VM dengan nama flask-vm.

  3. Di kolom Connect, klik SSH.

    Jendela terminal SSH dalam browser akan terbuka untuk VM yang sedang berjalan.

Untuk mengetahui informasi selengkapnya, lihat Menghubungkan ke VM.

Membangun aplikasi Flask

Anda akan membangun aplikasi Python Flask untuk tutorial ini. Sehingga, Anda dapat memiliki satu file yang mendeskripsikan server web dan endpoint pengujian Anda.

  1. Di terminal SSH dalam browser, buat file dengan nama app.py.

    nano app.py
    
  2. Tambahkan kode berikut ke file app.py:

    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello_cloud():
      return 'Hello Cloud!'
    
    app.run(host='0.0.0.0')
    
  3. Jalankan app.py:

    python3 app.py
    

    Flask melayani traffic di localhost:5000 secara default.

  4. Buka koneksi SSH kedua:

    1. Buka halaman VM Instances.
    2. Temukan VM dengan nama flask-vm, lalu klik SSH.
  5. Pada koneksi SSH kedua, jalankan curl untuk mengonfirmasi bahwa salam yang Anda konfigurasikan di app.py ditampilkan.

    curl http://0.0.0.0:5000
    

    Output dari perintah ini adalah Hello Cloud.

Membuka port 5000 di VM

Untuk terhubung ke server web dari komputer lokal, VM harus memiliki port 5000 terbuka. Dengan Google Cloud, Anda dapat membuka port ke traffic menggunakan aturan firewall.

Tambahkan resource Terraform google_compute_firewall berikut di akhir file main.tf Anda.

resource "google_compute_firewall" "flask" {
  name    = "flask-app-firewall"
  network = google_compute_network.vpc_network.id

  allow {
    protocol = "tcp"
    ports    = ["5000"]
  }
  source_ranges = ["0.0.0.0/0"]
}

Di Cloud Shell, jalankan terraform apply untuk membuat aturan firewall.

Menambahkan variabel output untuk URL server web

  1. Di akhir main.tf, tambahkan variabel output Terraform untuk menghasilkan URL server web:

    // A variable for extracting the external IP address of the VM
    output "Web-server-URL" {
     value = join("",["http://",google_compute_instance.default.network_interface.0.access_config.0.nat_ip,":5000"])
    }
    
  2. Jalankan terraform apply.

    terraform apply
    

    Saat diminta, masukkan yes. Terraform mencetak alamat IP eksternal VM dan port 5000 ke layar, sebagai berikut:

    Web-server-URL = "http://IP_ADDRESS:5000"
    

    Anda dapat menjalankan terraform output untuk menampilkan output ini kapan saja:

    terraform output
    
  3. Klik URL dari langkah sebelumnya dan lihat pesan "Hello Cloud!" .

    Ini berarti server Anda sedang berjalan.

Pemecahan masalah

  • Jika API yang diperlukan tidak diaktifkan, Terraform akan menampilkan error. Pesan error menyertakan link untuk mengaktifkan API. Setelah mengaktifkan API, Anda dapat menjalankan kembali terraform apply.

  • Jika Anda tidak dapat terhubung ke VM melalui SSH:

    • Pastikan untuk menambahkan aturan firewall SSH.
    • Pastikan VM Anda menyertakan argumen tags = ["ssh"].

Pembersihan

Setelah menyelesaikan tutorial, Anda dapat menghapus semua yang telah dibuat agar tidak menimbulkan biaya lebih lanjut.

Terraform memungkinkan Anda menghapus semua resource yang ditentukan dalam file konfigurasi dengan menjalankan perintah terraform destroy:

terraform destroy

Masukkan yes untuk mengizinkan Terraform menghapus resource Anda.

Langkah selanjutnya