This topic describes context in Python runtimes of Function Compute. This topic also provides an example on how to use context.
What is a context?
When Function Compute runs a function, the system passes a context object to the method that is used to execute the function. The context object contains information about the invocation, service, function, and execution environment.
Python 3.12
The following table describes the parameters that are supported by the context object in the Python 3.12 runtime.
Parameter | Type | Description |
request_id | String | The ID of the request. You can record the ID for troubleshooting if an error occurs. |
function | The FunctionMeta struct, which contains the following fields:
| The basic information about the invoked function, such as the name, handler, memory, timeout period, version, and alias. |
region | String | The ID of the region in which the function is invoked. For example, if the function is invoked in the China (Shanghai) region, the region ID is cn-shanghai. For more information, see Endpoints. |
logger | String | Records logs during function executions. |
account_id | String | The ID of the Alibaba Cloud account to which the function belongs. |
log_project and log_store | string | The name of the project in Simple Log Service. The Logstore information. |
The credentials context field is removed in Python 3.12. You can use the ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, and ALIBABA_CLOUD_SECURITY_TOKEN environment variables instead of credentials to access other resources. For more information, see Configure environment variables.
The following code shows the format of the context object in Python 3.12.
# -*- 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 = regionPython 3.10, Python 3.9, and Python 3.6
The following table describes the parameters that are supported by the context object in Python 3.10, Python 3.9, and Python 3.6 runtimes.
Parameter | Type | Description |
request_id | String | The unique ID of the request that is used to invoke the function. You can record this ID for troubleshooting if an error occurs. |
credentials | The credentials struct, which contains the following fields:
| After you configure a role for a function, Function Compute obtains a set of temporary keys through the AssumeRole API. These keys are valid for 36 hours. You can use |
function | The FunctionMeta struct, which contains the following fields:
| The basic information about the invoked function, such as the name, handler, memory, and timeout period of the function. |
service | The ServiceMeta struct, which contains the following fields:
| The information about the service to which the function belongs, such as the name, the related project, and Logstore in Simple Log Service, the version, and the alias of the service. The |
region | String | The ID of the region in which the function is invoked. For example, if the function is invoked in the China (Shanghai) region, the region ID is cn-shanghai. For more information, see Service endpoints. |
account_id | String | The ID of the Alibaba Cloud account to which the function belongs. |
For more information about the context, refer to the following format.
# -*- 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 = tracingExample
For more information about how to use the context, see Example 2: Read and write OSS resources using a temporary AccessKey pair.