このトピックでは、Python環境のイベントハンドラーの構造について説明し、Pythonのイベントハンドラーの例を示します。
イベントハンドラーの署名Signatures for event handlers
次のサンプルコードでは、イベントハンドラーの署名について説明します。
def handler(event, context):
return 'hello world'
パラメーターの説明:
handler
: リクエストの処理に使用するメソッドの名前。 このメソッドは、Function ComputeコンソールのRequest Handlerパラメーターに指定された値に対応します。 たとえば、Function Compute関数に設定されたハンドラーがmain.handler
の場合、function Computeはmain.py
で定義されているハンドラー
関数を読み込み、ハンドラー
関数から関数を実行します。event
: 関数を呼び出すときに渡すパラメーター。 Python 2.7ランタイム環境では、このパラメーターの値はSTRING型です。 Python 3ランタイム環境では、このパラメーターの値はBYTES型です。context
: Function Compute関数が呼び出されたときに提供されるランタイムコンテキスト。
例1: JSON形式のパラメーターの解析
サンプルコード
Function Computeは、設定したJSON形式のパラメーターを通過します。コード内のパラメーターを解析する必要があります。 次のサンプルコードは、JSON形式のイベントを解析する方法の例を示しています。
# -*- 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: 安全な方法で一時的なAccessKeyペアを使用したOSSリソースの読み取りと書き込み
サンプルコード
Function Computeが提供する一時キーペアを使用して、Object Storage Service (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'
一時的なAccessKeyペアは、creds = context.credentials
のcontext
から取得できます。 これにより、秘密などの機密情報のハードエンコードが防止されます。
サービスに設定されているロールに、Object Storage service (OSS) にアクセスする権限があることを確認します。 Resource Access Management (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" }
[テスト関数] をクリックします。
関数の実行後、実行結果が返されます。 実行結果は
成功
です。
例3: 外部コマンドの実行
Pythonプログラムを使用して、外部コマンドを呼び出すfork
プロセスを作成できます。 たとえば、Linuxでサブプロセス
モジュールを使用してls -l
コマンドを呼び出すことができます。 現在のディレクトリ内のファイルが返されます。 次のサンプルコードは例を示しています。
import os
import subprocess
def handler(event, context):
ret = subprocess.check_output(['ls', "-l"])
return ret