O Function Compute passa um objeto de contexto a cada handler com o ID da solicitação, metadados da função, região e logger da invocação.
Diferenças entre runtimes
O Python 3.12 reestrutura o objeto de contexto em relação aos runtimes anteriores (3.10, 3.9 e 3.6).
|
Recurso |
Python 3.12 |
Python 3.10, 3.9 e 3.6 |
|
Campo |
Removido. Use variáveis de ambiente. |
Disponível como struct |
|
Struct |
Removida. Os campos |
Disponível como struct |
|
Campo |
Disponível no objeto de contexto. |
Indisponível. |
|
Campos de |
6 campos: |
4 campos: |
Python 3.12
Propriedades do contexto
|
Propriedade |
Tipo |
Descrição |
|
|
String |
Identificador único da solicitação. Registre-o para solucionar problemas. |
|
|
|
Metadados da função invocada. Veja Campos de FunctionMeta. |
|
|
String |
ID da região, como |
|
|
Logger |
Logger da execução da função. Inicialmente |
|
|
String |
ID da conta Alibaba Cloud proprietária da função. |
|
|
String |
Nome do projeto do Simple Log Service associado à função. |
|
|
String |
Nome do Logstore do Simple Log Service associado à função. |
Campos de FunctionMeta (Python 3.12)
|
Campo |
Descrição |
|
|
Nome da função. |
|
|
Ponto de entrada do handler. |
|
|
Memória alocada à função, em MB. |
|
|
Tempo máximo de execução, em segundos. |
|
|
Versão da função invocada. |
|
|
Versão ou alias especificado na invocação da função. |
Migração de credenciais
O campo credentials foi removido no Python 3.12. Use variáveis de ambiente como alternativa.
Para acessar outros serviços da Alibaba Cloud, use as seguintes variáveis de ambiente:
|
Variável de ambiente |
Descrição |
|
|
AccessKey ID temporário. |
|
|
AccessKey Secret temporário. |
|
|
Token de segurança. |
Consulte configure variáveis de ambiente.
Comparação antes e depois:
# 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']
Definição da classe 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 e 3.6
Propriedades do contexto
|
Propriedade |
Tipo |
Descrição |
|
|
String |
Identificador único da solicitação. Registre-o para solucionar problemas. |
|
|
|
Credenciais temporárias obtidas pela API AssumeRole, válidas por 36 horas. Permitem acessar outros serviços da Alibaba Cloud sem incorporar um par de AccessKey. Veja Campos de Credentials e Conceder permissões ao Function Compute para acessar outros serviços da Alibaba Cloud. |
|
|
|
Metadados da função invocada. Consulte Campos de FunctionMeta. |
|
|
|
Metadados do serviço. Consulte Campos de ServiceMeta. |
|
|
String |
ID da região, como |
|
|
String |
ID da conta Alibaba Cloud proprietária da função. |
Campos de Credentials
|
Campo |
Descrição |
|
|
AccessKey ID temporário. |
|
|
AccessKey Secret temporário. |
|
|
Token de segurança. |
Ao atribuir uma função RAM a uma função, o Function Compute obtém credenciais temporárias pela API AssumeRole. Essas credenciais valem por 36 horas e permitem que a função acesse outros serviços da Alibaba Cloud sem um par de AccessKey incorporado.
Campos de FunctionMeta (Python 3.10, 3.9 e 3.6)
|
Campo |
Descrição |
|
|
Nome da função. |
|
|
Ponto de entrada do handler. |
|
|
Memória alocada à função, em MB. |
|
|
Tempo máximo de execução, em segundos. |
Campos de ServiceMeta
|
Campo |
Descrição |
|
|
Nome do projeto do Simple Log Service. |
|
|
Nome do Logstore do Simple Log Service. |
|
|
Versão ou alias do serviço especificado na invocação da função. |
|
|
Versão do serviço efetivamente invocada. |
O campoqualifierrepresenta a versão ou alias da solicitação de invocação;version_idindica a versão realmente executada. Eles diferem quando um alias resolve para uma versão específica.
Definição da classe 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
Exemplo
Consulte Exemplo 2: Leitura e gravação de recursos do OSS usando um par de AccessKey temporário.