Function Compute transmet un objet de contexte à chaque gestionnaire, fournissant l'ID de requête, les métadonnées de la fonction, la région et le logger pour l'appel.
Différences entre les environnements d'exécution
Python 3.12 restructure l'objet de contexte par rapport aux environnements d'exécution précédents (3,10, 3,9, 3,6).
| Fonctionnalité | Python 3.12 | Python 3.10, 3,9, 3,6 |
|---|---|---|
Champ credentials |
Supprimé. Utilisez des variables d'environnement. | Disponible sous forme de structure Credentials. |
Structure service |
Supprimée. Les champs log_project, log_store, qualifier et version_id ont été déplacés vers FunctionMeta ou vers le contexte de niveau supérieur. |
Disponible sous forme de structure ServiceMeta. |
Champ logger |
Disponible sur l'objet de contexte. | Non disponible. |
Champs FunctionMeta |
6 champs : name, handler, memory, timeout, version_id, qualifier. |
4 champs : name, handler, memory, timeout. |
Python 3.12
Propriétés du contexte
| Propriété | Type | Description |
|---|---|---|
request_id |
String | Identifiant unique de la requête. À enregistrer pour le dépannage. |
function |
FunctionMeta |
Métadonnées de la fonction appelée. Champs FunctionMeta. |
region |
String | ID de la région, par exemple cn-shanghai pour Chine (Shanghai). Endpoints. |
logger |
Logger | Logger pour l'exécution de la fonction. Initialement None ; appelez context.getLogger() pour obtenir un logging.Logger. |
account_id |
String | ID du compte Alibaba Cloud propriétaire de la fonction. |
log_project |
String | Nom du projet Simple Log Service associé à la fonction. |
log_store |
String | Nom du Logstore Simple Log Service associé à la fonction. |
Champs FunctionMeta (Python 3.12)
| Champ | Description |
|---|---|
name |
Nom de la fonction. |
handler |
Point d'entrée du gestionnaire. |
memory |
Mémoire allouée à la fonction, en Mo. |
timeout |
Temps d'exécution maximal, en secondes. |
version_id |
Version de la fonction appelée. |
qualifier |
Version ou alias spécifié lors de l'appel de la fonction. |
Migration des identifiants
Le champ credentials est supprimé dans Python 3.12. Utilisez plutôt des variables d'environnement.
Pour accéder à d'autres services Alibaba Cloud, utilisez ces variables d'environnement :
| Variable d'environnement | Description |
|---|---|
ALIBABA_CLOUD_ACCESS_KEY_ID |
ID AccessKey temporaire. |
ALIBABA_CLOUD_ACCESS_KEY_SECRET |
Secret AccessKey temporaire. |
ALIBABA_CLOUD_SECURITY_TOKEN |
Jeton de sécurité. |
Configurer des variables d'environnement.
Comparaison avant/aprè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']
Définition de la classe Context
# -*- 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 et 3,6
Propriétés du contexte
| Propriété | Type | Description |
|---|---|---|
request_id |
String | Identifiant unique de la requête. À enregistrer pour le dépannage. |
credentials |
Credentials |
Identifiants temporaires obtenus via l'API AssumeRole, valables pendant 36 heures. Accédez à d'autres services Alibaba Cloud sans intégrer de paire AccessKey. Champs Credentials. Accorder à Function Compute des autorisations pour accéder à d'autres services Alibaba Cloud. |
function |
FunctionMeta |
Métadonnées de la fonction appelée. Champs FunctionMeta. |
service |
ServiceMeta |
Métadonnées du service. Champs ServiceMeta. |
region |
String | ID de la région, par exemple cn-shanghai pour Chine (Shanghai). Endpoints. |
account_id |
String | ID du compte Alibaba Cloud propriétaire de la fonction. |
Champs Credentials
| Champ | Description |
|---|---|
access_key_id |
ID AccessKey temporaire. |
access_key_secret |
Secret AccessKey temporaire. |
security_token |
Jeton de sécurité. |
Après avoir attribué un rôle RAM à une fonction, Function Compute obtient des identifiants temporaires via l'API AssumeRole. Ces identifiants sont valables pendant 36 heures et permettent à la fonction d'accéder à d'autres services Alibaba Cloud sans paire AccessKey intégrée.
Champs FunctionMeta (Python 3.10, 3,9 et 3,6)
| Champ | Description |
|---|---|
name |
Nom de la fonction. |
handler |
Point d'entrée du gestionnaire. |
memory |
Mémoire allouée à la fonction, en Mo. |
timeout |
Temps d'exécution maximal, en secondes. |
Champs ServiceMeta
| Champ | Description |
|---|---|
log_project |
Nom du projet Simple Log Service. |
log_store |
Nom du Logstore Simple Log Service. |
qualifier |
Version ou alias du service spécifié lors de l'appel de la fonction. |
version_id |
Version du service effectivement appelée. |
qualifiercorrespond à la version ou à l'alias issu de la requête d'appel ;version_idreprésente la version réellement exécutée. Ils diffèrent lorsqu'un alias résout une version spécifique.
Définition de la classe Context
# -*- 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
Exemple
Exemple 2 : Lire et écrire des ressources OSS à l'aide d'une paire AccessKey temporaire.