Les variables d'environnement permettent d'ajuster le comportement d'une fonction FC sans modifier son code. Il s'agit de paires clé-valeur de type chaîne stockées dans la configuration de la fonction. Chaque fonction dispose de son propre jeu de variables d'environnement. Cette rubrique présente les principes fondamentaux des variables d'environnement ainsi que leur configuration.
Sécurité
Lors de la création ou de la mise à jour des variables d'environnement, Function Compute les chiffre au repos à l'aide de l'algorithme Advanced Encryption Standard 256 (AES-256). Lors de l'initialisation d'une instance de fonction, ces variables sont déchiffrées et injectées dans l'environnement de l'instance.
Limites
-
Règles relatives au jeu de caractères
Une clé doit commencer par une lettre et ne contenir que des lettres, des chiffres et des traits de soulignement (_).
-
Limite de taille
La taille totale de toutes les variables d'environnement ne doit pas dépasser 4 Ko.
-
Variables d'environnement système réservées
Pour éviter tout conflit système, vous ne pouvez pas utiliser de variables d'environnement portant le préfixe réservé FC_*.
Function Compute prend en charge les variables d'environnement système suivantes :
FC_FUNC_CODE_PATH : répertoire de déploiement du code.
ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET et ALIBABA_CLOUD_SECURITY_TOKEN : identifiants temporaires obtenus via le rôle d'exécution de la fonction, comprenant l'AccessKey ID, l'AccessKey secret et le token temporaire.
FC_ACCOUNT_ID : ID utilisateur.
FC_FUNCTION_HANDLER : handler de la fonction.
FC_FUNCTION_MEMORY_SIZE : taille mémoire configurée pour la fonction, exprimée en Mo.
FC_FUNCTION_NAME : nom de la fonction.
FC_REGION : région où réside la fonction.
FC_CUSTOM_LISTEN_PORT : port d'écoute personnalisé de la fonction.
FC_INSTANCE_ID : ID de l'instance de fonction.
FC_VER_ID : ID de version de la fonction. Cette variable est disponible pour les environnements d'exécution intégrés sous Debian 10 et versions antérieures.
FC_FUNCTION_VERSION : ID de version de la fonction. Cette variable est disponible pour les environnements d'exécution intégrés sous Debian 11 et versions ultérieures.
Cas d'utilisation
-
Partage de code entre plusieurs plateformes ou services
Les variables d'environnement facilitent la gestion de configurations distinctes pour les environnements de test et de production, par exemple en spécifiant différents buckets Object Storage Service (OSS), bases de données ou tables. Vous pouvez ainsi déployer la même base de code sur plusieurs plateformes sans aucune modification.
-
Configuration des identifiants
Définissez les identifiants de connexion à une base de données, votre AccessKey Alibaba Cloud ou toute autre information d'authentification sensible via des variables d'environnement.
-
Paramétrage des variables système
Configurez des répertoires tels que PATH et HOME afin d'utiliser les bibliothèques système avec plus de flexibilité.
Configurer des variables d'environnement
Console
Prérequis
Une fonction est créée. Pour plus d'informations, consultez Créer une fonction.
Procédure
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez .
Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.
Sur la page de détails de la fonction, cliquez sur l'onglet Configuration, puis dans la section Advanced Settings, cliquez sur Modify.
-
Dans le panneau Advanced Settings, sous Environment Variables, configurez les variables selon l'une des méthodes suivantes, puis cliquez sur Deploy.
-
Via l'éditeur de formulaire
Cliquez sur + Add Variable.
-
Configurez une paire clé-valeur pour la variable d'environnement :
Variable : saisissez une clé personnalisée.
Value : saisissez une valeur personnalisée.
-
Via l'éditeur JSON
Cliquez sur Use JSON format to edit.
-
Dans la zone de texte, saisissez les paires clé-valeur au format JSON, comme illustré dans l'exemple suivant :
{ "key": "value" }Exemple :
{ "BUCKET_NAME": "MY_BUCKET", "TABLE_NAME": "MY_TABLE" }
-
-
Vérifiez que les variables d'environnement ont bien pris effet.
Sur la page de détails de la fonction, cliquez sur l'onglet Code.
-
Dans l'éditeur de code, écrivez votre code, puis cliquez sur Deploy. Une fois le déploiement terminé, cliquez sur Test Function.
L'exemple de code suivant pour une fonction événementielle Python montre comment vérifier les variables d'environnement :
# -*- 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" Sous l'onglet Code, consultez la section Log Output. Après l'exécution réussie de la fonction, les variables d'environnement configurées apparaissent dans les journaux.
Serverless Devs
Prérequis
Serverless Devs est installé et configuré. Pour plus d'informations, consultez Démarrage rapide.
Procédure
Créez un répertoire de code pour les tests, par exemple
test.-
Accédez au répertoire
testet créez un fichierindex.pyainsi qu'un fichiers.yaml.Le répertoire de code présente la structure suivante :
. ├── code │ └── index.py └── s.yamlLe fichier
index.pycontient le code de votre fonction. Pour obtenir un exemple de code, reportez-vous à l'exemple fourni dans la section Console.Le fichier
s.yamlcorrespond au fichier de configuration de la fonction. Voici un exemple :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. -
Exécutez la commande
s deploypour déployer le projet.Après un déploiement réussi, connectez-vous à la console Function Compute pour consulter la fonction créée ainsi que ses variables d'environnement.
SDK
Les exemples suivants utilisent le SDK Python. Le paramètre environmentVariables, qui accepte un dictionnaire, permet de spécifier les variables d'environnement. L'extrait de code ci-dessous montre comment créer, mettre à jour et récupérer ces variables.
-
Création de variables d'environnement
# 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) -
Mise à jour des variables d'environnement
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) -
Récupération des variables d'environnement
resp = client.get_function('test', 'test_env') env = func['environmentVariables']
Utiliser des variables d'environnement dans votre code
Si vous avez configuré la variable d'environnement {"key":"val"}, les exemples suivants montrent comment lire sa valeur dans différents environnements d'exécution.
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)