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

Function Compute:ネイティブ OSS トリガーの設定

最終更新日:Apr 21, 2026

Function Compute コンソールでネイティブ OSS トリガーを作成および設定できます。Object Storage Service (OSS) で特定のイベントが発生すると、トリガーが自動的に関数を呼び出します。これにより、ファイルアップロードなどのイベントに簡単に応答し、コードにイベントリッスンロジックを追加することなく、完全なワークフローを迅速に実装できます。

利用シーンの例

OSS トリガーを設定し、そのオブジェクトプレフィックスを source に設定できます。指定された OSS バケットの source ディレクトリに画像がアップロードされると、トリガーは自動的に関数を呼び出します。関数は画像のサイズを変更し、同じバケットの processed ディレクトリに保存します。たとえば、関数は source/a.png を処理し、結果を processed/a.png として保存します。

前提条件

制限事項

  • 1 つのバケットには、最大 10 個のネイティブ OSS トリガーを設定できます。

    説明

    バケットにさらに多くの OSS トリガーを関連付ける必要がある場合は、EventBridge ベースの OSS トリガーを作成できます。ただし、1 つのバケットに 10 個を超えるトリガーを関連付けることは推奨しません。さらに必要な場合は、新しいバケットを作成してトリガーを設定することを検討してください。

  • ネイティブ OSS トリガーと EventBridge ベースの OSS トリガーは、オブジェクトプレフィックスとサフィックスのワイルドカードまたは正規表現マッチングをサポートしていません。

  • ネイティブ OSS トリガーは、1 つのオブジェクトプレフィックスと 1 つのオブジェクトサフィックスのみをサポートします。複数のプレフィックスまたはサフィックスを設定するには、EventBridge ベースの OSS トリガーを使用してください。

ステップ 1: OSS トリガーの作成

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数管理] > [関数] を選択します。

  2. 上部のナビゲーションバーでリージョンを選択します。[関数] ページで、対象の関数をクリックします。

  3. 関数詳細ページで、トリガー タブを選択し、トリガーの作成 をクリックします。[トリガーの作成] パネルでパラメーターを設定し、OK をクリックします。

    パラメーター

    操作

    トリガータイプ

    OSS を選択します。

    OSS

    名前

    トリガーのカスタム名を入力します。

    oss-trigger

    バージョンまたはエイリアス

    デフォルト値は LATEST です。別のバージョンまたはエイリアスのトリガーを作成する場合は、まず関数詳細ページの バージョンまたはエイリアス ドロップダウンリストから選択する必要があります。バージョンとエイリアスの詳細については、「バージョンの管理」および「エイリアスの管理」をご参照ください。

    LATEST

    バケット名

    作成した OSS バケットを選択します。

    testbucket

    オブジェクトプレフィックス

    一致させるオブジェクト名のプレフィックスを入力します。追加料金の原因となる再帰的なトリガー呼び出しを防ぐために、オブジェクトプレフィックスとオブジェクトサフィックスの両方を指定することを推奨します。さらに、同じバケット内の異なるトリガーが同じイベントタイプを共有する場合、それらのプレフィックスとサフィックスは同一であってはなりません。詳細については、「OSS トリガーのトリガールール」をご参照ください。

    重要

    オブジェクトプレフィックスはスラッシュ (/) で始めることはできません。そうしないと、トリガーを呼び出すことができません。

    source

    オブジェクトのサフィックス

    一致させるオブジェクト名のサフィックスを入力します。追加料金の原因となる再帰的なトリガー呼び出しを防ぐために、プレフィックスとサフィックスの両方を指定することを強く推奨します。さらに、同じバケット内の異なるトリガーが同じイベントタイプを共有する場合、それらのプレフィックスとサフィックスは同一であってはなりません。詳細については、「OSS トリガーのトリガールール」をご参照ください。

    png

    トリガーイベント

    1 つ以上のトリガーイベントを選択します。OSS のイベントタイプの詳細については、「OSS イベントの定義」をご参照ください。

    この例では oss:ObjectCreated:PutObject を使用します。

    oss:ObjectCreated:PutObjectoss:ObjectCreated:PostObjectoss:ObjectCreated:CompleteMultipartUploadoss:ObjectCreated:PutSymlink

    ロール名

    AliyunOSSEventNotificationRole を選択します。

    説明

    このタイプのトリガーを初めて作成する場合、OK をクリックした後に表示されるダイアログボックスで 今すぐ権限付与 をクリックします。

    AliyunOSSEventNotificationRole

    トリガーが作成されると、[トリガー名] リストに表示されます。トリガーを変更または削除するには、「トリガーの管理」をご参照ください。

