イベント関数を作成して、Alibaba Cloud サービスによって生成されるさまざまなイベントを処理できます。このようなイベントには、Object Storage Service (OSS) へのファイルアップロードや、監視製品によってトリガーされるアラートなどが含まれますが、これらに限定されません。イベントの詳細については、「トリガーの概要」をご参照ください。イベント関数を実装する場合、イベントの統合と基盤となる計算リソースの管理はすべて Function Compute によって処理されるため、ビジネスロジックのみに集中できます。さらに、Function Compute はオンデマンドでインスタンスをプロビジョニングし、自動的にスケーリングし、イベント処理後にインスタンスを破棄して、実際に消費されたリソースに対してのみ課金されるようにします。
サンプルシナリオ
転送効率のために ZIP アップロードを受け入れる一方で、非圧縮ファイルを OSS に保存するという要件を考えてみましょう。この場合、ファイルを解凍して OSS に保存する自動プロセスが必要です。
従来のアプローチでは、OSS でのファイル変更を監視および処理するために複数のプログラムを構築および統合する必要があり、これらのプログラムのデプロイとメンテナンスも考慮する必要があります。一方、イベント関数を使用すると、解凍ロジックのみに集中できます。ファイルが OSS にアップロードされるたびに、事前に構成されたイベントトリガーは、イベントが指定された条件を満たしている場合、ロジックを自動的に呼び出します。処理後、計算リソースは自動的に解放され、コストが節約されます。
このトピックの以下の部分では、イベント関数の実装について説明します。
OSS アップロードイベントをシミュレートし、イベント関数をトリガーしてファイルを解凍し、Function Compute コンソールにファイル名やバケット情報などのファイルメタデータを出力します。このデモは実際の OSS リソースに依存しないため、OSS バケットを準備する必要はありません。
デモでは、以下の項目を体験します。
Function Compute コンソールでイベント関数を作成し、ハンドラを作成し、関数をテストするプロセス全体を完了する
Function Compute の実行環境や組み込みランタイムなどの主要な概念を理解する
ハンドラの
event
パラメータとcontext
パラメータについて学習する
前提条件
手順
1. 関数の種類を選択する
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] をクリックします。上部のナビゲーションバーで、関数を作成するリージョン (China (Hangzhou) など) を選択します。次に、[関数を作成] をクリックします。
[関数の作成] ページで、[イベント関数]をクリックします。[関数名]はカスタマイズできます。
2. ランタイムを選択する
Python
[ランタイム]で、[組み込みランタイム] > [python] > [python 3.10] を選択します。
イベント関数には組み込みランタイムを使用することをお勧めします。これは、組み込みランタイムには、他の Alibaba Cloud サービスからのイベントに応答するために必要な依存関係が含まれているためです。たとえば、組み込み Python ランタイムには、OSS へのアクセスに必要な oss2 モジュールが含まれています。詳細については、「概要 (Python)」をご参照ください。カスタムランタイムまたはカスタムコンテナランタイムを使用する場合は、必要な依存関係をインストールする必要があります。さまざまな種類のランタイムの比較については、「関数のランタイムの選択」をご参照ください。
Node.js
[ランタイム]で、[組み込みランタイム] > [node.js] > [node.js 20] を選択します。
イベント関数には組み込みランタイムを使用することをお勧めします。これは、組み込みランタイムには、他の Alibaba Cloud サービスからのイベントに応答するために必要な依存関係が含まれているためです。たとえば、組み込み Node.js ランタイムには、OSS へのアクセスに必要な ali-oss モジュールが含まれています。詳細については、「概要 (Node.js)」をご参照ください。カスタムランタイムまたはカスタムコンテナランタイムを使用する場合は、必要な依存関係をインストールする必要があります。さまざまな種類のランタイムの比較については、「関数のランタイムの選択」をご参照ください。
3. 関数を作成する
サンプルコード [hello, World!] を使用して関数を作成します。[詳細設定] と [環境変数] のデフォルト値を保持します。[作成]をクリックします。
イベント関数が作成されると、[コード] タブの WebIDE で生成されたサンプルコードを表示できます。次の図は、Python 3.10 ランタイムで生成されたコードを示しています。
図に示すように、ハンドラを含む関数テンプレートが自動的に生成されます。次の手順では、このテンプレートに基づいてビジネスコードを直接記述できます。
4. コードを変更してデプロイする
Python や Node.js などのインタプリタ型言語は、WebIDE 内でのコードの直接変更とデプロイをサポートしていますが、Java などのコンパイル型言語は、コードパッケージのローカルコンパイルのみを許可し、その後のアップロードを許可し、WebIDE 統合を欠いています。
Python
WebIDE で index.py を開き、現在のコードを次のコードに置き換え、[デプロイ]をクリックします。
Node.js
WebIDE で index.mjs を開き、現在のコードを次のコードに置き換え、[デプロイ]をクリックします。
5. 関数をテストする
OSS へのファイルアップロードが関数をトリガーすることをシミュレートするために、シミュレートされたイベントを定義し、それを使用して関数を呼び出します。
シミュレートされたイベントでのテストに加えて、実際の OSS イベントを使用して関数をトリガーすることもできます。詳細については、「高度な操作」をご参照ください。
シミュレートされたイベントを作成する: [関数の詳細] ページで、[コード] タブをクリックし、[関数のテスト] の横にあるドロップダウンアイコンをクリックして、ドロップダウンリストから [テストパラメータの構成] を選択します。[テストパラメータの構成] パネルで、[イベントテンプレート] ドロップダウンリストから [OSS] を選択します。実際の OSS イベントと同じ形式のシミュレートされたイベントが自動的に生成されます。
[イベント名] とイベントオブジェクトのパラメータ値 (OSS バケット名やファイル名など) をカスタマイズできます。[OK]をクリックします。
[関数のテスト]をクリックしてすぐに実行をトリガーします。実行後、[レスポンス] タブで結果を確認します。戻り値 0 は、イベントが正常に処理されたことを示します。[ログ出力]をクリックして、実行中に生成されたログ情報を表示します。
関数をテストするために、Function Compute はシミュレートされたイベントのコンテンツを
event
パラメータを介してhandler
に渡し、前の手順でデプロイしたコードを実行します。これには、event
パラメータの解析とファイルの処理が含まれます。
6. (オプション) リソースをクリアする
Function Compute は、実際に消費したリソースに基づいて課金されます。作成された関数は、使用された場合にのみ課金されます。OSS や NAS ファイルシステム (NAS) に保存されているデータなど、関数の呼び出し時に使用される他の Alibaba Cloud サービスまたはリソースに注意してください。
関数を削除するには、Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数]をクリックします。上部のナビゲーションバーで、リージョンを選択します。[関数] ページで、削除する関数を見つけ、 [アクション] 列の を選択します。表示されるダイアログボックスで、削除する関数がリソースにバインドされていないことを確認します。次に、[削除] をクリックします。
高度な操作
これで、Function Compute コンソールを使用してイベント関数を作成し、関数ハンドラを構成し、シミュレートされた event
を使用して関数をテストしました。詳細な構成については、ビジネス要件に基づいて次の高度な操作を参照してください。
トリガーを追加する:
OSS バケットがまだない可能性があることを考慮して、このトピックのデモでは、実際の OSS リソースに依存せずに、テストにシミュレートされた OSS イベントを使用しました。ただし、ビジネスで実際の OSS イベントを処理する場合は、関数に OSS トリガーを追加する必要があります。トリガーの追加の詳細については、「ネイティブ OSS トリガーを構成する」をご参照ください。
OSS に加えて、他のさまざまな Alibaba Cloud サービス (メッセージキューサービス、Tablestore、Simple Log Service など) からのイベントも Function Compute で関数の実行をトリガーできます。Function Compute でサポートされているトリガーの種類の詳細については、「トリガーの種類」をご参照ください。
依存関係を追加する: イベント処理の一般的な依存関係は Function Compute の各組み込みランタイムにすでに含まれていますが、特定のビジネス要件を満たしていない場合があります。この場合、最も簡単な解決策は、コードと追加の依存関係を ZIP ファイルにパッケージ化し、Function Compute にデプロイすることです。詳細な手順については、「コードパッケージをデプロイする」をご参照ください。関数の コールドスタート を軽減するためにコードパッケージのサイズを小さくする場合は、レイヤーを使用して依存関係を管理できます。詳細については、「カスタムレイヤーを作成する」をご参照ください。
ログを構成する: 関数のデバッグ、トラブルシューティング、セキュリティ監査を容易にするために、関数にログ機能を構成することをお勧めします。詳細な手順については、「ログ機能を構成する」をご参照ください。
参考資料
Function Compute コンソールを使用して関数を作成することに加えて、Serverless Devs を使用して関数を作成することもできます。詳細については、「クイックスタート」をご参照ください。
We recommend that you refer to the following hands-on tutorial to learn more about event functions: