All Products
Search
Document Center

Serverless App Engine:Gunakan Terraform untuk mengaitkan aplikasi SAE dengan SLB

Last Updated:Jul 02, 2025

Setelah menerapkan aplikasi pada Serverless App Engine (SAE), Anda dapat mengaitkan aplikasi tersebut dengan instans Server Load Balancer (SLB) yang menghadap internet untuk mengimplementasikan akses internet. Anda juga dapat mengaitkan aplikasi tersebut dengan instans SLB internal untuk berkomunikasi dengan aplikasi lain di dalam virtual private cloud (VPC). Topik ini menjelaskan cara menggunakan Terraform untuk mengaitkan instans SLB yang menghadap internet dengan aplikasi SAE dan cara memutuskan pengaitan instans SLB.

Catatan

Anda dapat menjalankan kode contoh dalam topik ini dengan satu klik. Jalankan dengan Satu Klik

Prasyarat

  • Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya yang dimiliki oleh akun tersebut. Jika kredensial akun Alibaba Cloud bocor, risiko keamanan dapat terjadi. Kami merekomendasikan agar Anda menggunakan Pengguna Resource Access Management (RAM) dan membuat pasangan AccessKey untuk Pengguna RAM. Untuk informasi lebih lanjut, lihat Buat Pengguna RAM dan Buat Pasangan AccessKey.

  • Lampirkan kebijakan berikut ke Pengguna RAM yang Anda gunakan untuk menjalankan perintah di Terraform. Kebijakan ini mencakup izin minimum yang diperlukan untuk menjalankan perintah di Terraform. Untuk informasi lebih lanjut, lihat Berikan Izin kepada Pengguna RAM.

    Kebijasan kustom ini memungkinkan Pengguna RAM untuk mengedit, membuat, menghapus, dan mengonfigurasi instans SLB, serta mengaitkan dan memutuskan pengaitannya dengan aplikasi SAE.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "slb:DescribeLoadBalancers",
            "slb:DescribeLoadBalancerAttribute",
            "slb:CreateLoadBalancer",
            "slb:DeleteLoadBalancer",
            "slb:ModifyLoadBalancerInternetSpec",
            "slb:CreateLoadBalancerTCPListener",
            "slb:CreateLoadBalancerHTTPListener",
            "slb:CreateLoadBalancerHTTPSListener",
            "slb:DeleteLoadBalancerListener",
            "slb:SetLoadBalancerStatus",
            "sae:BindSlb",
            "sae:UnbindSlb"
          ],
          "Resource": "*"
        }
      ]
    }
  • Persiapkan lingkungan Terraform. Anda dapat menggunakan salah satu metode berikut untuk menggunakan Terraform:

    • Terraform tersedia sebagai layanan terkelola di ROS. Anda dapat menyebarkan Template Terraform di Konsol ROS. Untuk detail lebih lanjut, lihat Buat Tumpukan Terraform.

    • Gunakan Terraform di Terraform Explorer: Alibaba Cloud menyediakan lingkungan runtime online untuk Terraform. Anda dapat masuk ke lingkungan Terraform Explorer untuk menggunakan Terraform tanpa perlu menginstal Terraform. Metode ini cocok untuk skenario di mana Anda perlu menggunakan dan men-debug Terraform secara efisien, nyaman, dan tanpa biaya tambahan.

    • Gunakan Terraform di Cloud Shell: Terraform sudah diinstal sebelumnya di Cloud Shell dan kredensial identitas telah dikonfigurasi. Anda dapat langsung menjalankan perintah Terraform di Cloud Shell. Metode ini cocok untuk skenario di mana Anda ingin menggunakan dan men-debug Terraform dengan cepat dan nyaman dengan biaya rendah.

    • Instal dan Konfigurasikan Terraform Secara Lokal: Metode ini cocok untuk skenario dengan keterbatasan konektivitas jaringan atau di mana lingkungan pengembangan yang disesuaikan diperlukan.

Sumber Daya

Buat aplikasi dan kaitkan aplikasi dengan instans SLB

