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.
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
alicloud_sae_namespace: Membuat dan mengelola namespace SAE.
alicloud_security_group: Membuat dan mengelola grup keamanan.
alicloud_security_group_rule: Membuat dan mengelola aturan grup keamanan.
alicloud_sae_application: Membuat dan mengelola aplikasi SAE.
alicloud_slb_load_balancer: Membuat dan mengelola SLB.
alicloud_sae_load_balancer_internet: Mengonfigurasi SLB Internet untuk aplikasi SAE.
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.
Buat folder proyek bernama terraform untuk menyimpan sumber daya Terraform.
Jalankan perintah berikut untuk masuk ke direktori proyek:
cd terraformBuat 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) }Jalankan perintah berikut untuk menginisialisasi konfigurasi:
terraform initKeluaran yang Diharapkan:

Lakukan langkah-langkah berikut untuk membuat aplikasi:
Jalankan perintah berikut untuk menerapkan aplikasi.Selama eksekusi, masukkan
yessaat diminta dan tekan Enter. Tunggu hingga eksekusi perintah selesai. Jika informasi berikut dikembalikan, otorisasi selesai:terraform applyKeluaran yang Diharapkan:

Aplikasi
app-slbdibuat dan dikaitkan dengan instans SLB. Alamat IP dan port instans SLB ditampilkan dalam keluaran.Verifikasi hasil:
Jalankan perintah terraform show
Jalankan perintah berikut untuk memeriksa detail sumber daya yang dibuat menggunakan Terraform:
terraform show
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.
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.
Jalankan perintah berikut di direktori proyek untuk mengeksekusi file konfigurasi:
terraform destroyKeluaran yang Diharapkan:

Instans SLB diputuskan pengaitannya dan aplikasi
app-slbdihapus.
Kode contoh lengkap
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
Untuk informasi lebih lanjut tentang Terraform, lihat Apa itu Terraform?.