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

Function Compute:イベントハンドラー

最終更新日:Aug 30, 2024

このトピックでは、PHPランタイムのイベントハンドラーの構造と例について説明します。

イベントハンドラーの署名Signatures for event handlers

次のサンプルコードでは、イベントハンドラーの署名について説明します。

<?php

function handler($event, $context) {
  return 'hello world';
}

パラメーターの説明:

  • handler: メソッドの名前。 このメソッドは、Function ComputeコンソールRequest Handlerパラメーターに指定された値に対応します。 たとえば、Function Compute関数のRequest Handlerパラメーターの値がindex.handlerの場合、function Computeindex.phpで定義されているhandler関数を読み込み、handler関数から関数を実行します。

  • $event: 関数を呼び出すときに渡されるパラメーター。 このパラメーターの値はString型です。 PHP関数は、指定されたeventパラメーターを直接使用します。 ビジネス要件に基づいて、関数内のイベントを解析できます。 たとえば、入力データがJSON文字列の場合、JSON文字列を配列に変換できます。

  • $context: リクエストIDや一時的なID資格情報など、関数のランタイム情報。 コードでランタイム情報を使用できます。

例1: JSON形式のパラメーターの解析

サンプルコード

Function Computeが設定したJSON形式のパラメーターを渡す場合、コード内のパラメーターを解析する必要があります。 次のサンプルコードは、JSON形式のイベントを解析する方法の例を示しています。

<?php

function handler($event, $context) {
  $v = json_decode($event, true);
  var_dump($v['key1']);
  var_dump($v['key2']);
  var_dump($v['key3']);
  return $v;
}

前提条件

実行環境がPHPの関数が作成されます。 詳細については、「関数の作成」をご参照ください。

手順

  1. Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。

  3. [関数] ページで、目的の関数の名前をクリックします。

  4. [関数の詳細] ページで、[コード] タブをクリックし、コードエディターに前述のサンプルコードを入力し、[デプロイ] をクリックします。

    説明

    上記のサンプルコードでは、ハンドラーはindex.phphandlerメソッドです。 別のハンドラーパラメーターを指定する場合は、実際のファイルとメソッドを使用します。

  5. [コード] タブで、[テスト機能] の横にあるdownアイコンをクリックし、ドロップダウンリストから [テストパラメータの設定] を選択し、次のテストパラメータを入力して、[OK] をクリックします。

    {
      "key1": "value1",
      "key2": "value2",
      "key3": {
        "v1": true,
        "v2": "bye",
        "v3": 1234
      }
    }
  6. [テスト関数] をクリックします。

    実行が完了すると、関数によってJSON形式のコンテンツが返され、key1key2、およびkey3のコンテンツがログ出力に出力されたことが応答に表示されます。

例2: 一時的なAccessKeyペアを使用したOSS (Object Storage Service) リソースの読み取りと書き込み

サンプルコード

Function Computeが提供する一時キーペアを使用して、Object Storage Service (OSS) にアクセスできます。 例:

<?php

use OSS\OssClient;
use OSS\Core\OssException;

function handler($event, $context) {
    /*
      The AccessKey pair of an Alibaba Cloud account can be used to access all API operations. Using these credentials to perform operations in Function Compute is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. 
      We recommend that you do not save the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources under your account may be compromised. 
      In this example, the AccessKey ID and AccessKey secret are obtained from the context. 
    */
    $creds = $context["credentials"];
    $accessKeyId = $creds["accessKeyId"];
    $accessKeySecret = $creds["accessKeySecret"];
    $securityToken = $creds["securityToken"];
    $endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";
    $bucket= "randombucket";
    $object = "exampledir/index.php";
    $filePath = "/code/index.php";

    try{
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
        $ossClient->uploadFile($bucket, $object, $filePath);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return $e->getMessage();
    }
    return 'hello world';
}

説明:

  • $creds = $context["credentials"]: $contextから一時的なAccessKeyペアを取得します。 これにより、パスワードなどの機密情報のハードエンコードが防止されます。

  • 上記のコードは、/code/index.phpファイルがOSSのrandombucketexampledirディレクトリにアップロードされることを示しています。

    説明

    endpointbucketobjectfilePathを実際のリソース名に置き換えます。

前提条件

手順

  1. Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。

  3. [関数] ページで、目的の関数の名前をクリックします。

  4. [関数の詳細] ページで、[コード] タブをクリックし、コードエディターに前述のサンプルコードを入力し、[デプロイ] をクリックします。

    説明

    上記のサンプルコードでは、ハンドラーはindex.phphandlerメソッドです。 別のハンドラーパラメーターを指定する場合は、実際のファイルとメソッドを使用します。

  5. [テスト関数] をクリックします。

    関数の実行後、実行結果hello worldが返されます。

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

PHPプログラムを使用して、外部コマンドを呼び出すフォークプロセスを作成できます。

PHP関数でC ++ やGoでコンパイルされたシェルスクリプトや実行可能ファイルなど、PHP以外のツールを使用する場合は、ツールとコードを一緒にパッケージ化してアップロードし、外部コマンドを実行してこれらのツールを使用できます。 次の方法で外部コマンドを実行できます。 exec, システム、および shell_execを実行します。

次のサンプルコードは、Linuxでls -haltコマンドを呼び出し、現在のディレクトリにあるファイルの詳細を生成するために使用されます。

<?php

function handler($event, $context) {
  return shell_exec("ls -halt /code");
}