Bagian ini menjelaskan cara menggunakan gambar untuk menerapkan aplikasi, mengonfigurasi aplikasi secara manual, dan kemudian mengaitkan aplikasi dengan instans SLB. Wilayah China (Shenzhen) digunakan dalam contoh ini.

  1. Buat folder proyek bernama terraform untuk menyimpan sumber daya Terraform.

  2. Jalankan perintah berikut untuk masuk ke direktori proyek:

    cd terraform
  3. Buat file konfigurasi bernama main.tf.

    Kode contoh:

    # Konfigurasi Penyedia
    provider "alicloud" {
      region = var.region_id
    }
    
    # Definisi Variabel
    variable "region_id" {
      type    = string
      default = "cn-shenzhen"
    }
    
    variable "app_name" {
      description = "Nama Aplikasi"
      type        = string
      default     = "app-slb"
    }
    
    variable "image_url" {
      description = "URL Gambar"
      type        = string
      default     = "registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-slim:0.9"
    }
    
    variable "namespace_id" {
      description = "ID Namespace"
      type        = string
      default     = "cn-shenzhen:demo"
    }
    
    variable "namespace_name" {
      description = "Nama Namespace"
      type        = string
      default     = "demo"
    }
    
    # Namespace
    resource "alicloud_sae_namespace" "default" {
      namespace_description = var.namespace_description
      namespace_id          = var.namespace_id
      namespace_name        = var.namespace_name
    }
    
    # VPC
    resource "alicloud_vpc" "default" {
      vpc_name   = var.name
      cidr_block = "10.4.0.0/16"
    }
    
    # VSwitch
    resource "alicloud_vswitch" "default" {
      vswitch_name = var.name
      cidr_block   = "10.4.0.0/24"
      vpc_id       = alicloud_vpc.default.id
      zone_id      = var.zone_id
    }
    
    # Grup Keamanan
    resource "alicloud_security_group" "sg" {
      name        = var.name
      description = var.description
      vpc_id      = alicloud_vpc.default.id
    }
    
    resource "alicloud_security_group_rule" "sg_rule" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = var.port_range
      priority          = 1
      security_group_id = alicloud_security_group.sg.id
      cidr_ip           = var.cidr_ip
    }
    
    # Konfigurasi Aplikasi
    resource "alicloud_sae_application" "manual" {
      app_name          = var.app_name
      app_description   = var.app_description
      deploy            = true
      image_url         = var.image_url
      namespace_id      = alicloud_sae_namespace.default.id
      vswitch_id        = alicloud_vswitch.default.id
      vpc_id            = alicloud_vpc.default.id
      security_group_id = alicloud_security_group.sg.id
      package_type      = var.package_type
      timezone          = "Asia/Beijing"
      replicas          = var.replicas
      cpu               = var.cpu
      memory            = var.memory
    }
    
    # Konfigurasi SLB
    resource "alicloud_slb_load_balancer" "slb" {
      load_balancer_name = "prod"
      address_type       = "internet"
      load_balancer_spec = "slb.s2.small"
      vswitch_id         = alicloud_vswitch.default.id
    }
    
    resource "alicloud_sae_load_balancer_internet" "example" {
      app_id          = alicloud_sae_application.manual.id
      internet_slb_id = alicloud_slb_load_balancer.slb.id
      internet {
        protocol    = "HTTP"
        port        = var.port
        target_port = 80
      }
    }
    
    # Definisi Variabel Lainnya
    variable "namespace_description" {
      description = "Deskripsi Namespace"
      default     = "sebuah namespace"
    }
    
    variable "name" {
      default     = "tf"
      description = "Nama aturan grup keamanan"
      type        = string
    }
    
    variable "description" {
      default     = "Deskripsi aturan grup keamanan"
      description = "Deskripsi aturan grup keamanan"
      type        = string
    }
    
    variable "port_range" {
      default     = "1/65535"
      description = "Rentang port aturan grup keamanan"
      type        = string
    }
    
    variable "cidr_ip" {
      description = "Blok CIDR yang digunakan untuk membuat aturan grup keamanan baru"
      type        = string
      default     = "0.0.0.0/0"
    }
    
    variable "zone_id" {
      description = "ID Zona Ketersediaan"
      type        = string
      default     = "cn-shenzhen-a"
    }
    
    variable "app_description" {
      default     = "Deskripsi dibuat oleh Terraform"
      description = "Deskripsi aplikasi"
      type        = string
    }
    
    variable "package_type" {
      default     = "Image"
      description = "Tipe paket aplikasi"
      type        = string
    }
    
    variable "cpu" {
      default     = "500"
      description = "CPU aplikasi, dalam satuan millicore"
      type        = string
    }
    
    variable "memory" {
      default     = "1024"
      description = "Memori aplikasi, dalam satuan MB"
      type        = string
    }
    
    variable "replicas" {
      default     = "1"
      description = "Replika aplikasi"
      type        = string
    }
    
    variable "port" {
      description = "Port SLB"
      type        = string
      default     = "8000"
    }
    
    # Keluaran
    output "namespace_id" {
      value       = var.namespace_id
      description = "ID Namespace"
    }
    
    output "app_id" {
      description = "ID aplikasi"
      value       = alicloud_sae_application.manual.id
    }
    
    output "app_name" {
      description = "Nama aplikasi"
      value       = var.app_name
    }
    
    output "endpoint" {
      value = format("http://%s:%s", alicloud_slb_load_balancer.slb.address, var.port)
    }
  4. Jalankan perintah berikut untuk menginisialisasi konfigurasi:

    terraform init
  5. Keluaran yang Diharapkan:image

  6. Lakukan langkah-langkah berikut untuk membuat aplikasi:

    1. Jalankan perintah berikut untuk menerapkan aplikasi.Selama eksekusi, masukkan yes saat diminta dan tekan Enter. Tunggu hingga eksekusi perintah selesai. Jika informasi berikut dikembalikan, otorisasi selesai:

      terraform apply

      Keluaran yang Diharapkan:image

    Aplikasi app-slb dibuat dan dikaitkan dengan instans SLB. Alamat IP dan port instans SLB ditampilkan dalam keluaran.

  7. Verifikasi hasil:

    Jalankan perintah terraform show

    Jalankan perintah berikut untuk memeriksa detail sumber daya yang dibuat menggunakan Terraform:

    terraform show

    image

    Tangkapan layar akses browser

    Masukkan alamat IP dan port instans SLB di browser, seperti http://121.43.XXX.XX:8000. Tekan Enter untuk masuk ke halaman utama aplikasi.image

