Object Storage Service (OSS) と Function Compute を統合すると、OSS イベントによって関数がトリガーされ、OSS バケット内のデータが処理されます。このトピックでは、Function Compute の OSS トリガーの制限、イベントタイプ、およびトリガールールについて説明します。
背景情報
OSS は、OSS トリガーを使用して Function Compute とシームレスに統合できます。関数を作成し、OSS イベントを使用して関数を呼び出すことができます。OSS が指定されたタイプのイベントをキャプチャすると、関連付けられた関数が実行されます。たとえば、PutObject イベントを処理する関数を作成できます。OSS の PutObject 操作を呼び出して OSS に画像をアップロードすると、関数が自動的に呼び出されて画像が処理されます。
OSS と Function Compute を統合した後、さまざまな関数を呼び出して画像ファイルや音声ファイルを処理し、処理されたファイルを特定のストレージサービスに書き込むことができます。プロセス全体を通して、関数ロジックの作成にのみ集中する必要があります。Function Compute は、大量のデータをリアルタイムで並行して処理できます。
OSS トリガーの制限
複数のオブジェクトプレフィックスとサフィックスは、EventBridge ベースの OSS トリガーに対してのみ構成できます。詳細については、「EventBridge ベースの OSS トリガーを構成する」をご参照ください。
ネイティブ OSS トリガーおよび EventBridge ベースの OSS トリガーに構成するオブジェクトプレフィックスとサフィックスでは、正規表現マッチングはサポートされていません。詳細については、「ネイティブ OSS トリガーを構成する」および「EventBridge ベースの OSS トリガーを構成する」をご参照ください。
10 個を超える OSS トリガーをバケットに関連付ける場合は、EventBridge ベースの OSS トリガーのみを使用できます。詳細については、「EventBridge ベースの OSS トリガーを構成する」をご参照ください。
10 個を超えるトリガーをバケットに関連付けないことをお勧めします。さらに多くのトリガーを関連付ける場合は、新しいバケットを作成し、新しいバケットに基づいて新しいトリガーを作成できます。
OSS イベント
OSS が指定されたタイプのイベントをキャプチャすると、OSS はイベント情報を JSON 文字列としてエンコードし、JSON 文字列をイベントを処理する関数に渡します。OSS イベント通知の形式の詳細については、「概要」トピックの イベント通知 セクションを参照してください。
次の表に、Function Compute でサポートされている OSS イベントのタイプを示します。各イベントタイプは、ObjectCreated、ObjectRemoved、または ObjectModified 操作に対応しています。操作が想定どおりに呼び出されると、関数がトリガーされ、1 回実行されます。
イベントタイプ | イベント | 説明 |
ObjectCreated | oss:ObjectCreated:PutObject | PutObject 操作が呼び出されて、オブジェクトがアップロードされます。詳細については、PutObject を参照してください。 |
oss:ObjectCreated:PutSymlink | PutSymlink 操作が呼び出されて、OSS 内の宛先オブジェクトのシンボリックリンクが作成されます。シンボリックリンクを使用して、宛先オブジェクトにアクセスできます。詳細については、PutSymlink を参照してください。 | |
oss:ObjectCreated:PostObject | PostObject 操作が呼び出されて、HTML フォームを使用して指定されたバケットにファイルがアップロードされます。詳細については、PostObject を参照してください。 | |
oss:ObjectCreated:CopyObject | CopyObject 操作が呼び出されて、OSS 内の既存のオブジェクトがコピーされます。詳細については、CopyObject を参照してください。 | |
oss:ObjectCreated:InitiateMultipartUpload | InitiateMultipartUpload 操作が呼び出されて、OSS でマルチパートアップロードタスクが開始されます。マルチパートアップロードを使用してデータをアップロードする前に、InitiateMultipartUpload 操作を呼び出す必要があります。詳細については、InitiateMultipartUpload を参照してください。 | |
oss:ObjectCreated:UploadPart | マルチパートアップロードイベントが開始された後、指定されたオブジェクト名とアップロード ID に基づいてデータを部分的にアップロードできます。詳細については、UploadPart を参照してください。 | |
oss:ObjectCreated:UploadPartCopy | UploadPartCopy 操作が呼び出されて、既存のオブジェクトからデータをコピーしてパートがアップロードされます。詳細については、UploadPartCopy を参照してください。 | |
oss:ObjectCreated:CompleteMultipartUpload | CompleteMultipartUpload 操作が呼び出されて、オブジェクトのマルチパートアップロードタスクが完了します。詳細については、CompleteMultipartUpload を参照してください。 | |
oss:ObjectCreated:AppendObject | AppendObject 操作が呼び出されて、オブジェクトのコンテンツを既存のオブジェクトに追加することでオブジェクトがアップロードされます。詳細については、AppendObject を参照してください。 | |
oss:ObjectCreated:* | 上記の ObjectCreated タイプの API 操作のいずれかが呼び出されます。 | |
ObjectRemoved | oss:ObjectRemoved:DeleteObject | DeleteObject 操作が呼び出されて、オブジェクトが削除されます。詳細については、DeleteObject を参照してください。 |
oss:ObjectRemoved:DeleteObjects | DeleteMultipleObjects 操作が呼び出されて、複数のオブジェクトが一度に削除されます。詳細については、DeleteMultipleObjects を参照してください。 | |
oss:ObjectRemoved:AbortMultipartUpload | AbortMultipartUpload 操作が呼び出されて、指定されたアップロード ID に基づいてマルチパートアップロードタスクがキャンセルされます。詳細については、AbortMultipartUpload を参照してください。 | |
オブジェクト変更 | oss:ObjectModified:UpdateObjectMeta | [UpdateObjectMeta] 操作が呼び出され、オブジェクトの属性が変更されます。 説明 このイベントタイプは、中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (深圳)、中国 (成都) の各リージョンでサポートされています。 |
オブジェクトレプリケーション | oss:ObjectReplication:ObjectCreated | データレプリケーション タスクでオブジェクトが作成されます。 |
oss:ObjectReplication:ObjectModified | データレプリケーションタスクでオブジェクトが上書きされます。 | |
oss:ObjectReplication:ObjectRemoved | データレプリケーション タスクでオブジェクトが削除されました。 |
トリガー規則
ループトリガーを実行しない
OSS トリガーを使用する場合は、ループトリガーを実行しないでください。たとえば、OSS バケットにオブジェクトをアップロードすると、アップロード操作によって関数が呼び出されます。関数は OSS バケットに書き込まれる 1 つ以上のオブジェクトを生成し、書き込み操作によって関数が再度呼び出されます。これにより、ループが発生します。
ループトリガーによって発生する追加コストを防ぐために、OSS トリガーを作成するときにオブジェクトプレフィックスまたはオブジェクトサフィックスを構成することをお勧めします。たとえば、オブジェクトプレフィックスを src に設定し、オブジェクトプレフィックスを dst に設定できます。このようにして、生成されたオブジェクトは関数を再度呼び出しません。オブジェクトプレフィックスまたはオブジェクトサフィックスを構成しない場合、すべてのプレフィックスとサフィックスを持つオブジェクトが一致となります。詳細については、「手順 1: OSS トリガーを作成する」をご参照ください。
ネイティブ OSS トリガーのセマンティックな一意性を確保する
トリガーの構成セマンティクスは、トリガーが作成されるバケット内で一意である必要があります。構成には、トリガーイベントパラメーター、オブジェクトプレフィックスパラメーター、およびオブジェクトサフィックスパラメーターが含まれます。たとえば、トリガーイベントが oss:ObjectCreated:PutObject であるバケットのトリガーを作成します。オブジェクトプレフィックスパラメーターは source に設定され、オブジェクトサフィックスパラメーターは zip に設定されます。次の表は、異なる構成の新しいトリガーがバケットに対して有効かどうかを示しています。
トリガーイベント | オブジェクトプレフィックス | オブジェクトサフィックス | 有効かどうか | 説明 |
oss:ObjectCreated:* | source1 | zip1 | いいえ | 新しいトリガーのイベントタイプが、既存のトリガーのイベントタイプと競合しています。 説明 oss:ObjectCreated:* には、すべての ObjectCreated イベントが含まれます。バケットに ObjectCreated イベントタイプのトリガーを作成している場合は、oss:ObjectCreated:* イベントタイプのトリガーを作成できません。同様に、バケットに oss:ObjectCreated:* イベントタイプのトリガーを作成している場合は、ObjectCreated イベントタイプのトリガーを作成できません。 |
oss:ObjectCreated:PutObject | source | zip | いいえ | 新しいトリガーのオブジェクトプレフィックスパラメーターとオブジェクトサフィックスパラメーターの値が、既存のトリガーの値と同じです。 |
source | なし | いいえ | 新しいトリガーの オブジェクトプレフィックス パラメーターの値が、既存のトリガーの値と同じです。オブジェクトサフィックス パラメーターを構成しない場合、zip サフィックスを持つオブジェクトが含まれます。 | |
なし | zip | いいえ | 新しいトリガーの オブジェクトサフィックス パラメーターの値が、既存のトリガーの値と同じです。オブジェクトプレフィックス パラメーターを構成しない場合、source プレフィックスを持つオブジェクトが含まれます。 | |
source1 | zip1 | はい | 新しいトリガーのオブジェクトプレフィックスパラメーターとオブジェクトサフィックスパラメーターの値が、既存のトリガーの値と異なります。 | |
source | zip1 | はい | 新しいトリガーの オブジェクトサフィックス パラメーターの値が、既存のトリガーの値と異なります。 | |
source1 | zip | はい | 新しいトリガーの オブジェクトプレフィックス パラメーターの値が、既存のトリガーの値と異なります。 | |
oss:ObjectCreated:PostObject | source | zip | はい | 新しいトリガーのトリガーイベントパラメーターの値が、既存のトリガーの値と異なります。 |
ネイティブ OSS トリガーでは、セマンティックな一意性を確保する必要があります。そのため、異なる関数に同じ OSS トリガーを構成することはできません。
同じイベントタイプに対して異なる関数に同じ OSS トリガーを構成する場合は、EventBridge ベースの OSS トリガーを構成できます。詳細については、「EventBridge ベースの OSS トリガーを構成する」をご参照ください。
参考資料
詳細情報
トリガーの設定
ネイティブ OSS トリガーと EventBridge ベースの OSS トリガーを設定および使用する方法の詳細については、「ネイティブ OSS トリガーを設定する」および「EventBridge ベースの OSS トリガーを設定する」をご参照ください。
トリガー
どのイベントが関数をトリガーするかを確認したい場合は、コードにイベントタイプログを出力するようにシステムを設定できます。 詳細については、「ログ」をご参照ください。
関数を使用して別の関数を呼び出したい場合は、関数を呼び出す API 操作を指定できます。 詳細については、「関数は相互に呼び出すことができますか?」をご参照ください。