Las variables de entorno permiten ajustar el comportamiento de una función de FC sin modificar su código. Se almacenan como pares clave-valor de tipo cadena en la configuración de la función, y cada función cuenta con su propio conjunto. En este tema se explican los conceptos básicos de las variables de entorno y cómo configurarlas.
Seguridad
Al crear o actualizar variables de entorno, Function Compute las cifra en reposo mediante el estándar Advanced Encryption Standard 256 (AES-256). Cuando se inicializa una instancia de la función, las variables se descifran y se inyectan en el entorno de dicha instancia.
Límites
-
Reglas del conjunto de caracteres
La clave debe comenzar con una letra y solo puede contener letras, dígitos y guiones bajos (_).
-
Límite de tamaño
El tamaño total de todas las variables de entorno no puede superar los 4 KB.
-
Variables de entorno del sistema reservadas
Para evitar conflictos con el sistema, no es posible usar variables de entorno que tengan el prefijo reservado FC_*.
Function Compute admite las siguientes variables de entorno del sistema:
FC_FUNC_CODE_PATH: el directorio de despliegue del código.
ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET y ALIBABA_CLOUD_SECURITY_TOKEN: las credenciales temporales obtenidas del rol de ejecución de la función, que incluyen el AccessKey ID, el secreto del AccessKey y el token temporal.
FC_ACCOUNT_ID: el identificador del usuario.
FC_FUNCTION_HANDLER: el controlador de la función.
FC_FUNCTION_MEMORY_SIZE: el tamaño de memoria configurado para la función, en MB.
FC_FUNCTION_NAME: el nombre de la función.
FC_REGION: la región donde reside la función.
FC_CUSTOM_LISTEN_PORT: el puerto de escucha personalizado de la función.
FC_INSTANCE_ID: el identificador de la instancia de la función.
FC_VER_ID: el identificador de la versión de la función. Esta variable está disponible para los entornos de ejecución integrados en Debian 10 y versiones anteriores.
FC_FUNCTION_VERSION: el identificador de la versión de la función. Esta variable está disponible para los entornos de ejecución integrados en Debian 11 y versiones posteriores.
Casos de uso
-
Compartir código entre plataformas o servicios
Las variables de entorno facilitan la gestión de distintas configuraciones para los entornos de prueba y producción. Por ejemplo, permiten especificar buckets de Object Storage Service (OSS), bases de datos o tablas diferentes. De este modo, es posible desplegar la misma base de código en varias plataformas sin modificarla.
-
Configurar credenciales
Mediante variables de entorno se pueden establecer las credenciales de conexión a la base de datos, el AccessKey de Alibaba Cloud u otra información de autenticación confidencial.
-
Configurar variables del sistema
Si configura directorios como PATH y HOME, podrá utilizar las bibliotecas del sistema con mayor flexibilidad.
Configuración de variables de entorno
Console
Requisitos previos
Debe tener una función creada. Para obtener más información, consulte Create a function.
Procedimiento
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, seleccione .
En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función de destino.
En la página de detalles de la función, haga clic en la pestaña Configuration. Después, en la sección Advanced Settings, haga clic en Modify.
-
En el panel Advanced Settings, dentro de Environment Variables, configure las variables con uno de los métodos a continuación y haga clic en Deploy.
-
Con el editor de formularios
Haga clic en + Add Variable.
-
Configure un par clave-valor para la variable de entorno:
Variable: introduzca una clave personalizada.
Value: introduzca un valor personalizado.
-
Con el editor JSON
Haga clic en Use JSON format to edit.
-
En el cuadro de texto, introduzca los pares clave-valor en formato JSON, tal como se muestra en el siguiente ejemplo:
{ "key": "value" }Ejemplo:
{ "BUCKET_NAME": "MY_BUCKET", "TABLE_NAME": "MY_TABLE" }
-
-
Compruebe que las variables de entorno hayan surtido efecto.
En la página de detalles de la función, haga clic en la pestaña Code.
-
En el editor de código, escriba su código y haga clic en Deploy. Una vez completado correctamente el despliegue, haga clic en Test Function.
El siguiente código de ejemplo de una función de evento en Python muestra cómo comprobar las variables de entorno:
# -*- 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" En la pestaña Code, consulte la salida en Log Output. Si la función se ejecuta correctamente, las variables de entorno configuradas aparecerán en los registros.
Serverless Devs
Requisitos previos
Serverless Devs debe estar instalado y configurado. Para obtener más información, consulte Quick start.
Procedimiento
Cree un directorio de código para pruebas, por ejemplo,
test.-
Acceda al directorio
testy cree un archivoindex.pyjunto con un archivos.yaml.La estructura del directorio de código es la siguiente:
. ├── code │ └── index.py └── s.yamlEl archivo
index.pycontiene el código de la función. Para ver el código de ejemplo, consulte el apartado Console.El archivo
s.yamlcorresponde a la configuración de la función. A continuación se muestra un ejemplo: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. -
Ejecute el comando
s deploypara desplegar el proyecto.Una vez completado correctamente el despliegue, inicie sesión en la consola de Function Compute para consultar la función creada y sus variables de entorno.
SDK
Los siguientes ejemplos utilizan el SDK de Python. El parámetro environmentVariables, que acepta un diccionario, define las variables de entorno. El código de ejemplo muestra cómo crearlas, actualizarlas y obtenerlas.
-
Crear variables de entorno
# 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) -
Actualizar variables de entorno
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) -
Obtener variables de entorno
resp = client.get_function('test', 'test_env') env = func['environmentVariables']
Uso de variables de entorno en el código
Si configuró la variable de entorno {"key":"val"}, los siguientes ejemplos muestran cómo leer su valor en distintos entornos de ejecución.
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)