All Products
Search
Document Center

Function Compute:Contoh mengakses database Tair (kompatibel dengan Redis OSS)

Last Updated:Feb 28, 2026

Deploy fungsi Function Compute yang terhubung ke instans Tair (kompatibel dengan Redis OSS) melalui virtual private cloud (VPC). Panduan ini menggunakan Serverless Devs untuk mendeploy fungsi Python 3 yang membaca dan menambahkan nilai counter yang disimpan di Tair.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Penting

Instans Tair dan fungsi Function Compute harus berada di wilayah yang sama. Buat instans Tair di zona yang didukung oleh Function Compute. Jika instans berada di zona yang tidak didukung, buat vSwitch di zona yang didukung dalam VPC yang sama. vSwitch dalam VPC yang sama dapat berkomunikasi melalui jaringan pribadi, sehingga Function Compute tetap dapat mengakses instans tersebut. Untuk detail selengkapnya, lihat Bagaimana cara mengatasi error "vSwitch berada di zona yang tidak didukung"?

Konfigurasikan daftar putih alamat IP

Sebelum mendeploy fungsi, tambahkan blok CIDR vSwitch ke daftar putih instans Tair agar Function Compute dapat mengakses instans tersebut.

Penting

Gunakan daftar putih alamat IP untuk mengizinkan Function Compute mengakses instans Tair. Jangan gunakan mode security group. Mode security group dapat menyebabkan kegagalan koneksi secara intermiten.

  1. Masuk ke Konsol Tair.

  2. Pada bilah navigasi atas, pilih wilayah tempat instans dideploy.

  3. Pada halaman Instances, temukan instans tersebut lalu klik ID-nya.

  4. Pada panel navigasi sebelah kiri, klik Whitelist Settings. Pada tab Whitelist Settings, temukan daftar putih yang akan dimodifikasi lalu klik Modify pada kolom Actions.

  5. Pada panel Modify Whitelist, masukkan blok CIDR vSwitch pada bidang Whitelist lalu klik OK.

Prosedur

Langkah 1: Inisialisasi proyek

Jalankan perintah berikut untuk menginisialisasi proyek:

sudo s init

Pada prompt CLI:

  1. Pilih Alibaba Cloud sebagai vendor.

  2. Pilih mode quick start.

  3. Pilih runtime Python bawaan.

  4. Tentukan nama proyek dan wilayah. Panduan ini menggunakan proyek start-fc-redis-python di wilayah China (Hangzhou).

Buka direktori proyek:

cd start-fc-redis-python

Langkah 2: Konfigurasikan file proyek

Edit s.yaml

Edit file s.yaml dengan konfigurasi berikut. Perbarui nilai placeholder dengan detail VPC, security group, vSwitch, dan instans Tair Anda yang sebenarnya.

edition: 1.0.0
name: fcDeployApp
access: "default"

services:
 fc-db-redis-python:
  component: devsapp/fc
  props:
   region: cn-hangzhou
   service:
    name: fc-db-demo
    description: 'demo for fc visit db'
    internetAccess: true
    vpcConfig:
     vpcId: vpc-bp1oeg1fwxzuxcliq****       # VPC ID tempat instans Tair berada
     securityGroupId: sg-bp164seaxj7wc4d0**** # ID security group
     vswitchIds:
      - vsw-bp1192npo1ziqzw4****             # ID vSwitch (tambahkan blok CIDR-nya ke daftar putih Tair)
   function:
    name: redis
    description: visit redis
    runtime: python3
    codeUri: ./code
    handler: index.handler
    memorySize: 256
    timeout: 30
    initializationTimeout: 60
    initializer: index.initializer
    environmentVariables:
     REDIS_HOST: r-bp1h2g53l3thqg****.redis.rds.aliyuncs.com # Titik akhir pribadi instans Tair
     REDIS_PASSWORD: ****                                      # Kata sandi instans Tair
     REDIS_PORT: 63**                                          # Port pribadi instans Tair

Ganti placeholder berikut dengan nilai aktual Anda:

PlaceholderDeskripsiContoh
vpc-bp1oeg1fwxzuxcliq****ID VPC tempat instans Tair beradavpc-bp1oeg1fwxzuxcliq1234
sg-bp164seaxj7wc4d0****ID security groupsg-bp164seaxj7wc4d01234
vsw-bp1192npo1ziqzw4****ID vSwitchvsw-bp1192npo1ziqzw41234
r-bp1h2g53l3thqg****.redis.rds.aliyuncs.comTitik akhir pribadi instans Tairr-bp1h2g53l3thqg1234.redis.rds.aliyuncs.com
**** (REDIS_PASSWORD)Kata sandi untuk instans TairKata sandi Anda
63**Port pribadi instans Tair6379

Edit file kode index.py

