このトピックでは、Function ComputeのPythonランタイムのコンテキストについて説明します。 このトピックでは、コンテキストの使用方法の例も示します。
コンテキストとは何ですか?
Function Computeが関数を実行すると、関数の実行に使用されるメソッドにコンテキストオブジェクトが渡されます。 コンテキストオブジェクトには、呼び出し、サービス、関数、、実行環境に関する情報が含まれます。
Python 3.12
次の表に、Python 3.12ランタイムのコンテキストオブジェクトでサポートされるパラメーターを示します。
パラメーター | タイプ | 説明 |
request_id | String | リクエストの ID。 エラーが発生した場合のトラブルシューティング用のIDを記録できます。 |
関数 | FunctionMeta構造体は、次のフィールドを含みます。
| 名前、ハンドラー、メモリ、タイムアウト期間、バージョン、エイリアスなど、呼び出された関数に関する基本情報。 |
region | String | 関数が呼び出されるリージョンのID。 たとえば、関数が中国 (上海) リージョンで呼び出された場合、リージョンIDはcn-Shanghaiです。 詳細については、「エンドポイント」をご参照ください。 |
ロガー | String | 関数の実行中にログを記録します。 |
account_id | String | 関数が属するAlibaba CloudアカウントのID。 |
log_projectとlog_store | String | Simple Log Serviceのプロジェクトの名前。 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を記録できます。 |
資格情報 | 次のフィールドを含む資格情報構造体。
| サービスにリンクされたロールを引き受けることによってFunction Computeが取得する一時的なAccessKeyペア。 一時的なAccessKeyペアは36時間有効です。 コードで |
関数 | FunctionMeta構造体は、次のフィールドを含みます。
| 関数の名前、ハンドラー、メモリ、タイムアウト期間など、呼び出された関数に関する基本情報。 |
service | ServiceMeta構造体は、次のフィールドを含みます。
| 関数が属するサービスに関する情報 (Simple Log serviceの名前、関連プロジェクト、Logstore、バージョン、サービスのエイリアスなど) 。 |
region | String | 関数が呼び出されるリージョンのID。 たとえば、関数が中国 (上海) リージョンで呼び出された場合、リージョンIDはcn-Shanghaiです。 詳細については、「サービスエンドポイント」をご参照ください。 |
account_id | String | 関数が属するAlibaba Cloudアカウントの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
例:
コンテキストの使用方法の詳細については、「例2: 一時的なAccessKeyペアを使用したOSSリソースの読み取りと書き込み」をご参照ください。