Putuskan pengaitan instans SLB dan hapus aplikasi

Bagian ini menjelaskan cara memutuskan pengaitan instans SLB dari aplikasi dan menghapus aplikasi. Aplikasi app-slb di wilayah China (Shenzhen) digunakan dalam contoh ini.

  1. Jalankan perintah berikut di direktori proyek untuk mengeksekusi file konfigurasi:

    terraform destroy
  2. Keluaran yang Diharapkan:image

    Instans SLB diputuskan pengaitannya dan aplikasi app-slb dihapus.

Kode contoh lengkap

Catatan

Anda dapat menjalankan kode contoh dalam topik ini dengan satu klik. Jalankan dengan Satu Klik

# Konfigurasi Penyedia
provider "alicloud" {
  region = var.region_id
}

# Definisi Variabel
variable "region_id" {
  type    = string
  default = "cn-shenzhen"
}

variable "app_name" {
  description = "Nama Aplikasi"
  type        = string
  default     = "app-slb"
}

variable "image_url" {
  description = "URL Gambar"
  type        = string
  default     = "registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-slim:0.9"
}

variable "namespace_id" {
  description = "ID Namespace"
  type        = string
  default     = "cn-shenzhen:demo"
}

variable "namespace_name" {
  description = "Nama Namespace"
  type        = string
  default     = "demo"
}

