トリガーは関数の呼び出しに使用します。イベント駆動型のコンピューティングモデルでは、イベントソースがイベントを起こし、関数がイベントハンドラとなり、トリガーはあらゆるイベントソースを集中管理します。トリガーを定義したルールに合致するイベントが発生すると、イベントソースはトリガーに対応した関数を呼び出します。
利用イメージ
ニーズによって、直接関数を呼び出すことなく関数を実行したい場合もあります。たとえば、アプリケーションがアップロードした画像の保存に Object Storage Service (OSS) を使用している場合は、画像をダウンロードして処理する関数を呼び出してから、結果を OSS または他のサービスに記録できます。OSS が新しくアップロードされた画像を検出して対応する関数を自動的に呼び出すことができる場合は、関数を手動で呼び出す必要はありません。このように、開発およびアプリケーションの処理を簡素化できます。
Function Compute は、イベント駆動型コンピューティングモデルです。関数の実行は、Function Compute コンソール、コマンドラインツール fcli、SDK、またはその他のイベントソースで起動できます。Function Compute のトリガーは一連のルールを記述します。イベントがこれらのルールを満たすと、イベントソースは対応する関数を呼び出します。現在、Function Compute は複数のイベントソースをサポートしています。
プロパティ
triggerName
: トリガーの名前を示します。triggerType
: OSS トリガー、時間トリガー、HTTP トリガーなどのトリガーのタイプを示します。sourceArn
: 関数の実行のトリガーとなるイベントソースを示します。このプロパティは、OSS トリガーや Log Service トリガーといった、Alibaba Cloud の他のサービスが Function Compute の関数の呼び出しに関与している場合に必要です。時間トリガー、HTTP トリガー、またはその他のトリガーが使用されていて、他のAlibaba Cloud サービスが関与していない場合、このプロパティは必要ありません。たとえば、OSS トリガーの値の形式はacs:oss:region:accountId:bucketName
です。invocationRole
: 関数を呼び出すためにイベントソースによって使われるロールを示します。ロールはイベントソースに関数を呼び出す許可を与えます。イベントソースのロールについての詳細は、「権限の概要」 をご参照ください。qualifier
:サービスのバージョンまたはエイリアスを示します。修飾子の使い方については、「バージョン管理」 をご参照ください。triggerConfig
: トリガーの設定を指定します。さまざまなトリガーの設定についての詳細は、対応するドキュメントをご参照ください。
サンプル
次の例は、OSS トリガーを作成する方法を示しています。新しい画像がアップロードされ、その画像に接頭辞 source/ が付いていることを OSS バケットが検出すると、サイズ変更操作を実行するための関数が呼び出されます。その後に生成された画像は、/processed ディレクトリに保存されます。
前提条件
画像を保存するための OSS バケットが使用可能であること。バケットに /source ディレクトリがあり、その下にデバッグに使用される画像 1.jpg が格納されていること。
関数を作成してコードを記述する
関数作成の詳細については、「基本操作」 をご参照ください。以下にコード例を示します。Function Compute の Python ランタイム環境は、wand という名前の画像処理ライブラリを提供します。したがって、サードパーティの依存関係をアップロードする必要はありません。
# -*- coding: utf-8 -*-
import oss2, json
from wand.image import Image
def resize(event, context):
evt = json.loads(event)
creds = context.credentials
# Required by OSS SDK
auth=oss2.StsAuth(
creds.access_key_id,
creds.access_key_secret,
creds.security_token)
evt = evt['events'][0]
bucket_name = evt['oss']['bucket']['name']
endpoint = 'oss-' + evt['region'] + '.aliyuncs.com'
bucket = oss2.Bucket(auth, endpoint, bucket_name)
objectName = evt['oss']['object']['key']
# Processed images are saved to processed/
newKey = objectName.replace("source/", "processed/")
remote_stream = bucket.get_object(objectName)
if not remote_stream:
return
remote_stream = remote_stream.read()
with Image(blob=remote_stream) as img:
with img.clone() as i:
i.resize(128, 128)
new_blob = i.make_blob()
bucket.put_object(newKey, new_blob)
トリガーの作成
Function Compute コンソールにログインします。
トリガーを作成するには 「基本操作」 をご参照ください。
トリガーのデバッグ
トリガーをテストする前に、イベントソースをトリガーしてデバッグできます。まず、OSS バケットの下に source
ディレクトリを作成して、このディレクトリに画像 1.jpg をアップロードします。次に、イベントソースを設定して関数を呼び出します。
コード実行ページで、[トリガー] をクリックします。
[テストイベント] ダイアログボックスで、[OSS テンプレート] を選択し、それに応じてイベントテンプレートの
arn
、name
、ownerIdentity
、およびkey
パラメーターを編集します。{
"events": [
{
"eventName": "ObjectCreated:PutObject",
"eventSource": "acs:oss",
"eventTime": "2017-04-21T12:46:37.000Z",
"eventVersion": "1.0",
"oss": {
"bucket": {
"arn": "acs:oss:cn-shanghai:1237050315505689:bucketname",
"name": "bucketname",
"ownerIdentity": "1237050315505689",
"virtualBucket": ""
},
"object": {
"deltaSize": 122539,
"eTag": "688A7BF4F233DC9C88A80BF985AB7329",
"key": "image/a.jpg",
"size": 122539
},
"ossSchemaVersion": "1.0",
"ruleId": "9adac8e253828f4f7c0466d941fa3db81161e853"
},
"region": "cn-shanghai",
"requestParameters": {
"sourceIPAddress": "140.205.128.221"
},
"responseElements": {
"requestId": "58F9FF2D3DF792092E12044C"
},
"userIdentity": {
"principalId": "262561392693583141"
}
}
]
}
[実行] をクリックします。OSS バケットの下に
processed
という名前のディレクトリが作成され、処理された画像 1.jpg がこのディレクトリに格納されます。このプロセスは、オブジェクトが OSS バケットの /source ディレクトリに作成されたときに、関数が Function Compute でどのように実行されるかをシミュレートします。
トリガーのテスト
OSS コンソールで、トリガー用に設定された OSS バケットの /source ディレクトリに画像をアップロードします。同じ名前のサイズ変更された画像が /processed ディレクトリに生成されます。