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

Function Compute:Python ハンドラ

最終更新日:Apr 21, 2026

Python ハンドラを使用して、受信イベントを処理し、ビジネスロジックを実行できます。 このトピックでは、Python ハンドラの概念と構造について説明し、例を示します。

ハンドラとは

FC 関数のハンドラは、リクエストを処理する機能コード内のメソッドです。お客様の FC 関数が呼び出されると、Function Compute は、指定されたハンドラを実行してリクエストを処理します。ハンドラは、Function Compute コンソールハンドラー 設定で設定できます。

Python の FC 関数では、ハンドラは filename.method_name の形式になります。 たとえば、ファイル名が main.py で、メソッド名が handler の場合、ハンドラは main.handler になります。

FC 関数の作成の詳細については、「イベントトリガー関数の作成」をご参照ください。

ハンドラの構成は、Function Compute の構成仕様に準拠する必要があります。 構成仕様はハンドラタイプによって異なります。

ハンドラのシグネチャ

次のコードは、基本的なハンドラのシグネチャを示しています。

def handler(event, context):
    return 'hello world'

ハンドラのシグネチャには、次のパラメーターが含まれます。

  • handler: メソッドの名前です。これは、Function Compute コンソールハンドラー 設定を使用して設定するハンドラと一致させる必要があります。たとえば、FC のハンドラを main.handler に設定した場合、Function Computehandler メソッドを main.py で定義されているとおりにロードし、handler 関数を実行します。

  • event:関数に渡されるデータを含むパラメーター。 Python 2.7 ランタイムでは文字列ですが、Python 3 ランタイムではバイト列です。

  • context:呼び出しに関する FC の情報を提供するオブジェクト。

説明

HTTP トリガーまたはカスタムドメイン名を使用して関数にアクセスする場合は、HTTP レスポンスを定義する前にリクエスト構造体を取得してください。 詳細については、「HTTP トリガーを使用した関数の呼び出し」をご参照ください。

例 1:JSON 形式のイベントの解析

サンプルコード

Function Compute は、JSON 形式のイベントのコンテンツを関数に直接渡します。 このコンテンツはコードで解析する必要があります。 次のサンプルコードは、JSON 形式のイベントを解析する方法を示しています。

# -*- coding: utf-8 -*-
import json
def handler(event, context):
    evt = json.loads(event)
    return evt['key']

前提条件

イベントトリガー関数の作成

操作手順

  1. Function Compute コンソールにログインします。 左側のナビゲーションウィンドウで、関数管理 > 関数を選択します。

  2. トップナビゲーションバーでリージョンを選択し、[関数] ページで目的の関数をクリックします。

  3. 関数詳細ページで、コード タブをクリックします。コードエディタにサンプルコードを入力し、デプロイメントコード をクリックします。

    重要

    サンプルコードでは、ハンドラは index.py 内の handler メソッドです。 ご利用の関数のハンドラ構成が異なる場合は、それに応じてファイル名とメソッド名を更新してください。

  4. コード タブで、関数のテスト の横にある矢印アイコン down をクリックして テストパラメーターの設定 を選択し、次のサンプルパラメーターを入力してから OK をクリックします。

    {
      "key": "value"
    }
  5. 関数のテスト をクリックします。

    関数が実行されると、期待されるレスポンスは value です。

例 2:OSS リソースへの安全なアクセス

Python 3.12 のサンプルコード

Python 3.12 ランタイムでは、`credentials` フィールドがコンテキストから削除されました。 代わりに、ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN 環境変数を使用して Object Storage Service (OSS) にアクセスできます。 次のコードに例を示します。 詳細については、「AccessKey の作成」および「AssumeRole」をご参照ください。

import json
import oss2
import os

def handler(event, context):
    evt = json.loads(event)
    auth = oss2.StsAuth(os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), os.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"))
    bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket'])
    bucket.put_object(evt['objectName'], evt['message'])
    return 'success'

Python 3.10 のサンプルコード

Object Storage Service が提供する Function Compute を使用して OSS にアクセスできます。以下にコードの例を示します。

import json
import oss2

def handler(event, context):
    evt = json.loads(event)
    creds = context.credentials
    # do not forget security_token
    auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
    bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket'])
    bucket.put_object(evt['objectName'], evt['message'])
    return 'success'

サンプルコードでは、creds = context.credentials は、context オブジェクトから一時的な AccessKey ペアを取得します。 この方法により、シークレットなどの機密情報をコードにハードコーディングすることを回避できます。

重要

サービスに割り当てられたロールに OSS へのアクセス権限があることを確認してください。 Resource Access Management (RAM) コンソールにログインして、ロールに必要な権限を付与できます。

前提条件

イベントトリガー関数の作成

