全部產品
Search
文件中心

Function Compute:上下文

更新時間:Oct 17, 2024

本文介紹在Function Compute中使用Python運行時開發代碼時,所涉及的Context(上下文)的相關概念和使用樣本。

什麼是上下文

Function Compute運行您的函數時,會將內容物件傳遞到執行方法中。該對象包含有關調用、服務、函數和執行環境等資訊。

Python 3.12

Python 3.12運行時內容物件主要提供了以下參數。

欄位

類型

說明

request_id

String

本次調用請求的唯一ID。您可以記錄該ID,當函數調用出現問題時方便查詢。

function

FunctionMeta結構,包含以下欄位:

  • name

  • handler

  • memory

  • timeout

  • version_id

  • qualifier

當前調用的函數的一些基本資料,例如函數名、函數入口、函數記憶體、逾時時間以及版本和別名資訊。

region

String

當前調用的函數所在地區ID,例如在華東2(上海)地區調用,則地區ID為cn-shanghai。詳細資料,請參見服務接入地址

logger

String

函數執行過程中記錄日誌資訊。

account_id

String

函數所屬的阿里雲帳號ID(主帳號ID)。

log_project、log_store

string

接入的Log ServiceSLS的Project和。Logstore資訊

關於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 = region

Python 3.10、Python 3.9和Python 3.6

Python 3.10、Python 3.9和Python 3.6內容物件主要提供了以下參數。

欄位

類型

說明

request_id

String

本次調用請求的唯一ID。您可以記錄該ID,當函數調用出現問題時方便查詢。

credentials

Credentials結構,包含以下欄位:

  • access_key_id

  • access_key_secret

  • security_token

Function Compute服務通過扮演服務角色而擷取的一組臨時密鑰,其有效時間是36小時。您可以在代碼中使用Credentials去訪問相應的服務例如OSS,這就避免了您把自己的AccessKey資訊編碼在函數代碼裡。詳細資料,請參見授予Function Compute訪問其他雲端服務的許可權

function

FunctionMeta結構,包含以下欄位:

  • name

  • handler

  • memory

  • timeout

當前調用的函數的一些基本資料,例如函數名、函數入口、函數記憶體和逾時時間。

service

ServiceMeta結構,包含以下欄位:

  • log_project

  • log_store

  • qualifier

  • version_id

當前調用的函數所在的服務資訊,包含接入的Log ServiceSLS的Project和Logstore資訊,以及版本和別名資訊。其中qualifier表示調用函數時指定的服務版本或別名,versionId表示實際調用的服務版本。

region

String

當前調用的函數所在地區ID,例如在華東2(上海)地區調用,則地區ID為cn-shanghai。詳細資料,請參見服務接入地址

account_id

String

函數所屬的阿里雲帳號ID(主帳號ID)。

關於內容相關的具體資訊,請參見如下格式。

# -*- 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

使用樣本

關於內容相關的使用樣本,請參見樣本二:通過臨時密鑰安全讀寫OSS的資源