Kodunu değiştirmeden bir FC işlevinin davranışını ayarlamak için ortam değişkenlerini kullanabilirsiniz. Ortam değişkenleri, işlevin yapılandırmasında depolanan anahtar-değer çiftleridir. Her işlevin kendi ortam değişkenleri kümesi bulunur. Bu konuda ortam değişkenlerinin temelleri ve bunların nasıl yapılandırılacağı açıklanmaktadır.
Güvenlik
Ortam değişkenlerini oluştururken veya güncellerken Function Compute, bu değişkenleri Advanced Encryption Standard 256 (AES-256) kullanarak disk üzerinde şifreler. Bir işlev örneği başlatıldığında değişkenlerin şifresi çözülür ve örnek ortamına enjekte edilir.
Sınırlamalar
-
Karakter kümesi kuralları
Anahtar bir harfle başlamalı ve yalnızca harf, rakam ile alt çizgi (_) içerebilir.
-
Boyut sınırı
Tüm ortam değişkenlerinin toplam boyutu 4 KB'ı aşamaz.
-
Ayrılmış sistem ortam değişkenleri
Sistem çakışmalarını önlemek için FC_* ayrılmış ön ekiyle başlayan ortam değişkenlerini kullanamazsınız.
Function Compute aşağıdaki sistem ortam değişkenlerini destekler:
FC_FUNC_CODE_PATH: Kod dağıtım dizini.
ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET ve ALIBABA_CLOUD_SECURITY_TOKEN: İşlevin yürütme rolünden alınan geçici kimlik bilgileri; AccessKey ID, AccessKey gizli anahtarı ve geçici belirteci içerir.
FC_ACCOUNT_ID: Kullanıcı Kimliği.
FC_FUNCTION_HANDLER: İşlev işleyicisi.
FC_FUNCTION_MEMORY_SIZE: İşlev için yapılandırılan bellek boyutu (MB cinsinden).
FC_FUNCTION_NAME: İşlev adı.
FC_REGION: İşlevin bulunduğu bölge.
FC_CUSTOM_LISTEN_PORT: İşlevin özel dinleme bağlantı noktası.
FC_INSTANCE_ID: İşlev örneğinin Kimliği.
FC_VER_ID: İşlev sürümünün Kimliği. Bu değişken Debian 10 ve önceki sürümlerdeki yerleşik çalışma zamanları için kullanılabilir.
FC_FUNCTION_VERSION: İşlev sürümünün Kimliği. Bu değişken Debian 11 ve sonraki sürümlerdeki yerleşik çalışma zamanları için kullanılabilir.
Kullanım senaryoları
-
Kodu platformlar veya hizmetler arasında paylaşma
Farklı Object Storage Service (OSS) paketleri, veritabanları veya tablolar belirtmek gibi test ve üretim ortamları için farklı yapılandırmaları yönetmek amacıyla ortam değişkenlerini kullanabilirsiniz. Bu yaklaşım, aynı kod tabanını değişiklik yapmadan birden çok platformda dağıtmanıza olanak tanır.
-
Kimlik bilgilerini yapılandırma
Veritabanı bağlantı kimlik bilgilerini, Alibaba Cloud AccessKey'inizi veya diğer hassas kimlik doğrulama bilgilerini ortam değişkenleri aracılığıyla ayarlayabilirsiniz.
-
Sistem değişkenlerini yapılandırma
PATH ve HOME gibi dizinleri yapılandırarak sistem kitaplıklarını daha esnek bir şekilde kullanabilirsiniz.
Ortam değişkenlerini yapılandırın
Console
Önkoşullar
Bir işlev oluşturmuş olmalısınız. Daha fazla bilgi için bkz. İşlev oluşturma.
Yordam
Function Compute konsolu nde oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işlevi tıklayın.
İşlev ayrıntıları sayfasında Configuration sekmesini tıklayın, ardından Advanced Settings bölümünde Modify seçeneğine tıklayın.
-
Advanced Settings panelinde, Environment Variables altında aşağıdaki yöntemlerden birini kullanarak değişkenleri yapılandırın ve Deploy seçeneğine tıklayın.
-
Form düzenleyiciyi kullanma
+ Add Variable seçeneğine tıklayın.
-
Ortam değişkeni için bir anahtar-değer çifti yapılandırın:
Variable: Özel bir anahtar girin.
Value: Özel bir değer girin.
-
JSON düzenleyiciyi kullanma
Use JSON format to edit seçeneğine tıklayın.
-
Metin kutusuna aşağıdaki örnekte gösterildiği gibi anahtar-değer çiftlerini JSON biçiminde girin:
{ "key": "value" }Örnek:
{ "BUCKET_NAME": "MY_BUCKET", "TABLE_NAME": "MY_TABLE" }
-
-
Ortam değişkenlerinin etkili olduğunu doğrulayın.
İşlev ayrıntıları sayfasında Code sekmesine tıklayın.
-
Kod düzenleyicide kodunuzu yazın, Deploy seçeneğine tıklayın. Dağıtım başarıyla tamamlandıktan sonra Test Function seçeneğine tıklayın.
Aşağıdaki Python olay işlevi örnek kodu, ortam değişkenlerinin nasıl doğrulanacağını göstermektedir:
# -*- 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" Code sekmesinde Log Output öğesini görüntüleyin. İşlev başarıyla yürütüldükten sonra yapılandırılan ortam değişkenleri günlüklerde görünür.
Serverless Devs
Önkoşullar
Serverless Devs yüklenmiş ve yapılandırılmış olmalıdır. Daha fazla bilgi için bkz. Hızlı başlangıç.
Yordam
Test amacıyla bir kod dizini oluşturun, örneğin
test.-
testdizinine gidin ve birindex.pydosyası ile birs.yamldosyası oluşturun.Kod dizini aşağıdaki gibi yapılandırılır:
. ├── code │ └── index.py └── s.yamlindex.pydosyası işlev kodunuzu içerir. Örnek kod için Console bölümündeki örneğe bakın.s.yamldosyası işlevin yapılandırma dosyasıdır. Aşağıda bir örnek verilmiştir:edition: 3.0.0 name: hello-world-app # access: specifies the required credential information for the application. # For more information about how to configure credentials, see https://www.serverless-devs.com/serverless-devs/command/config # For more information about the credential priority, see https://www.serverless-devs.com/serverless-devs/tool#credential-priority-and-specifications access: "default" vars: # Global variables region: "cn-hangzhou" resources: hello_world: # To perform an operation only on a specific service like hello_world, specify its name in the command. Example: # Build only for the hello_world service: s hello_world build # If you run the s build command without specifying a service, Serverless Devs performs the build operation on all services that are at the same level as hello_world in the YAML file. component: fc3 # The component name. Serverless Devs uses components to extend its capabilities. This component enables Function Compute features. # actions: # Custom execution logic. For more information, see https://docs.serverless-devs.com/serverless-devs/yaml#actions. props: region: ${vars.region} # For more information about how to use variables, see https://docs.serverless-devs.com/serverless-devs/yaml#variable-assignment. functionName: envdemo # Declares a function named envdemo. description: 'hello world by serverless devs' runtime: python3 # Specifies the function runtime. code: ./code handler: index.handler # Specifies the function handler. memorySize: 128 timeout: 30 environmentVariables: # Configures two environment variables for the function. BUCKET_NAME: MY_BUCKET TABLE_NAME: MY_TABLE codeUri: ./ # Deploys the function from the current directory "./". During deployment, Serverless Devs packages and uploads the current directory. -
Projeyi dağıtmak için
s deploykomutunu çalıştırın.Dağıtım başarıyla tamamlandıktan sonra Function Compute konsolu nde oturum açarak oluşturulan işlevi ve ortam değişkenlerini görüntüleyebilirsiniz.
SDK
Aşağıdaki örnekler Python SDK kullanır. Ortam değişkenlerini belirten sözlük kabul eden environmentVariables parametresi kullanılır. Örnek kod, bu değişkenlerin nasıl oluşturulacağını, güncelleneceğini ve alınacağını gösterir.
-
Ortam değişkenleri oluşturma
# coding: utf-8 import fc2 import os client = fc2.Client( endpoint='your endpoint', # The endpoint. # We recommend not storing your AccessKey ID and AccessKey secret in your code. # Leaking this sensitive information can compromise the security of your resources. # This example uses environment variables for authentication. # Before running this code, set the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables locally. accessKeyID=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), # Your AccessKey ID, used for authentication. You can create and manage it in the RAM console. accessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') # Your AccessKey secret, used for authentication. You can create and manage it in the RAM console. ) client.create_service('test') client.create_function( 'test', # The service name. 'test_env', # The function name. 'python3', # The runtime. 'main.handler', # The handler. codeDir='/path/to/code/', # The code directory. environmentVariables={'testKey': 'testValue'} # The environment variables to configure. ) res = client.get_function('test', 'test_env') print(res.data) -
Ortam değişkenlerini güncelleme
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) -
Ortam değişkenlerini alma
resp = client.get_function('test', 'test_env') env = func['environmentVariables']
Kodunuzda ortam değişkenlerini kullanma
{"key":"val"} ortam değişkenini yapılandırdığınızı varsayarsak, aşağıdaki örnekler farklı çalışma zamanlarında bu değerin nasıl okunacağını gösterir.
var value = process.env.key
console.log(value)import os
value = os.environ.get('key')
print(value)$value = getenv('key');System.out.println("value: "+ System.getenv("key"));string value = Environment.GetEnvironmentVariable("key");
Console.WriteLine("value: {0}", value);var value = os.Getenv("key")
fmt.Printf("value: %s\n", value)