# Namespace
resource "alicloud_sae_namespace" "default" {
  namespace_description = var.namespace_description
  namespace_id          = var.namespace_id
  namespace_name        = var.namespace_name
}

# VPC
resource "alicloud_vpc" "default" {
  vpc_name   = var.name
  cidr_block = "10.4.0.0/16"
}

# VSwitch
resource "alicloud_vswitch" "default" {
  vswitch_name = var.name
  cidr_block   = "10.4.0.0/24"
  vpc_id       = alicloud_vpc.default.id
  zone_id      = var.zone_id
}

# Grup Keamanan
resource "alicloud_security_group" "sg" {
  name        = var.name
  description = var.description
  vpc_id      = alicloud_vpc.default.id
}

resource "alicloud_security_group_rule" "sg_rule" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = var.port_range
  priority          = 1
  security_group_id = alicloud_security_group.sg.id
  cidr_ip           = var.cidr_ip
}

# Konfigurasi Aplikasi
resource "alicloud_sae_application" "manual" {
  app_name          = var.app_name
  app_description   = var.app_description
  deploy            = true
  image_url         = var.image_url
  namespace_id      = alicloud_sae_namespace.default.id
  vswitch_id        = alicloud_vswitch.default.id
  vpc_id            = alicloud_vpc.default.id
  security_group_id = alicloud_security_group.sg.id
  package_type      = var.package_type
  timezone          = "Asia/Beijing"
  replicas          = var.replicas
  cpu               = var.cpu
  memory            = var.memory
}

# Konfigurasi SLB
resource "alicloud_slb_load_balancer" "slb" {
  load_balancer_name = "prod"
  address_type       = "internet"
  load_balancer_spec = "slb.s2.small"
  vswitch_id         = alicloud_vswitch.default.id
}

resource "alicloud_sae_load_balancer_internet" "example" {
  app_id          = alicloud_sae_application.manual.id
  internet_slb_id = alicloud_slb_load_balancer.slb.id
  internet {
    protocol    = "HTTP"
    port        = var.port
    target_port = 80
  }
}

# Definisi Variabel Lainnya
variable "namespace_description" {
  description = "Deskripsi Namespace"
  default     = "sebuah namespace"
}

variable "name" {
  default     = "tf"
  description = "Nama aturan grup keamanan"
  type        = string
}

variable "description" {
  default     = "Deskripsi aturan grup keamanan"
  description = "Deskripsi aturan grup keamanan"
  type        = string
}

variable "port_range" {
  default     = "1/65535"
  description = "Rentang port aturan grup keamanan"
  type        = string
}

variable "cidr_ip" {
  description = "Blok CIDR yang digunakan untuk membuat aturan grup keamanan baru"
  type        = string
  default     = "0.0.0.0/0"
}

variable "zone_id" {
  description = "ID Zona Ketersediaan"
  type        = string
  default     = "cn-shenzhen-a"
}

variable "app_description" {
  default     = "Deskripsi dibuat oleh Terraform"
  description = "Deskripsi aplikasi"
  type        = string
}

variable "package_type" {
  default     = "Image"
  description = "Tipe paket aplikasi"
  type        = string
}

variable "cpu" {
  default     = "500"
  description = "CPU aplikasi, dalam satuan millicore"
  type        = string
}

variable "memory" {
  default     = "1024"
  description = "Memori aplikasi, dalam satuan MB"
  type        = string
}

variable "replicas" {
  default     = "1"
  description = "Replika aplikasi"
  type        = string
}

variable "port" {
  description = "Port SLB"
  type        = string
  default     = "8000"
}

# Keluaran
output "namespace_id" {
  value       = var.namespace_id
  description = "ID Namespace"
}

output "app_id" {
  description = "ID aplikasi"
  value       = alicloud_sae_application.manual.id
}

output "app_name" {
  description = "Nama aplikasi"
  value       = var.app_name
}

output "endpoint" {
  value = format("http://%s:%s", alicloud_slb_load_balancer.slb.address, var.port)
}

Referensi