すべてのプロダクト
Search
ドキュメントセンター

Function Compute:背景

最終更新日:Nov 11, 2024

このトピックでは、Function ComputeのPythonランタイムのコンテキストについて説明します。 このトピックでは、コンテキストの使用方法の例も示します。

コンテキストとは何ですか?

Function Computeが関数を実行すると、関数の実行に使用されるメソッドにコンテキストオブジェクトが渡されます。 コンテキストオブジェクトには、呼び出し、サービス、関数、、実行環境に関する情報が含まれます。

Python 3.12

次の表に、Python 3.12ランタイムのコンテキストオブジェクトでサポートされるパラメーターを示します。

パラメーター

タイプ

説明

request_id

String

リクエストの ID。 エラーが発生した場合のトラブルシューティング用のIDを記録できます。

関数

FunctionMeta構造体は、次のフィールドを含みます。

  • name

  • ハンドラー

  • メモリ

  • timeout

  • version_id

  • 修飾子

名前、ハンドラー、メモリ、タイムアウト期間、バージョン、エイリアスなど、呼び出された関数に関する基本情報。

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を記録できます。

資格情報

次のフィールドを含む資格情報構造体。

  • access_key_id

  • access_key_secret

  • security_token

サービスにリンクされたロールを引き受けることによってFunction Computeが取得する一時的なAccessKeyペア。 一時的なAccessKeyペアは36時間有効です。 コードで資格情報を使用して、Object Storage Service (OSS) などの関連サービスにアクセスできます。 これにより、AccessKeyペアを関数コードに記述することなく、サービスにアクセスできます。 詳細については、「他のAlibaba Cloudサービスへのアクセス権限付与」をご参照ください。

関数

FunctionMeta構造体は、次のフィールドを含みます。

  • name

  • ハンドラー

  • メモリ

  • timeout

関数の名前、ハンドラー、メモリ、タイムアウト期間など、呼び出された関数に関する基本情報。

service

ServiceMeta構造体は、次のフィールドを含みます。

  • log_project

  • log_store

  • 修飾子

  • version_id

関数が属するサービスに関する情報 (Simple Log serviceの名前、関連プロジェクト、Logstore、バージョン、サービスのエイリアスなど) 。 qualifierパラメーターは、関数を呼び出すときに指定されるサービスのバージョンまたはエイリアスを示します。 versionIdパラメーターは、実際に呼び出されるサービスのバージョンを示します。

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リソースの読み取りと書き込み」をご参照ください。