Function Compute pasa un objeto de contexto a cada handler. Este objeto proporciona el ID de la solicitud, los metadatos de la función, la región y el logger para la invocación.
Diferencias entre runtimes
Python 3.12 reestructura el objeto de contexto respecto a los runtimes anteriores (3.10, 3.9 y 3.6).
|
Función |
Python 3.12 |
Python 3.10, 3.9 y 3.6 |
|
Campo |
Se eliminó. Utilice variables de entorno. |
Disponible como estructura |
|
Estructura |
Se eliminó. Los campos |
Disponible como estructura |
|
Campo |
Disponible en el objeto de contexto. |
No disponible. |
|
Campos de |
6 campos: |
4 campos: |
Python 3.12
Propiedades del contexto
|
Propiedad |
Tipo |
Descripción |
|
|
String |
Identificador único de la solicitud. Regístrelo para solucionar problemas. |
|
|
|
Metadatos de la función invocada. Consulte los campos de FunctionMeta. |
|
|
String |
ID de la región, por ejemplo |
|
|
Logger |
Logger para la ejecución de la función. Inicialmente es |
|
|
String |
ID de la cuenta de Alibaba Cloud propietaria de la función. |
|
|
String |
Nombre del proyecto de Simple Log Service asociado a la función. |
|
|
String |
Nombre del logstore de Simple Log Service asociado a la función. |
Campos de FunctionMeta (Python 3.12)
|
Campo |
Descripción |
|
|
Nombre de la función. |
|
|
Punto de entrada del handler. |
|
|
Memoria asignada a la función, en MB. |
|
|
Tiempo máximo de ejecución, en segundos. |
|
|
Versión de la función que se invoca. |
|
|
Versión o alias especificado al invocar la función. |
Migración de credenciales
El campo credentials se eliminó en Python 3.12. En su lugar, utilice variables de entorno.
Para acceder a otros servicios de Alibaba Cloud, utilice las siguientes variables de entorno:
|
Variable de entorno |
Descripción |
|
|
ID temporal del accesskey. |
|
|
Secreto temporal del accesskey. |
|
|
Token de seguridad. |
Configure environment variables.
Comparación antes y después:
# Python 3.10 and earlier -- credentials from context
def handler(event, context):
creds = context.credentials
access_key_id = creds.access_key_id
access_key_secret = creds.access_key_secret
security_token = creds.security_token
# Python 3.12 -- credentials from environment variables
import os
def handler(event, context):
access_key_id = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
security_token = os.environ['ALIBABA_CLOUD_SECURITY_TOKEN']
Definición de la clase de contexto
# -*- coding: utf-8 -*-
import json
class FunctionMeta:
def __init__(self, name, handler, memory, timeout, version_id, qualifier):
self.name = name
self.handler = handler
self.memory = memory
self.timeout = timeout
self.version_id = version_id
self.qualifier = qualifier
class FCContext:
def __init__(self, account_id, request_id, function_meta, logger, log_project, log_store,
region):
self.account_id = account_id
self.request_id = request_id
self.function = function_meta
self.logger = logger
self.log_project = log_project
self.log_store = log_store
self.region = region
Python 3.10, 3.9 y 3.6
Propiedades del contexto
|
Propiedad |
Tipo |
Descripción |
|
|
String |
Identificador único de la solicitud. Regístrelo para solucionar problemas. |
|
|
|
Credenciales temporales obtenidas mediante la API AssumeRole, con una validez de 36 horas. Permiten acceder a otros servicios de Alibaba Cloud sin integrar un par de claves de accesskey. Consulte los campos de Credentials. Para más información, consulte Conceder permisos a Function Compute para acceder a otros servicios de Alibaba Cloud. |
|
|
|
Metadatos de la función invocada. Consulte los campos de FunctionMeta. |
|
|
|
Metadatos del servicio. Consulte los campos de ServiceMeta. |
|
|
String |
ID de la región, por ejemplo |
|
|
String |
ID de la cuenta de Alibaba Cloud propietaria de la función. |
Campos de Credentials
|
Campo |
Descripción |
|
|
ID temporal del accesskey. |
|
|
Secreto temporal del accesskey. |
|
|
Token de seguridad. |
Cuando se asigna un rol de RAM a una función, Function Compute obtiene credenciales temporales mediante la API AssumeRole. Estas credenciales tienen una validez de 36 horas y permiten que la función acceda a otros servicios de Alibaba Cloud sin necesidad de integrar un par de claves de accesskey.
Campos de FunctionMeta (Python 3.10, 3.9 y 3.6)
|
Campo |
Descripción |
|
|
Nombre de la función. |
|
|
Punto de entrada del handler. |
|
|
Memoria asignada a la función, en MB. |
|
|
Tiempo máximo de ejecución, en segundos. |
Campos de ServiceMeta
|
Campo |
Descripción |
|
|
Nombre del proyecto de Simple Log Service. |
|
|
Nombre del logstore de Simple Log Service. |
|
|
Versión o alias del servicio especificado al invocar la función. |
|
|
Versión del servicio que se invocó realmente. |
qualifieres la versión o el alias indicado en la solicitud de invocación;version_ides la versión que se ejecutó. Ambos valores difieren cuando un alias resuelve a una versión específica.
Definición de la clase de contexto
# -*- coding: utf-8 -*-
import json
class Credentials:
def __init__(self, access_key_id, access_key_secret, security_token):
self.access_key_id = access_key_id
self.access_key_secret = access_key_secret
self.security_token = security_token
class Tracing:
def __init__(self, span_context, base64_baggages, jaeger_endpoint):
self.span_context = span_context
self.jaeger_endpoint = jaeger_endpoint
self.span_baggages = self.parseOpenTracingBaggages(base64_baggages)
def parseOpenTracingBaggages(self, base64_baggages):
span_baggages = {}
# None || '' returns false
if base64_baggages:
try:
import base64
str_baggages = base64.b64decode(base64_baggages)
span_baggages = json.loads(str_baggages)
except Exception as e:
import logging
fc_sys_logger = logging.getLogger('fc_sys_logger')
fc_sys_logger.error('Failed to parse base64 opentracing baggages:[{}], err: {}'.format(base64_baggages, e))
return span_baggages
class FunctionMeta:
def __init__(self, name, handler, memory, timeout):
self.name = name
self.handler = handler
self.memory = memory
self.timeout = timeout
class FCContext:
def __init__(self, account_id, request_id, credentials, function_meta, service_meta, region, tracing):
self.credentials = credentials
self.function = function_meta
self.request_id = request_id
self.service = service_meta
self.region = region
self.account_id = account_id
# self.tracing = tracing
Ejemplo
Example 2: Read and write OSS resources using a temporary AccessKey pair.