本文介紹在函數計算中使用Python運行時開發代碼時,所涉及的Context(上下文)的相關概念和使用示例。
什么是上下文
當函數計算運行您的函數時,會將上下文對象傳遞到執行方法中。該對象包含有關調用、服務、函數、鏈路追蹤和執行環境等信息。
事件請求處理程序(Event Handler)和HTTP請求處理程序(HTTP Handler)都支持上下文對象作為傳入參數,且格式和內容相同。上下文對象主要提供了以下參數。
字段 | 類型 | 說明 |
request_id | String | 本次調用請求的唯一ID。您可以記錄該ID,當函數調用出現問題時方便查詢。 |
credentials | Credentials結構,包含以下字段:
| 函數計算服務通過扮演服務角色而獲取的一組臨時密鑰,其有效時間是36小時。您可以在代碼中使用 |
function | FunctionMeta結構,包含以下字段:
| 當前調用的函數的一些基本信息,例如函數名、函數入口、函數內存和超時時間。 |
service | ServiceMeta結構,包含以下字段:
| 當前調用的函數所在的服務信息,包含服務名稱、接入的日志服務SLS的Project和Logstore信息,以及服務的版本和別名信息。其中 |
region | String | 當前調用的函數所在地域ID,例如在華東2(上海)地域調用,則地域ID為cn-shanghai。詳細信息,請參見服務接入地址。 |
account_id | String | 函數所屬的阿里云賬號ID(主賬號ID)。 |
tracing | Tracing結構,包含以下字段:
| 鏈路追蹤相關參數。具體信息,請參考鏈路追蹤簡介。 |
關于上下文的具體信息,請參見如下格式。
# -*- 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 ServiceMeta:
def __init__(self, service_name, log_project, log_store, qualifier, version_id):
self.name = service_name
self.log_project = log_project
self.log_store = log_store
self.qualifier = qualifier
self.version_id = version_id
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
使用示例
關于上下文的使用示例,請參見示例二:通過臨時密鑰安全讀寫OSS的資源。
文檔內容是否對您有幫助?