操作手順

  1. Function Compute コンソールにログインします。 左側のナビゲーションウィンドウで、関数管理 > 関数を選択します。

  2. トップナビゲーションバーでリージョンを選択し、[関数] ページで対象の関数をクリックします。

  3. 関数詳細ページでコードタブをクリックし、コードエディタにサンプルコードを入力してからデプロイメントコードをクリックします。

    重要

    サンプルコードでは、ハンドラは index.py 内の handler メソッドです。 ご利用の関数のハンドラ構成が異なる場合は、それに応じてファイル名とメソッド名を更新してください。

  4. コード タブで、関数のテスト の横にある矢印アイコン down をクリックし、テストパラメーターの設定 を選択します。次のサンプルパラメーターを入力し、OK をクリックします。

    {
      "endpoint": "http://oss-cn-shenzhen-internal.aliyuncs.com",
      "bucket": "oss-********",
      "objectName": "oss-test-object",
      "message": "oss-test-content"
    }
  5. 関数のテスト をクリックします。

    関数が実行されると、期待されるレスポンスは success です。

例 3:外部コマンドの呼び出し

Python 関数は、fork プロセスを作成して外部コマンドを呼び出すこともできます。 たとえば、subprocess モジュールを使用して Linux コマンド ls -l を呼び出し、現在のディレクトリ内のファイルを一覧表示できます。 次のコードに例を示します。

import os
import subprocess

def handler(event, context):
    ret = subprocess.check_output(['ls', "-l"])
    return ret

例 4:HTTP トリガーによる関数の呼び出し

サンプルコード

HTTP トリガー呼び出しのリクエストとレスポンスのペイロード形式については、「HTTP トリガーを使用した関数の呼び出し」をご参照ください。

# -*- coding: utf-8 -*-
import logging
import json
import base64

def handler(event, context):
    logger = logging.getLogger()
    logger.info("receive event: %s", event)

    try:
        event_json = json.loads(event)
    except:
        return "The request did not come from an HTTP Trigger because the event is not a json string, event: {}".format(event)
    
    if "body" not in event_json:
        return "The request did not come from an HTTP Trigger because the event does not include the 'body' field, event: {}".format(event)
    req_body = event_json['body']
    if 'isBase64Encoded' in event_json and event_json['isBase64Encoded']:
        req_body = base64.b64decode(event_json['body']).decode("utf-8")

    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'text/plain'},
        'isBase64Encoded': False,
        'body': req_body
    }

前提条件

この例では、Python ランタイムで構成され、サンプルコードに基づいた HTTP トリガー関数が必要です。 詳細については、「イベントトリガー関数の作成」および「HTTP トリガーの設定」をご参照ください。

操作手順

  1. Function Compute コンソールにログインします。 左側のナビゲーションウィンドウで、関数管理 > 関数を選択します。

  2. 上部のナビゲーションバーでリージョンを選択し、[関数] ページで対象の関数をクリックします。

  3. 関数の詳細ページで、[トリガー] タブをクリックして、HTTP トリガーのパブリックエンドポイントを見つけます。

  4. 次の curl コマンドを実行して関数を呼び出します。

    curl -i "https://test-python-ipgrwr****.cn-shanghai.fcapp.run" -d 'Hello fc3.0'

    上記のコマンドで、https://test-python-ipgrwr****.cn-shanghai.fcapp.run は HTTP トリガーのパブリックエンドポイントです。

    重要
    • HTTP トリガーの 認証方法認証不要 に設定されている場合、Postman や curl などのツールを直接使用して関数を呼び出すことができます。 詳細については、このセクションの「手順」をご参照ください。

    • 認証方法署名認証[JWT 認証]、または [Bearer 認証] に設定されている場合、対応する認証方式を使用して関数を呼び出す必要があります。 詳細については、「認証と権限付与」をご参照ください。

    次のレスポンスが返されます。

    HTTP/1.1 200 OK
    Content-Disposition: attachment
    Content-Length: 12
    Content-Type: application/json
    X-Fc-Request-Id: 1-64f7449a-127fbe39cd7681596e33ebad
    Date: Tue, 05 Sep 2023 15:09:14 GMT
    
    Hello fc3.0

考えられるエラー

この例のサンプルコードは、HTTP トリガーまたはカスタムドメイン名によって呼び出されるように設計されています。 API 呼び出しを介して関数を呼び出し、テストパラメーターが HTTP トリガーのリクエスト形式に準拠していない場合、エラーが発生します。

例えば、Function Compute コンソールで、テストイベントを "Hello, FC!" に設定し、関数のテスト をクリックすると、関数は次の応答を返します。

The request did not come from an HTTP Trigger, event: "Hello, FC!"