Fungsi ini membaca kunci counter dari instans Tair, menambahkannya sebesar 1, menulis kembali nilai baru tersebut, lalu mengembalikan nilai sebelumnya.

# -*- coding: utf-8 -*-
import os
import redis

# Kolam koneksi global, digunakan ulang di seluruh pemanggilan fungsi untuk mengurangi latensi
conn_pool = None


def initializer(context):
    """Inisialisasi kolam koneksi Redis menggunakan variabel lingkungan."""
    global conn_pool
    conn_pool = redis.ConnectionPool(
        host=os.environ['REDIS_HOST'],
        password=os.environ['REDIS_PASSWORD'],
        port=os.environ['REDIS_PORT'],
        db=1,
        decode_responses=True
    )


def handler(event, context):
    """Baca, tambahkan, dan tulis balik nilai counter di Tair."""
    global conn_pool
    r = redis.Redis(connection_pool=conn_pool)

    counter = r.get('counter')

    if counter is None:
        counter = 0
    else:
        counter = int(counter)

    print('counter: ' + str(counter))

    r.set('counter', str(counter + 1))
    return counter
Catatan

Pustaka Python redis merupakan dependensi pihak ketiga. Build proyek dengan Docker pada langkah berikutnya agar dependensi ini otomatis disertakan. Untuk opsi manajemen dependensi lainnya, lihat Instal dependensi pihak ketiga untuk fungsi.

Langkah 3: Build dan deploy

Build proyek:

sudo s build --use-docker

Deploy proyek:

sudo s deploy -y

Langkah 4: Panggil dan verifikasi fungsi

sudo s invoke -e "{}"

Output yang diharapkan:

[2021-09-14T17:08:50.875] [INFO ] [S-CLI] - Start ...
========= FC invoke Logs begin =========
FC Initialize Start RequestId: ccd73383-048d-4c8d-834e-93da59b86a21
FC Initialize End RequestId: ccd73383-048d-4c8d-834e-93da59b86a21
FC Invoke Start RequestId: eccafc0a-493e-4f3e-9afa-45c0b84a2c0f
counter: 0
FC Invoke End RequestId: eccafc0a-493e-4f3e-9afa-45c0b84a2c0f

Duration: 27.51 ms, Billed Duration: 28 ms, Memory Size: 256 MB, Max Memory Used: 34.05 MB
========= FC invoke Logs end =========

FC Invoke Result:
0


End of method: invoke

Nilai yang dikembalikan dimulai dari 0 dan bertambah setiap kali dipanggil, yang menunjukkan bahwa fungsi berhasil membaca dan menulis kunci counter di instans Tair. Jalankan perintah invoke beberapa kali untuk memverifikasi bahwa counter bertambah dengan benar: 0, 1, 2, dan seterusnya.

Troubleshooting

Timeout koneksi

Gejala: Fungsi mengalami timeout tanpa mengembalikan hasil.

Penyebab dan solusi:

  1. Konfigurasi VPC salah: Verifikasi bahwa vpcId, securityGroupId, dan vswitchIds dalam s.yaml benar dan berada dalam VPC yang sama dengan instans Tair.

  2. Daftar putih belum dikonfigurasi: Pastikan blok CIDR vSwitch telah ditambahkan ke daftar putih instans Tair. Lihat Konfigurasikan daftar putih alamat IP.

  3. vSwitch berada di zona yang tidak didukung: Buat vSwitch di zona yang didukung oleh Function Compute. Lihat Bagaimana cara mengatasi error "vSwitch berada di zona yang tidak didukung"?

Kegagalan autentikasi

Gejala: Fungsi mengembalikan error NOAUTH Authentication required, ERR invalid password, atau WRONGPASS invalid username-password pair.

Penyebab dan solusi:

  1. Kata sandi salah: Periksa variabel lingkungan REDIS_PASSWORD dalam s.yaml.

  2. Host atau port salah: Verifikasi bahwa REDIS_HOST dan REDIS_PORT sesuai dengan titik akhir pribadi dan port yang ditampilkan di Konsol Tair.

Error dependensi

Gejala: Fungsi mengembalikan error ModuleNotFoundError: No module named 'redis'.

Solusi: Build proyek dengan Docker sebelum mendeploy:

sudo s build --use-docker
sudo s deploy -y

Untuk panduan troubleshooting lebih lanjut, lihat Error umum dan troubleshooting dan Cara melakukan troubleshooting kegagalan akses database?

Bersihkan sumber daya

Untuk menghindari biaya berkelanjutan, hapus sumber daya yang dibuat dalam panduan ini:

  1. Hapus fungsi dan layanan yang telah dideploy:

       sudo s remove -y
  2. Jika instans Tair hanya dibuat untuk tutorial ini, lepaskan instans tersebut di Konsol Tair.

  3. Jika VPC, vSwitch, atau security group hanya dibuat untuk tutorial ini, hapus di Konsol VPC.

Referensi