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:
Akun Alibaba Cloud dengan Function Compute yang telah diaktifkan
Serverless Devs dan Docker yang telah diinstal, serta pasangan Kunci Akses yang telah dikonfigurasi
Instans Tair (kompatibel dengan Redis OSS) yang telah dibuat dan berjalan
VPC dengan setidaknya satu vSwitch dan satu security group
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.
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.
Masuk ke Konsol Tair.
Pada bilah navigasi atas, pilih wilayah tempat instans dideploy.
Pada halaman Instances, temukan instans tersebut lalu klik ID-nya.
Pada panel navigasi sebelah kiri, klik Whitelist Settings. Pada tab Whitelist Settings, temukan daftar putih yang akan dimodifikasi lalu klik Modify pada kolom Actions.
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 initPada prompt CLI:
Pilih Alibaba Cloud sebagai vendor.
Pilih mode quick start.
Pilih runtime Python bawaan.
Tentukan nama proyek dan wilayah. Panduan ini menggunakan proyek
start-fc-redis-pythondi wilayah China (Hangzhou).
Buka direktori proyek:
cd start-fc-redis-pythonLangkah 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 TairGanti placeholder berikut dengan nilai aktual Anda:
| Placeholder | Deskripsi | Contoh |
|---|---|---|
vpc-bp1oeg1fwxzuxcliq**** | ID VPC tempat instans Tair berada | vpc-bp1oeg1fwxzuxcliq1234 |
sg-bp164seaxj7wc4d0**** | ID security group | sg-bp164seaxj7wc4d01234 |
vsw-bp1192npo1ziqzw4**** | ID vSwitch | vsw-bp1192npo1ziqzw41234 |
r-bp1h2g53l3thqg****.redis.rds.aliyuncs.com | Titik akhir pribadi instans Tair | r-bp1h2g53l3thqg1234.redis.rds.aliyuncs.com |
**** (REDIS_PASSWORD) | Kata sandi untuk instans Tair | Kata sandi Anda |
63** | Port pribadi instans Tair | 6379 |
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 counterPustaka 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-dockerDeploy proyek:
sudo s deploy -yLangkah 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: invokeNilai 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:
Konfigurasi VPC salah: Verifikasi bahwa
vpcId,securityGroupId, danvswitchIdsdalams.yamlbenar dan berada dalam VPC yang sama dengan instans Tair.Daftar putih belum dikonfigurasi: Pastikan blok CIDR vSwitch telah ditambahkan ke daftar putih instans Tair. Lihat Konfigurasikan daftar putih alamat IP.
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:
Kata sandi salah: Periksa variabel lingkungan
REDIS_PASSWORDdalams.yaml.Host atau port salah: Verifikasi bahwa
REDIS_HOSTdanREDIS_PORTsesuai 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 -yUntuk 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:
Hapus fungsi dan layanan yang telah dideploy:
sudo s remove -yJika instans Tair hanya dibuat untuk tutorial ini, lepaskan instans tersebut di Konsol Tair.
Jika VPC, vSwitch, atau security group hanya dibuat untuk tutorial ini, hapus di Konsol VPC.
Referensi
Konfigurasikan pengaturan jaringan — lihat detail vSwitch dan blok CIDR untuk Function Compute