Dalam Function Compute, status tidak dibagikan antara berbagai instance lingkungan eksekusi. Anda dapat menggunakan database untuk menyimpan data terstruktur secara permanen guna mencapai pembagian status. Melalui Function Compute, Anda dapat melakukan operasi seperti kueri dan penyisipan data pada database cloud. Topik ini menggunakan fungsi Python sebagai contoh untuk menjelaskan cara mengakses ApsaraDB RDS for MySQL dalam VPC yang sama atau lintas VPC dan wilayah.
Prasyarat
Logika dalam kode contoh index.py dalam topik ini adalah untuk menanyakan semua data dalam tabel database bernama users. Anda dapat memodifikasi nama tabel sesuai dengan situasi aktual Anda dan memastikan bahwa setidaknya ada satu catatan dalam tabel.
Prosedur
Langkah 1: Konfigurasikan daftar putih database
Skenario 1: Akses database RDS di VPC yang sama
Jika Anda memilih untuk mengakses database di VPC yang sama, pastikan bahwa instans database dan fungsi berada di wilayah yang sama. Kami merekomendasikan agar Anda membuat instans database di zona yang didukung oleh Function Compute. Untuk informasi lebih lanjut, lihat Zona yang didukung oleh Function Compute. Jika instans database Anda tidak berada di zona yang didukung oleh Function Compute, Anda dapat membuat vSwitch di VPC Anda di zona yang sama dengan Function Compute dan gunakan ID vSwitch ini dalam konfigurasi VPC fungsi. vSwitch di VPC yang sama dapat berkomunikasi satu sama lain melalui jaringan pribadi. Oleh karena itu, Function Compute dapat menggunakan vSwitch untuk mengakses sumber daya di VPC yang berada di zona lain. Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika terjadi kesalahan vSwitch berada di zona yang tidak didukung?.
Masuk ke Konsol Function Compute, buat fungsi web Python, aktifkan akses VPC untuk fungsi tersebut, dan konfigurasikan sumber daya VPC target.
CatatanPastikan bahwa VPC yang dikonfigurasikan untuk fungsi tersebut sama dengan VPC tempat instans database dilampirkan.

Di halaman detail fungsi, pilih , dan kemudian di halaman Network, peroleh blok CIDR dari vSwitch dalam konfigurasi fungsi.

Tambahkan blok CIDR dari vSwitch yang diperoleh di langkah sebelumnya ke daftar putih akses database.
PentingGunakan daftar putih alamat IP untuk mengotorisasi fungsi mengakses database. Jangan gunakan mode kelompok keamanan. Jika tidak, fungsi mungkin gagal terhubung ke database secara berkala, yang memengaruhi bisnis.
Kunjungi Daftar instans RDS, pilih wilayah di bagian atas, dan klik ID instans target.
Di bilah navigasi kiri, klik Whitelist and SecGroup.
Di halaman Whitelist Settings, Anda dapat melihat mode daftar putih IP saat ini.
CatatanInstans RDS yang ada mungkin berjalan dalam mode daftar putih yang ditingkatkan. Semua instans RDS baru berjalan dalam mode daftar putih standar.
Klik Modify di sebelah kanan grup Default. Di kotak dialog Modify Whitelist Group yang muncul, konfigurasikan blok CIDR IPv4 dari vSwitch yang diperoleh di Langkah 2 dalam daftar putih, dan klik OK.

Setelah konfigurasi selesai, fungsi dapat mengakses database RDS melalui titik akhir internal database.
Skenario 2: Akses database RDS lintas VPC atau wilayah
VPC dan wilayah yang berbeda sepenuhnya terisolasi secara logis satu sama lain. Secara umum, Anda tidak dapat mengakses database lintas VPC dan wilayah. Jika Anda perlu mengakses database lintas VPC atau wilayah, Anda dapat mengonfigurasi alamat IP publik statis untuk fungsi tersebut. Dalam kasus ini, sistem akan membuat gateway NAT publik di VPC tempat fungsi dilampirkan. Anda dapat menggunakan gateway publik untuk mengakses database melalui alamat IP publik.
Masuk ke Konsol Function Compute. Di bilah navigasi kiri, klik Functions, pilih wilayah, dan buat fungsi sesuai petunjuk.
Di halaman detail fungsi, pilih . Di panel Network, konfigurasikan alamat IP publik statis untuk fungsi tersebut, dan klik Deploy.

Di kotak dialog Static Public IP Configuration yang muncul, pilih kotak centang di prompt, dan klik OK. Setelah konfigurasi selesai, atur parameter Allow Default NIC To Access Internet ke No untuk membuat alamat IP publik statis yang dikonfigurasikan berlaku.
Di halaman detail fungsi, pilih , dan di halaman Network, peroleh alamat IP publik statis yang dikonfigurasikan untuk fungsi tersebut.

