このトピックでは、Function Compute の Python 関数におけるイベントハンドラの構造について説明し、一般的なシナリオ(JSON イベントの解析、一時的な認証情報による Object Storage Service (OSS) へのアクセス、外部コマンドの実行)のコード例を提供します。
ハンドラの署名
すべての Python イベントハンドラは、次の署名を使用します。
def handler(event, context):
return 'hello world'| パラメータ | 説明 |
|---|---|
handler | 受信リクエストを処理するメソッドです。この名前は、Function Compute コンソールで構成された リクエストハンドラmain.handler に設定されている場合、Function Compute は main.py をロードし、そのファイル内で定義された handler 関数を呼び出します。 |
event | 関数が呼び出された際に渡される入力です。Python 2.7 では、値は str(STRING)型です。Python 3 では、値は bytes(BYTES)型です。 |
context | 呼び出し時に提供されるランタイムコンテキストです。これを使用して、一時的な認証情報やその他のランタイムメタデータにアクセスできます。 |
例 1:JSON イベントの解析
Function Compute はイベントデータを生のバイト列として渡します。個々のフィールドにアクセスする前に、json.loads() を使用してペイロードを解析してください。
# -*- coding: utf-8 -*-
import json
def handler(event, context):
evt = json.loads(event)
return evt['key']前提条件
作業を開始する前に、次のものがあることを確認してください。
関数のテスト
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、サービスと関数 をクリックします。
上部のナビゲーションバーでリージョンを選択します。サービス ページで、対象のサービスをクリックします。
関数 ページで、対象の関数名をクリックします。
関数の詳細 ページで、コード タブをクリックし、サンプルコードをコードエディタに貼り付けてから、デプロイ をクリックします。
重要このサンプルコードでは、ハンドラは
index.py内のhandlerメソッドです。関数のハンドラ構成が異なる場合は、それに応じてコードを更新してください。「コード」タブで、[コード] の横にある
アイコンをクリックし、ドロップダウンリストから [テスト関数] の横にある [テストパラメーターの設定] を選択し、以下のテスト入力を入力してから、[OK] をクリックします。{ "key": "value" }関数のテスト をクリックします。
実行結果は value です。
例 2:一時的な認証情報を使用した OSS へのアクセス
context.credentials から取得した一時的な認証情報を使用して、Object Storage Service (OSS) にアクセスします。これにより、AccessKey ペアなどの機密情報をコード内にハードコードする必要がなくなります。
import json
import oss2
def handler(event, context):
evt = json.loads(event)
creds = context.credentials
# 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'context.credentials には次の 3 つのフィールドがあります。
| フィールド | 説明 |
|---|---|
access_key_id | 一時的な AccessKey ID |
access_key_secret | 一時的な AccessKey Secret |
security_token | Security Token Service (STS) トークン — oss2.StsAuth |
関数に割り当てられたロールには、Object Storage Service (OSS) へのアクセス権限が必要です。Resource Access Management (RAM) コンソールで権限を付与してください。
前提条件
作業を開始する前に、次のものがあることを確認してください。
RAM コンソールを通じて、関数のロールに OSS へのアクセス権限が付与されていること
関数のテスト
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、サービスと関数 をクリックします。
上部のナビゲーションバーでリージョンを選択します。サービス ページで、対象のサービスをクリックします。
関数 ページで、対象の関数名をクリックします。
関数の詳細 ページで、コード タブをクリックし、サンプルコードをコードエディタに貼り付けてから、デプロイ をクリックします。
重要このサンプルコードでは、ハンドラは
index.py内のhandlerメソッドです。関数のハンドラ構成が異なる場合は、それに応じてコードを更新してください。[コード] タブで、[関数をテスト] の横にある
アイコンをクリックし、ドロップダウンリストから [テストパラメーターの設定] を選択し、次のテスト入力を入力して、[OK] をクリックします。{ "endpoint": "http://oss-cn-shenzhen-internal.aliyuncs.com", "bucket": "oss-********", "objectName": "oss-test-object", "message": "oss-test-content" }関数のテスト をクリックします。
実行結果は success です。
例 3:外部コマンドの実行
Python の subprocess モジュールを使用して、関数から Linux シェルコマンドを実行します。以下の例では、ls -l を実行し、ディレクトリの一覧を返します。
import os
import subprocess
def handler(event, context):
ret = subprocess.check_output(['ls', "-l"])
return retsubprocess.check_output() はコマンドを実行し、完了を待って出力をバイト列として返します。コマンドがゼロ以外のステータスで終了した場合、CalledProcessError が発生します。