Variabel lingkungan memungkinkan Anda menyesuaikan perilaku fungsi tanpa mengubah kode. Variabel ini disimpan sebagai pasangan kunci-nilai dalam konfigurasi fungsi, dan setiap fungsi memiliki himpunan yang terisolasi sendiri.
Untuk nilai sensitif seperti Kunci API dan kredensial database, simpan di Key Management Service (KMS) alih-alih dalam variabel lingkungan. Dekripsi nilai tersebut saat waktu proses dengan memanggil API KMS sebelum fungsi dieksekusi.
Cara kerja
Saat Anda membuat atau memperbarui variabel lingkungan, Function Compute mengenkripsi variabel tersebut menggunakan Advanced Encryption Standard (AES-256) sebelum menyimpannya. Saat instans fungsi diinisialisasi, Function Compute mendekripsi variabel tersebut dan menyuntikkannya ke dalam lingkungan instans.
Kasus penggunaan
Lingkungan terpisah: Arahkan basis kode yang sama ke bucket Object Storage Service (OSS), database, atau tabel yang berbeda tergantung pada apakah Anda berada di lingkungan uji atau produksi—tanpa perubahan kode.
Manage kredensial: Simpan pasangan AccessKey Alibaba Cloud atau nama pengguna dan kata sandi database di luar kode Anda.
Override path sistem: Atur variabel
PATHdanHOMEsesuai kebutuhan lingkungan runtime Anda.
Batasan
| Batasan | Detail |
|---|---|
| Format kunci | Kunci harus dimulai dengan huruf dan hanya boleh berisi huruf serta angka. |
| Ukuran total | Ukuran gabungan semua variabel lingkungan untuk suatu fungsi tidak boleh melebihi 4 KB. |
| Reserved Prefix | Jangan gunakan awalan FC_* untuk variabel Anda sendiri. Function Compute mencadangkannya untuk variabel yang disuntikkan sistem. |
Variabel lingkungan sistem
Function Compute secara otomatis menyuntikkan variabel read-only berikut ke setiap instans fungsi. Jangan override atau definisikan ulang variabel ini.
Variabel runtime
| Variabel | Deskripsi |
|---|---|
FC_FUNC_CODE_PATH | Direktori penerapan kode |
FC_ACCOUNT_ID | ID pengguna |
FC_FUNCTION_HANDLER | Penanganan |
FC_FUNCTION_MEMORY_SIZE | Ukuran memori fungsi, dalam MB |
FC_FUNCTION_NAME | Nama fungsi |
FC_REGION | Wilayah tempat fungsi dijalankan |
FC_CUSTOM_LISTEN_PORT | Port listening kustom fungsi |
FC_INSTANCE_ID | ID instans fungsi |
FC_VER_ID | ID versi fungsi, untuk runtime bawaan pada Debian 10 atau lebih lama |
FC_FUNCTION_VERSION | ID versi fungsi, untuk runtime bawaan pada Debian 11 atau lebih baru |
Variabel kredensial
Function Compute juga menyuntikkan variabel kredensial berikut, yang sesuai dengan peran eksekusi yang dikonfigurasi pada fungsi:
| Variabel | Deskripsi |
|---|---|
ALIBABA_CLOUD_ACCESS_KEY_ID | ID AccessKey peran |
ALIBABA_CLOUD_ACCESS_KEY_SECRET | Rahasia AccessKey peran |
ALIBABA_CLOUD_SECURITY_TOKEN | Token temporary untuk peran |
ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN berisi informasi kredensial sensitif. Jangan bagikan atau ekspos nilai-nilai ini kepada pihak ketiga.
Konfigurasikan variabel lingkungan di Konsol
Prerequisites: Fungsi harus sudah ada sebelum Anda dapat mengonfigurasi variabel lingkungannya. Lihat Buat fungsi.
Tambahkan variabel lingkungan
Login ke Konsol Function Compute. Di panel navigasi kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang ingin Anda kelola.
Klik tab Configurations, lalu pilih Environment Variables di panel navigasi sebelah kiri.
Klik Modify. Pada panel Environment Variables, pilih editor dan konfigurasikan variabel Anda:
Form Editor (default): Klik + Add Variable, lalu masukkan kunci di bidang Variable dan nilai di bidang Value. Persyaratan:
Kunci harus dimulai dengan huruf dan hanya boleh berisi huruf serta angka.
Ukuran total semua variabel lingkungan tidak boleh melebihi 4 KB.
Hindari awalan
FC_*.
JSON Editor: Klik JSON Editor dan masukkan pasangan kunci-nilai dalam format berikut: ``
json { "BUCKET_NAME": "MY_BUCKET", "TABLE_NAME": "MY_TABLE" }``
Klik Deploy.
Verifikasi konfigurasi
Klik tab Code. Di editor kode, masukkan kode Python berikut dan klik Deploy:
# -*- coding: utf-8 -*- import logging import os def handler(event, context): logger = logging.getLogger() value = os.environ.get('BUCKET_NAME') logger.info('BUCKET_NAME: {}'.format(value)) value = os.environ.get('TABLE_NAME') logger.info('TABLE_NAME: {}'.format(value)) return "done"Klik Test Function, lalu klik Log Output untuk melihat log. Output log mengonfirmasi bahwa variabel lingkungan tersedia.
Konfigurasikan variabel lingkungan menggunakan Serverless Devs
Sebelum memulai, pastikan Anda telah:
Menginstal Serverless Devs. Lihat Instal Serverless Devs.
Mengonfigurasi Serverless Devs. Lihat Konfigurasi Serverless Devs.
Terapkan fungsi dengan variabel lingkungan
Buat direktori proyek (misalnya,
test) dengan struktur berikut:. ├── code │ └── index.py └── s.yamlTambahkan bidang
environmentVariableske files.yamlAnda:edition: 3.0.0 name: hello-world-app access: "default" vars: region: "cn-hangzhou" resources: hello_world: component: fc3 props: region: ${vars.region} functionName: envdemo description: 'hello world by serverless devs' runtime: python3 code: ./code handler: index.handler memorySize: 128 timeout: 30 environmentVariables: BUCKET_NAME: MY_BUCKET TABLE_NAME: MY_TABLE codeUri: ./Jalankan perintah berikut untuk menerapkan:
s deploy
Setelah penerapan, login ke Konsol Function Compute untuk mengonfirmasi bahwa fungsi dan variabel lingkungannya telah dibuat.
Konfigurasikan variabel lingkungan menggunakan SDK
Contoh berikut menggunakan SDK Python (pustaka fc2). Parameter environmentVariables menerima kamus pasangan kunci-nilai.
Semua contoh membaca kredensial dari variabel lingkungan untuk menghindari hardcoding nilai sensitif.
Create environment variables
# coding: utf-8
import os
import fc2
client = fc2.Client(
endpoint='<your-endpoint>',
# Baca kredensial dari variabel lingkungan.
# Di runtime Function Compute, nilai ini diatur secara otomatis saat Anda mengonfigurasi izin eksekusi.
accessKeyID=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
accessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)
client.create_service('test')
client.create_function(
'test', # Nama layanan
'test_env', # Nama fungsi
'python3', # Runtime
'main.handler', # Handler
codeDir='/path/to/code/',
environmentVariables={'testKey': 'testValue'}
)
res = client.get_function('test', 'test_env')
print(res.data)Update environment variables
client.update_function(
'test', 'test_env', 'python3', 'main.handler',
codeDir='/path/to/code/',
environmentVariables={'newKey': 'newValue'}
)
res = client.get_function('test', 'test_env')
print(res.data)Get environment variables
resp = client.get_function('test', 'test_env')
env = resp.data['environmentVariables']Gunakan variabel lingkungan dalam kode
Untuk contoh dalam berbagai runtime, lihat Gunakan variabel lingkungan dalam kode.