Tambahkan alamat IP publik statis fungsi yang diperoleh di langkah sebelumnya ke daftar putih akses database.
PentingGunakan daftar putih alamat IP untuk mengotorisasi fungsi mengakses database. Jangan gunakan mode kelompok keamanan. Jika tidak, fungsi mungkin gagal terhubung ke database secara berkala, yang memengaruhi bisnis.
Kunjungi Daftar instans RDS, pilih wilayah di bagian atas, dan klik ID instans target.
Di bilah navigasi kiri, klik Whitelist and SecGroup.
Di halaman Whitelist Settings, Anda dapat melihat mode daftar putih IP saat ini.
CatatanInstans RDS yang ada mungkin berjalan dalam mode daftar putih yang ditingkatkan. Semua instans RDS baru berjalan dalam mode daftar putih standar.
Klik Modify di sebelah kanan grup Default. Di kotak dialog Modify Whitelist Group yang muncul, konfigurasikan blok CIDR IPv4 dari vSwitch yang diperoleh di Langkah 2 dalam daftar putih, dan klik OK.

Setelah konfigurasi selesai, fungsi dapat mengakses database RDS melalui titik akhir publik database.
Langkah 2: Akses RDS dalam fungsi
Masuk ke Konsol Function Compute, temukan fungsi target dalam daftar fungsi, klik tab Code di halaman detail fungsi, dan tulis kode contoh berikut di editor kode.
from flask import Flask, jsonify import pymysql import os from datetime import datetime import logging app = Flask(__name__) # Variabel global untuk menyimpan koneksi MySQL singleton _mysql_connection = None # Buat koneksi database (pola singleton) def getConnection(): global _mysql_connection try: # Jika koneksi sudah ada dan tidak terputus, kembalikan langsung if _mysql_connection is not None: try: # Uji apakah koneksi valid (tes perintah sederhana) with _mysql_connection.cursor() as cursor: cursor.execute("SELECT 1") # Kueri sederhana untuk menguji status koneksi result = cursor.fetchone() if result and result[0] == 1: return _mysql_connection except pymysql.OperationalError: # Jika koneksi terputus, reset _mysql_connection = None # Jika koneksi tidak ada atau terputus, buat ulang _mysql_connection = pymysql.connect( host=os.environ['MYSQL_HOST'], port=int(os.environ['MYSQL_PORT']), user=os.environ['MYSQL_USER'], password=os.environ['MYSQL_PASSWORD'], db=os.environ['MYSQL_DBNAME'] ) return _mysql_connection except Exception as e: logging.error(f"Terjadi kesalahan selama koneksi database: {e}") raise @app.route('/', defaults={'path': ''}) @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']) def hello_world(path): conn = getConnection() try: with conn.cursor() as cursor: # Kueri semua catatan dalam tabel users, modifikasi tabel users sesuai nama tabel aktual sql = "SELECT * FROM users" cursor.execute(sql) result = cursor.fetchall() columns = [desc[0] for desc in cursor.description] # Dapatkan daftar nama bidang # Ubah hasil kueri menjadi daftar kamus users = [] for row in result: user = {} for idx, column_name in enumerate(columns): value = row[idx] if isinstance(value, datetime): # Tangani tipe bidang tanggal user[column_name] = value.strftime('%Y-%m-%d %H:%M:%S') else: user[column_name] = value users.append(user) if users: # Kembalikan respons JSON untuk semua pengguna return jsonify(users), 200 else: # Jika tidak ada pengguna yang ditemukan, kembalikan kesalahan 404 return jsonify({'error': 'Tidak ada pengguna yang ditemukan'}), 404 except Exception as e: logging.error(f"Terjadi kesalahan selama operasi database: {e}") return jsonify({'error': 'Kesalahan database'}), 500 if __name__ == '__main__': app.run(host='0.0.0.0', port=9000)Di halaman detail fungsi, pilih , klik Edit, dan konfigurasikan variabel lingkungan berikut di panel Environment Variables.
Nama variabel lingkungan
Nilai variabel lingkungan
Deskripsi
MYSQL_HOST
rm-bp19u8e76ae****.mysql.rds.aliyuncs.com
Titik akhir instans database.
Jika Anda memilih skenario Database RDS di VPC yang sama, atur variabel lingkungan ini ke titik akhir internal database.
Jika Anda memilih skenario Akses database RDS lintas VPC atau wilayah, atur variabel lingkungan ini ke titik akhir publik database.
Di Daftar instans RDS, klik ID instans RDS target. Di bilah navigasi kiri, klik Database Connection. Di halaman Database Connection, peroleh titik akhir internal atau publik database.
MYSQL_DBNAME
db_test
Nama database yang dibuat di instans RDS.
MYSQL_PASSWORD
*****
Kata sandi akun database.
MYSQL_PORT
3306
Port pribadi instans database.
MYSQL_USER
dms_user_****
Nama pengguna akun yang digunakan untuk terhubung ke instans RDS.
Di halaman detail fungsi, klik tab Kode, klik Uji Fungsi, dan lihat hasil yang dikembalikan setelah eksekusi berhasil. Operasi kueri tabel telah berhasil diselesaikan.

Informasi lebih lanjut
Untuk lebih banyak contoh mengakses database RDS MySQL, lihat Function Compute Python mengakses database MySQL.
Jika akses database Anda gagal, Anda perlu mendiagnosis berdasarkan gejala masalah. Untuk informasi lebih lanjut, lihat Penyebab umum kegagalan akses database.
ApsaraDB RDS mendukung mesin database MySQL, SQL Server, PostgreSQL, dan MariaDB. Untuk informasi lebih lanjut, lihat Apa itu ApsaraDB RDS?.
Jika Anda ingin menggunakan alat baris perintah Serverless Devs untuk membuat fungsi dan mengakses database RDS MySQL, ikuti langkah-langkah berikut.