イベント関数は、Object Storage Service (OSS) へのファイルアップロードや監視サービスによってトリガーされるアラートなど、クラウドサービスからのさまざまなイベントに応答できます。イベント関数を使用する場合、処理ロジックを記述するだけでよく、イベントの統合や基盤となるコンピューティングリソースを管理する必要はありません。Function Compute は、必要な場合にのみインスタンスを実行し、自動的にスケーリングし、イベントが処理された後にインスタンスを破棄します。課金対象は、使用したリソースのみです。
ユースケース
OSS にファイルを保存する必要がある状況を想定します。アップロードを高速化するために、まずファイルを ZIP 形式に圧縮します。しかし、使用したいのは ZIP アーカイブではなく、ファイルそのものです。これを実現するには、ファイルを解凍して OSS に保存し直す自動化されたプロセスが必要です。
従来のアプローチでは、OSS 内のファイルの変更を監視および処理するために、複数のプログラムを構築して統合する必要があります。また、これらのプログラムのデプロイとメンテナンスも必要です。イベント関数を使用することで、ファイル処理ロジックのみに集中できます。ファイルが OSS にアップロードされるたびにイベントが生成されます。イベントが指定した条件を満たすと、関数が自動的にトリガーされ、ハンドラーが実行されます。タスクが完了すると、Function Compute はコンピューティングリソースを自動的に解放し、コストを節約します。
OSS バケットをお持ちでない場合があるため、このチュートリアルでは、ハンズオン形式の例を用いてイベント関数の実装方法を説明します。
OSS ファイルのアップロードを模擬したイベントを作成します。このイベントは、イベント関数を呼び出してファイルを処理し、ファイル名やバケット名などの情報をコンソールに出力します。
このチュートリアルでは、以下の内容を学習します。
コンソールによるイベント関数の作成、ハンドラーの記述、関数のエンドツーエンドテスト
Function Compute のランタイムや組み込みランタイムといった主要な概念
ハンドラーパラメーターである
eventとcontext
前提条件
操作手順
ステップ1:関数の種類の選択
Function Computeコンソール にログインします。左側メニューで、 を選択します。上部メニューで、関数を作成するリージョンを選択し、関数を作成 をクリックし、プロンプトに従って イベント関数 を選択して作成します。
ステップ2:ランタイムの選択
Python
ランタイム環境 で、[組み込みランタイム] > [Python] > [Python 3.10] を選択します。
イベント関数には 組み込みランタイム の使用を推奨します。これは、組み込みランタイム には、他のクラウドサービスからのイベント (たとえば、Python の oss2 モジュール) に応答するために必要な依存関係が含まれているためです。詳細については、「環境の概要」をご参照ください。カスタムランタイム または カスタムコンテナランタイム を使用する場合は、依存関係をご自身でインストールする必要があります。ランタイムの詳細な比較については、「ランタイムの選択」をご参照ください。Node.js
ランタイム環境 で、[組み込みランタイム] > [Node.js] > [Node.js 20] を選択します。
イベント関数には 組み込みランタイム の使用を推奨します。これは、組み込みランタイム には、他のクラウドサービスからのイベント (たとえば、Node.js の ali-oss モジュール) に応答するために必要な依存関係が含まれているためです。詳細については、「環境の概要」をご参照ください。カスタムランタイム または カスタムコンテナランタイム を使用する場合は、依存関係をご自身でインストールする必要があります。ランタイムの詳細な比較については、「ランタイムの選択」をご参照ください。ステップ3:関数の作成
[Hello, world!] サンプルを選択して関数を作成します。詳細設定 はデフォルト値のままにし、作成 をクリックします。
関数が作成されたら、コード タブの WebIDE で生成されたサンプルコードを確認できます。以下は Python のサンプルコードです。
# -*- coding: utf-8 -*-
import logging
import json
# initializer 機能 (https://www.alibabacloud.com/help/document_detail/2513452.html) を有効にするには、
# 以下のように initializer 関数を実装してください。
# def initializer(context):
# logger = logging.getLogger()
# logger.info('initializing')
def handler(event, context):
# evt = json.loads(event)
logger = logging.getLogger()
logger.info('hello world')
return 'hello world'Hello, world! サンプルコードは、エントリポイントを持つ関数テンプレートを自動的に生成します。以降のステップでは、このテンプレートに基づいてビジネスコードを構築できます。
ステップ4:サンプルコードの変更とデプロイ
Java などのコンパイル言語は WebIDEをサポートしていません。ローカルでのコンパイルとコードパッケージのアップロードが必要です。
Python
コンソールの WebIDE で index.py を開き、既存のコードを次のコードに置き換えてから、デプロイメントコード をクリックします。
Node.js
コンソールの WebIDE で index.mjs を開き、既存のコードを次のコードに置き換えてから、デプロイメントコード をクリックします。
ステップ5:関数のテスト
OSS ファイルのアップロードによる関数のトリガーをシミュレートするために、模擬イベントを定義し、それを用いて関数をトリガーします。
模擬イベントを使用する代わりに、実際の OSS イベントを使用してテストとして関数をトリガーすることもできます。詳細については、「次のステップ」をご参照ください。
模擬イベントの作成:関数の詳細 ページで、コード タブをクリックします。関数のテスト の右側にあるドロップダウン矢印をクリックし、テストパラメーターの設定 を選択します。イベントテンプレート リストで [OSS] を選択します。コンソールは、実際の OSS イベントと同じ形式で模擬イベントを自動的に生成します。
イベント名 や、OSS バケット名やファイル名などのイベントオブジェクト内のパラメーター値をカスタマイズできます。完了したら、OK をクリックします。
コード タブで 関数のテスト をクリックして関数をトリガーします。実行が成功したら、レスポンス を確認します。戻り値 0 は、イベントが正常に処理されたことを示します。ログ出力 をクリックして、関数実行中に生成されたログを表示します。
関数をテストすると、Function Compute はモックイベントの内容を
eventパラメーターを介してハンドラーhandlerに渡し、前のステップで定義したコードを実行してeventパラメーターをパースし、ファイルを処理します。ログ出力には、次の主要な情報が表示されます:
FunctionCompute python3 runtime inited、それに続く 4 つの [INFO] レベルのログエントリ:Parsing event information...、OSS bucket name is test-bucket, file name is source/example.zip, Region is cn-hangzhou、Starting event processing...、Event processing completed.。これは、関数が模擬 OSS イベント情報を正常にパースし、ファイル処理を完了したことを示します。
ステップ6:(オプション) リソースのクリーンアップ
Function Compute は実際のリソース使用量に基づいて課金されます。呼び出されない関数は課金されません。ただし、OSS や File Storage NAS (NAS) に保存されているデータなど、関数に関連付けられている他のクラウド製品やリソースにご注意ください。
Function Computeコンソール にログインし、 を選択し、リージョンを選択します。対象の関数の 操作 列で、削除 をクリックします。ダイアログボックスで、関数にトリガーなどの関連リソースがないことを確認してから、削除を確定します。
次のステップ
これで、コンソールでイベント関数を作成し、ハンドラーを変更し、モック event を使用して関数をテストしました。ビジネスニーズに応じて、以下の高度な操作をご参照ください。
トリガーの追加:
OSS バケットをお持ちでない場合があるため、この例ではテストに模擬 OSS アップロードイベントを使用しています。実際のワークロードでは、関数に OSS トリガーを追加してください。詳細については、「ネイティブOSSトリガーの設定」をご参照ください。
オブジェクトストレージに加えて、多くの Alibaba Cloud サービス (さまざまなメッセージキュー、Tablestore、SLS など) からのイベントも Function Compute をトリガーできます。サポートされているトリガーのリストについては、「トリガーの概要」をご参照ください。
依存関係の追加: 組み込みランタイムにはイベント処理のための一般的な依存関係が含まれていますが、本番環境でのニーズを満たさない場合があります。最も簡単なアプローチは、コードと依存関係を ZIP ファイル (コードパッケージ) にパッケージ化し、Function Compute にデプロイすることです。詳細については、「コードパッケージのデプロイ」をご参照ください。コードパッケージのサイズを削減し、関数のコールドスタートを高速化するには、レイヤーを使用して依存関係を管理してください。詳細については、「カスタムレイヤーの作成」をご参照ください。
ロギングの設定: 関数のデバッグ、トラブルシューティング、またはセキュリティ監査を容易にするために、関数のロギングを設定することを推奨します。詳細については、「ロギング機能の設定」をご参照ください。
関連ドキュメント
コンソールを使用するだけでなく、Serverless Devs コマンドラインツールを使用して前述の操作を実行することもできます。詳細については、「クイックスタート」をご参照ください。
イベント関数の詳細については、次のチュートリアルを推奨します。