ステップ 2: (オプション) 関数の入力パラメーターの設定

OSS イベントソースは、データを event オブジェクトとして関数に渡します。コード内でこのオブジェクトを解析して処理できます。また、サンプルの event を手動で関数に渡してトリガーをシミュレートし、コードをテストすることもできます。

  1. 関数の詳細ページの [コード] タブで、[テスト機能] の横にある image.png アイコンをクリックし、ドロップダウンリストから [テストパラメーターの設定] を選択します。

  2. テストパラメーターの設定 パネルで、新規テストイベントの作成 または 既存のテストイベントの変更 タブを選択します。イベント名とイベント内容を入力し、[OK] をクリックします。

    説明

    トリガーを作成したときに提供した情報に基づいてイベント内容を設定します。指定したオブジェクト (この例では source/a.png) がバケットに存在することを確認してください。そうしないと、関数が呼び出されないか、呼び出しが失敗します。

    イベントは FC 関数の入力パラメーターです。指定された OSS バケットでオブジェクトが作成または削除されると、OSS はイベントデータを JSON 形式でバインドされた関数に送信します。以下に例を示します。

    {
        "events": [
            {
                "eventName": "ObjectCreated:PutObject",
                "eventSource": "acs:oss",
                "eventTime": "2022-08-13T06:45:43.000Z",
                "eventVersion": "1.0",
                "oss": {
                    "bucket": {
                        "arn": "acs:oss:cn-hangzhou:123456789:testbucket",
                        "name": "testbucket",
                        "ownerIdentity": "164901546557****"
                    },
                    "object": {
                        "deltaSize": 122539,
                        "eTag": "688A7BF4F233DC9C88A80BF985AB****",
                        "key": "source/a.png",
                        "objectMeta": {
                           "mimeType": "application/zip",
                           "userMeta": {
                              "x-oss-meta-last-modified":"20250213"
                           }
                        },
                        "size": 122539
                    },
                    "ossSchemaVersion": "1.0",
                    "ruleId": "9adac8e253828f4f7c0466d941fa3db81161****"
                },
                "region": "cn-hangzhou",
                "requestParameters": {
                    "sourceIPAddress": "140.205.XX.XX"
                },
                "responseElements": {
                    "requestId": "58F9FF2D3DF792092E12044C"
                },
                "userIdentity": {
                    "principalId": "164901546557****"
                }
            }
        ]
    }

    次の表に、イベントオブジェクトのパラメーターを示します。

    パラメーター

    タイプ

    説明

    eventName

    String

    ObjectCreated:PutObject

    イベントタイプ。

    eventSource

    String

    acs:oss

    イベントソース。値は acs:oss に固定されています。

    eventTime

    String

    2022-08-13T06:45:43.000Z

    イベントが発生した時刻 (ISO 8601 形式)。

    eventVersion

    String

    1.0

    イベントプロトコルのバージョン。

    oss

    Map

    OSS イベントの詳細が含まれます。

    bucket

    Map

    bucket パラメーターの値。

    name

    String

    testbucket

    バケットの名前。

    arn

    String

    acs:oss:cn-hangzhou:123456789:testbucket

    バケットの一意の識別子。

    ownerIdentity

    String

    164901546557****

    バケットを作成したユーザーの ID。

    object

    Map

    object パラメーターの内容。

    size

    Int

    122539

    object のサイズ。単位:バイト。

    deltaSize

    Int

    122539

    object のサイズの変更。単位:バイト。

    • 新しいオブジェクトが追加された場合、この値はオブジェクトサイズです。

    • 既存のオブジェクトが同じ名前のオブジェクトで上書きされた場合、この値は新しいオブジェクトと古いオブジェクトのサイズの差です。

    eTag

    String

    688A7BF4F233DC9C88A80BF985AB****

    オブジェクトの ETag。

    key

    String

    source/a.png

    オブジェクトの完全なパス。

    objectMeta

    Map

    objectMeta パラメーターの内容。

    mimeType

    String

    application/zip

    オブジェクトのファイルタイプ。詳細については、「mimeType」をご参照ください。

    userMeta

    Map

    オブジェクトの目的または属性を識別するユーザーメタデータ。

    x-oss-meta-last-modified

    String

    20250213

    ユーザーメタデータはキーと値のペアで構成されます。メタデータキーは x-oss-meta- で始まる必要があります。たとえば、ペア "x-oss-meta-last-modified":"20250213" は、ローカルファイルが 2025 年 2 月 13 日に最後に変更されたことを示します。詳細については、「ユーザーメタデータ」をご参照ください。

    ossSchemaVersion

    String

    1.0

    OSS スキーマバージョン。

    ruleId

    String

    9adac8e253828f4f7c0466d941fa3db81161****

    イベントが一致したトリガールールの ID。

    region

    String

    cn-hangzhou

    バケットのリージョン。

    requestParameters

    Map

    リクエストパラメーター。

    sourceIPAddress

    String

    140.205.XX.XX

    リクエストのソース IP アドレス。

    responseElements

    Map

    応答要素。

    requestId

    String

    58F9FF2D3DF792092E12044C

    リクエスト ID。

    userIdentity

    Map

    リクエストを行ったユーザーの ID。

    principalId

    String

    164901546557****

    リクエストを開始した Alibaba Cloud アカウントの ID。

