Function Compute, her işleyiciye bir bağlam nesnesi iletir; bu nesne çağırma için istek kimliğini, işlev meta verilerini, bölgeyi ve günlük kaydediciyi sağlar.
Çalışma zamanı farkları
Python 3.12, önceki çalışma zamanlarından (3,10, 3,9, 3,6) farklı olarak bağlam nesnesini yeniden yapılandırır.
| Özellik | Python 3.12 | Python 3,10, 3,9, 3,6 |
|---|---|---|
credentials alanı |
Kaldırıldı. Ortam değişkenlerini kullanın. | Credentials yapısı olarak mevcuttur. |
service yapısı |
Kaldırıldı. log_project, log_store, qualifier ve version_id alanları FunctionMeta veya üst düzey bağlama taşındı. |
ServiceMeta yapısı olarak mevcuttur. |
logger alanı |
Bağlam nesnesinde mevcuttur. | Mevcut değildir. |
FunctionMeta alanları |
6 alan: name, handler, memory, timeout, version_id, qualifier. |
4 alan: name, handler, memory, timeout. |
Python 3.12
Bağlam özellikleri
| Özellik | Tür | Açıklama |
|---|---|---|
request_id |
String | Benzersiz istek tanımlayıcısı. Sorun giderme amacıyla kaydedin. |
function |
FunctionMeta |
Çağrılan işlev meta verileri. FunctionMeta alanları. |
region |
String | Bölge kimliği; örneğin Çin (Şanghay) için cn-shanghai. Uç noktalar. |
logger |
Logger | İşlev çalıştırması için günlük kaydedici. Başlangıçta None değerindedir; bir logging.Logger elde etmek için context.getLogger() yöntemini çağırın. |
account_id |
String | İşleve sahip olan Alibaba Cloud hesabının kimliği. |
log_project |
String | İşlevle ilişkili Simple Log Service proje adı. |
log_store |
String | İşlevle ilişkili Simple Log Service Logstore adı. |
FunctionMeta alanları (Python 3.12)
| Alan | Açıklama |
|---|---|
name |
İşlev adı. |
handler |
İşleyici giriş noktası. |
memory |
İşleve ayrılan bellek (MB cinsinden). |
timeout |
Maksimum yürütme süresi (saniye cinsinden). |
version_id |
Çağrılan işlevin sürümü. |
qualifier |
İşlev çağrılırken belirtilen sürüm veya takma ad. |
Kimlik bilgisi geçişi
Python 3.12'de credentials alanı kaldırılmıştır. Bunun yerine ortam değişkenlerini kullanın.
Diğer Alibaba Cloud hizmetlerine erişmek için aşağıdaki ortam değişkenlerini kullanın:
| Ortam değişkeni | Açıklama |
|---|---|
ALIBABA_CLOUD_ACCESS_KEY_ID |
Geçici AccessKey ID. |
ALIBABA_CLOUD_ACCESS_KEY_SECRET |
Geçici AccessKey Secret. |
ALIBABA_CLOUD_SECURITY_TOKEN |
Güvenlik belirteci. |
Ortam değişkenlerini yapılandırın.
Önce ve sonra karşılaştırması:
# 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']
Bağlam sınıfı tanımı
# -*- 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 ve 3,6
Bağlam özellikleri
| Özellik | Tür | Açıklama |
|---|---|---|
request_id |
String | Benzersiz istek tanımlayıcısı. Sorun giderme amacıyla kaydedin. |
credentials |
Credentials |
AssumeRole API'sinden alınan ve 36 saat geçerli olan geçici kimlik bilgileri. Bir AccessKey çiftini gömmeden diğer Alibaba Cloud hizmetlerine erişin. Credentials alanları. Function Compute'a diğer Alibaba Cloud hizmetlerine erişim izni verin. |
function |
FunctionMeta |
Çağrılan işlev meta verileri. FunctionMeta alanları. |
service |
ServiceMeta |
Hizmet meta verileri. ServiceMeta alanları. |
region |
String | Bölge kimliği; örneğin Çin (Şanghay) için cn-shanghai. Uç noktalar. |
account_id |
String | İşleve sahip olan Alibaba Cloud hesabının kimliği. |
Credentials alanları
| Alan | Açıklama |
|---|---|
access_key_id |
Geçici AccessKey ID. |
access_key_secret |
Geçici AccessKey Secret. |
security_token |
Güvenlik belirteci. |
Bir işleve bir RAM rolü atadıktan sonra, Function Compute AssumeRole API'si aracılığıyla geçici kimlik bilgileri alır. Bu kimlik bilgileri 36 saat boyunca geçerlidir ve işlevin gömülü bir AccessKey çifti olmadan diğer Alibaba Cloud hizmetlerine erişmesine olanak tanır.
FunctionMeta alanları (Python 3,10, 3,9 ve 3,6)
| Alan | Açıklama |
|---|---|
name |
İşlev adı. |
handler |
İşleyici giriş noktası. |
memory |
İşleve ayrılan bellek (MB cinsinden). |
timeout |
Maksimum yürütme süresi (saniye cinsinden). |
ServiceMeta alanları
| Alan | Açıklama |
|---|---|
log_project |
Simple Log Service proje adı. |
log_store |
Simple Log Service Logstore adı. |
qualifier |
İşlev çağrılırken belirtilen hizmetin sürümü veya takma adı. |
version_id |
Gerçekte çağrılan hizmetin sürümü. |
qualifier, çağrı isteğindeki sürüm veya takma addır;version_idise gerçekte yürütülen sürümdür. Bir takma ad belirli bir sürüme çözümlendiğinde bu iki değer farklılık gösterir.
Bağlam sınıfı tanımı
# -*- 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
Örnek
Örnek 2: Geçici bir AccessKey çifti kullanarak OSS kaynaklarını okuma ve yazma.