edit-icon download-icon

トリガーの作成

最終更新日: Nov 30, 2018

トリガーは関数の呼び出しに使用します。イベント駆動型のコンピューティングモデルでは、イベントソースがイベントを起こし、関数がイベントハンドラとなり、トリガーはあらゆるイベントソースを集中管理します。トリガーを定義したルールに合致するイベントが発生すると、イベントソースはトリガーに対応した関数を呼び出します。

シナリオ

中には直接関数を呼び出すことなく関数を実行したい場合もあります。たとえば、アプリケーションがアップロードした画像の保存に Object Storage Service (OSS) を使用している場合、画像を処理する関数を呼び出して、結果を OSS やその他のサービスに記録させることができます。OSS が画像が新たにアップロードされたことを検出し、該当関数が自動的に呼び出されるようになれば、手動で関数を呼び出す必要はありません。このように、開発およびアプリケーションの処理は簡素化できます。

Function Compute はイベント駆動型のコンピューティングモデルです。関数実行は Function Compute コンソール、コマンドラインツール fcli、SDK やその他イベントソースより、関数の実行をトリガーすることができます。現在、Function Compute で対応しているイベントソースは、次のとおりです。

プロパティ

  • triggerName:トリガーの名前を示します。
  • triggerType:トリガーのタイプを示します。たとえば、OSS トリガー、タイムトリガー、HTTP トリガー。
  • sourceArn:関数実行のトリガーとなるイベントソースを示します。本プロパティは、Function Compute の関数呼び出しに、OSS トリガー、Log Service トリガーといった他の Alibaba Cloud サービスが関与する場合に必要です。タイムトリガー、HTTP トリガーやその他のトリガーが使用されている場合、他の Alibaba Cloud サービスは関与しません。たとえば、OSS トリガーの値の書式は、acs:oss:region:accountId:bucketNameです。
  • invocationRole:関数の呼び出しにイベントソースの使用するロールを示します。ロールにより、関数を呼び出すための許可がイベントソースに付与されます。イベントソースのロールに関する詳細は、「権限の概要」をご参照ください。
  • triggerConfig:トリガーの設定を示します。各トリガーの設定についての詳細は、該当ドキュメントをご参照ください。

サンプル

次の例では、OSS トリガーの作成方法を示します。名前が「source/」で始まる新しい画像がアップロードされたことを OSS バケットが検知すると、サイズを変更する関数が呼び出されます。生成された画像は、「processed/」ディレクトリに保存されます。

前提要件

画像を格納する OSS バケットが用意されており、デバッグに使用する画像「1.jpg」を保存する「source/」ディレクトリがあること。

関数の作成とコードの記述

関数の作成についての詳細は、「基本操作」をご参照ください。コード例は次のとおりです。Function Compute の Python ランタイム環境には、「wand」という名の画像処理ライブラリが用意されています。したがって、サードパーティ製依存関係をアップロードする必要はありません。

  1. # -*- coding: utf-8 -*-
  2. import oss2, json
  3. from wand.image import Image
  4. def resize(event, context):
  5. evt = json.loads(event)
  6. creds = context.credentials
  7. # OSS SDK より求められます
  8. auth=oss2.StsAuth(
  9. creds.access_key_id,
  10. creds.access_key_secret,
  11. creds.security_token)
  12. evt = evt['events'][0]
  13. bucket_name = evt['oss']['bucket']['name']
  14. endpoint = 'oss-' + evt['region'] + '.aliyuncs.com'
  15. bucket = oss2.Bucket(auth, endpoint, bucket_name)
  16. objectName = evt['oss']['object']['key']
  17. # 処理された画像は processed/ に保存されます
  18. newKey = objectName.replace("source/", "processed/")
  19. remote_stream = bucket.get_object(objectName)
  20. if not remote_stream:
  21. return
  22. remote_stream = remote_stream.read()
  23. with Image(blob=remote_stream) as img:
  24. with img.clone() as i:
  25. i.resize(128, 128)
  26. new_blob = i.make_blob()
  27. bucket.put_object(newKey, new_blob)

トリガーの作成

  1. Function Compute コンソール にログインします。

  2. 基本操作」を参照してトリガーを作成します。

    Create a trigger

トリガーのデバッグ

トリガーを検証する前に、イベントソースをトリガーしてデバッグすることができます。まず、OSS バケット下にsourceディレクトリを作成します。作成したディレクトリにイメージ「1.jpg」をアップロードします。その後、イベントソースを設定して関数を呼び出します。

  1. コード実行ページで、[トリガー] をクリックします。

  2. [Test Event] ダイアログボックスで、[OSS Template] を選択し、イベントテンプレートのarnnameownerIdentity、およびkeyパラメータをそれぞれ編集します。

    1. {
    2. "events": [
    3. {
    4. "eventName": "ObjectCreated:PutObject",
    5. "eventSource": "acs:oss",
    6. "eventTime": "2017-04-21T12:46:37.000Z",
    7. "eventVersion": "1.0",
    8. "oss": {
    9. "bucket": {
    10. "arn": "acs:oss:cn-shanghai:1237050315505689:bucketname",
    11. "name": "bucketname",
    12. "ownerIdentity": "1237050315505689",
    13. "virtualBucket": ""
    14. },
    15. "object": {
    16. "deltaSize": 122539,
    17. "eTag": "688A7BF4F233DC9C88A80BF985AB7329",
    18. "key": "image/a.jpg",
    19. "size": 122539
    20. },
    21. "ossSchemaVersion": "1.0",
    22. "ruleId": "9adac8e253828f4f7c0466d941fa3db81161e853"
    23. },
    24. "region": "cn-shanghai",
    25. "requestParameters": {
    26. "sourceIPAddress": "140.205.128.221"
    27. },
    28. "responseElements": {
    29. "requestId": "58F9FF2D3DF792092E12044C"
    30. },
    31. "userIdentity": {
    32. "principalId": "262561392693583141"
    33. }
    34. }
    35. ]
    36. }
  3. [実行] をクリックします。processedという名のディレクトリが OSS バケット下に作成され、処理されたイメージ「1.jpg」が保存されます。OSS バケットの「source/」ディレクトリにオブジェクトが作成されると、関数が Function Compute でどのように実行されるかをこのプロセスは示しています。

トリガーの検証

OSS コンソールで、画像をトリガー用に設定した OSS バケットの「source/」 ディレクトリにアップロードします。サイズが変更された、同じ名前の画像が「processed/」ディレクトリに生成されます。