ステップ 3: 関数コードの作成とテスト

OSS トリガーを作成した後、関数コードを作成してテストし、正しく動作することを確認できます。実際のシナリオでは、指定された OSS イベントが発生すると、トリガーが自動的に関数を呼び出します。

警告

コード内で再帰的な呼び出しを防ぐ必要があります。一般的な再帰シナリオは、関数が OSS バケットへのオブジェクトアップロードによってトリガーされる場合に発生します。関数が実行された後、1 つ以上の新しいオブジェクトを生成し、同じバケットに書き戻します。この書き込み操作が再び関数をトリガーし、無限ループを作成します。詳細については、「OSS トリガーのトリガールール」をご参照ください。

  1. 関数詳細ページの コード タブで、エディターにコードを入力し、デプロイメントコード をクリックします。

    • 以下のサンプルコードは、オンライン編集をサポートするランタイム用です。

      説明

      関数内で OSS バケットからデータを読み書きするには、内部エンドポイントを使用することを推奨します。パブリックエンドポイントを使用すると、インターネットデータ転送料金が発生します。内部エンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

      "use strict";
      /*
      このサンプルコードは、次の操作を実行する方法を示しています:
      * 1. イベントから OSS イベント情報を解析します。
      * 2. 解析された情報に基づいて OSS クライアントを初期化します。
      * 3. ソース画像をリサイズし、同じバケット内の宛先ディレクトリに保存します。
      */
      
      const OSS = require("ali-oss");
      
      exports.handler = async function(event, context, callback) {
          console.log("The content in context entity is: \n");
          console.dir(context);
      
          const {accessKeyId, accessKeySecret, securityToken} = context.credentials;
      
          const events = JSON.parse(event.toString()).events;
          console.log("The content in event entity is: \n");
          console.dir(events);
      
          let objectName = events[0].oss.object.key;
          let region = events[0].region;
          let bucketName = events[0].oss.bucket.name;
      
          // ターゲット OSS バケットに接続します。
          const client = new OSS({
              region: region,
              accessKeyId: accessKeyId,
              accessKeySecret: accessKeySecret,
              stsToken: securityToken,
              bucket: bucketName,
              endpoint: "https://oss-" + region + "-internal.aliyuncs.com"
          });
      
          console.log("The client entity is: \n");
          console.dir(events);
      
          const targetImage = objectName.replace("source/", "processed/")
          // 画像を幅と高さが 128 px の固定サイズに変更します。
          const processStr = "image/resize,m_fixed,w_128,h_128"
          // ソース画像をリサイズし、処理後の画像を宛先パスに保存します。
          const result = await client.processObjectSave(
              objectName,
              targetImage,
              processStr,
              bucketName
          );
          console.log(result.res.status);
      
          callback(null, "done");
      }
      """
      このサンプルコードは、次の操作を実行する方法を示しています:
      * イベントから OSS 処理関連の情報を取得します。
      * ターゲットバケットで OSS クライアントを初期化します。
      * ソース画像をリサイズし、宛先ディレクトリに保存します。
      """
      
      # -*- coding: utf-8 -*-
      import oss2, json
      import base64
      
      def handler(event, context):
          # context.credentials からキー情報を取得します。
          print("The content in context entity is: \n")
          print(context)
          creds = context.credentials
      
          # OSS SDK の認証を設定します。
          auth = oss2.StsAuth(
              creds.access_key_id,
              creds.access_key_secret,
              creds.security_token)
      
          print("The content in event entity is: \n")
          print(event)
          # イベントコンテンツをロードします。
          oss_raw_data = json.loads(event)
          # OSS トリガーによって渡された OSS イベントパラメーターを取得します。
          oss_info_map = oss_raw_data['events'][0]['oss']
          # OSS バケット名を取得します。
          bucket_name = oss_info_map['bucket']['name']
          # OSS エンドポイントを設定します。
          endpoint = 'oss-' + oss_raw_data['events'][0]['region'] + '-internal.aliyuncs.com'
          # OSS クライアントを初期化します。
          bucket = oss2.Bucket(auth, endpoint, bucket_name)
          object_name = oss_info_map['object']['key']
      
          # OSS バケットから元の画像をダウンロードします。
          remote_stream = bucket.get_object(object_name)
          if not remote_stream:
              print(f'{object_name} does not exist in bucket {bucket_name}')
              return
          # 処理された画像は processed/ ディレクトリに保存されます。
          processed_path = object_name.replace('source/', 'processed/')
      
          # 画像を幅と高さが 128 px の固定サイズに変更します。
          style = 'image/resize,m_fixed,w_128,h_128'
          # 処理された画像の名前を指定します。画像がバケットのルートディレクトリにない場合は、画像の完全なパスを指定する必要があります。例: exampledir/example.jpg。
          process = "{0}|sys/saveas,o_{1},b_{2}".format(style,
              oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(processed_path))),
              oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(bucket_name))))
          result = bucket.process_object(object_name, process)
          print(result)
      /*
      *このサンプルコードは、次の操作を実行する方法を示しています:
      * 1. イベントからエンドポイント、バケット、オブジェクトを解析します。
      * 2. 解析された情報に基づいて OSS クライアントを初期化します。
      * 3. ソース画像をリサイズし、処理後の画像を同じバケット内の宛先ディレクトリに保存します。
      */
      <?php
      
      use RingCentral\Psr7\Response;
      use OSS\OssClient;
      use OSS\Core\OssException;
      
      function base64url_encode($data)
      {
          return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
      }
      
      function handler($event, $context) {
        $event           = json_decode($event, $assoc = true);
        /*
          Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
          プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。ハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
          この例では、コンテキストから AccessKey ペアを取得する方法を示します。
        */
        $accessKeyId     = $context["credentials"]["accessKeyId"];
        $accessKeySecret = $context["credentials"]["accessKeySecret"];
        $securityToken   = $context["credentials"]["securityToken"];
        $evt        = $event['events']{0};
        $bucketName = $evt['oss']['bucket']['name'];
        $endpoint   = 'oss-' . $evt['region'] . '-internal.aliyuncs.com';
        $objectName = $evt['oss']['object']['key'];
        $targetObject = str_replace("source/", "processed/", $objectName);
      
          try {
              // OSS に接続します。
              $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
              // 画像を幅と高さが 128 px の固定サイズに変更します。
              $style = "image/resize,m_fixed,w_128,h_128";
              $process = $style.
                 '|sys/saveas'.
                 ',o_'.base64url_encode($targetObject).
                 ',b_'.base64url_encode($bucketName);
              // 画像をリサイズし、宛先オブジェクトに保存します。
              $result = $ossClient->processObject($bucketName, $objectName, $process);
              // 処理結果を出力します。
              print($result);
          } catch (OssException $e) {
              print_r(__FUNCTION__ . ": FAILED\n");
              printf($e->getMessage() . "\n");
          }
      
          print(__FUNCTION__ . ": OK" . "\n");
      
          return $targetObject;
      }
  2. 関数をテストします。

    方法 1: イベントソースをシミュレートするために event 入力パラメーターを設定した場合、関数のテスト をクリックします。

    方法 2: 設定 > トリガー ページで、[バケット名] をクリックして対応するバケットに移動します。指定されたオブジェクトプレフィックスとサフィックスに一致する画像をアップロードします。関数が実行された後、[ログ] タブで実行ログを表示し、バケットの宛先フォルダーで結果を確認できます。

よくある質問

参考

  • 設定可能な OSS イベントのタイプについては、「OSS イベントの定義」をご参照ください。

  • トリガーを変更または削除するには、「トリガーの更新」をご参照ください。

  • バケットに 10 個を超える OSS トリガーを関連付ける必要がある場合は、「EventBridge ベースの OSS トリガーの設定」をご参照ください。

  • トリガー関連の問題:

    • どのイベントが関数を呼び出したかを確認するには、コードでイベントタイプをログに記録できます。詳細については、「ログ管理」をご参照ください。

    • 別の関数から関数を呼び出すには、直接 API 呼び出しを行うか、CloudFlow を使用してそれらをオーケストレーションできます。長時間実行されるタスクを実行する関数を非同期で呼び出す場合は、呼び出し結果を処理するための送信先を設定できます。詳細については、「関数は互いに呼び出すことができますか?」および「非同期呼び出しの送信先の設定」をご参照ください。