Object Storage Service (OSS) を Function Compute と統合すると、OSS イベントを使用して関数実行をトリガーし、OSS のデータを処理できます。このトピックでは、Function Compute の OSS トリガーの制限、イベントタイプ、およびトリガールールについて説明します。
背景情報
OSS は、OSS トリガーを使用して Function Compute とシームレスに統合されます。関数を作成して OSS イベントを処理できます。OSS が指定されたタイプのイベントをキャプチャすると、関連付けられた関数が実行されます。たとえば、PutObject イベントを処理する関数を設定できます。OSS の PutObject 操作を呼び出して OSS にイメージをアップロードすると、関連付けられた関数が自動的にトリガーされ、イメージが処理されます。
Function Compute と Function Compute を統合すると、さまざまな関数を使用してイメージや音声データを処理し、その結果を複数のストレージサービスに保存できます。このアーキテクチャでは、関数ロジックの作成に集中するだけで、システムが大量のデータをリアルタイムで、信頼性高く、大規模に処理します。
OSS トリガーの制限事項
複数のファイルプレフィックスとサフィックスを設定できるのは、EventBridge ベースの OSS トリガーのみです。
ネイティブ OSS トリガーおよびEventBridge ベースの OSS トリガーに設定するファイルプレフィックスとサフィックスでは、正規表現によるマッチングはサポートされていません。
1 つのバケットに 10 個を超える OSS トリガーを関連付けることができるのは、EventBridge ベースの OSS トリガーのみです。
通常、1 つのバケットに 10 個を超えるトリガーを関連付けないでください。代わりに、新しいバケットを作成し、そのバケットに対してトリガーを作成してください。
OSS イベントの定義
OSS システムが指定されたイベントをキャプチャすると、イベント情報を JSON 文字列にエンコードし、それを処理関数に渡します。OSS イベント通知のフォーマットの詳細については、「イベント通知」をご参照ください。
次の表に、サポートされている OSS イベントを示します。イベントタイプは、ObjectCreated、ObjectRemoved、ObjectModified などの API 操作に対応します。API 操作が呼び出され、正常に実行されると、関数が 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 | MultipartUpload モードでデータを転送する前に、InitiateMultipartUpload 操作を呼び出して、マルチパートアップロードイベントを初期化するように OSS に通知する必要があります。詳細については、「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 トリガーの設定ルール
同じバケット内で重複したトリガーが作成され、1 つのイベントが複数のトリガーを起動するのを防ぐため、Function Compute ではバケット内のトリガー設定が次の条件を満たす必要があります:
トリガーイベント、ファイルプレフィックス、ファイルサフィックスの組み合わせは一意である必要があります。
新しいトリガーは、そのトリガーイベント、ファイルプレフィックス、ファイルサフィックスの組み合わせが既存のトリガーと競合しない場合にのみ作成できます。
次の表は、ネイティブ OSS トリガーの設定ルールの例を示しています。
既存のトリガー | 新しいトリガー | 作成は成功しますか? | 説明 | ||||
トリガーイベント | ファイルプレフィックス | 拡張子 | トリガーイベント | ファイルプレフィックス | ファイルサフィックス | ||
oss:ObjectCreated:PutObject | source | zip | oss:ObjectCreated:* | source | zip | 失敗 | oss:ObjectCreated:* は、すべての ObjectCreated イベントタイプの上位セットです。新しいトリガーのイベント oss:ObjectCreated:* は、同じファイルプレフィックスとサフィックスを持つ既存のトリガーのイベント oss:ObjectCreated:PutObject と一致します。 |
source1 | zip1 | 成功 | 新しいトリガーのイベントタイプとファイルプレフィックスは既存のトリガーと一致しますが、ファイルサフィックスは一致しません。 | ||||
oss:ObjectCreated:PutObject | source | zip | 失敗 | 新しいトリガーのイベントタイプ、ファイルプレフィックス、およびファイルサフィックスはすべて既存のトリガーと一致します。 | |||
source | 1zip | 失敗 | |||||
source1 | zip | 失敗 | |||||
source | なし | 失敗 | 新しいトリガーのイベントタイプとファイルプレフィックスは既存のトリガーと一致します。ファイルサフィックスが設定されていない場合、zip サフィックスを持つオブジェクトが含まれます。これは、ファイルサフィックスも一致することを意味します。 | ||||
なし | zip | いいえ | 新しいトリガーのイベントタイプとファイルサフィックスは既存のトリガーと一致します。ファイルプレフィックスが設定されていない場合、source プレフィックスを持つオブジェクトが含まれます。これは、ファイルプレフィックスも一致することを意味します。 | ||||
source1 | zip1 | 成功 | 新しいトリガーのイベントタイプとファイルプレフィックスは既存のトリガーと一致しますが、ファイルサフィックスは一致しません。 | ||||
1source | 1zip | 成功 | 新しいトリガーのイベントタイプとファイルサフィックスは既存のトリガーと一致しますが、ファイルプレフィックスは一致しません。 | ||||
oss:ObjectCreated:PostObject | source | zip | 成功 | 新しいトリガーのイベントタイプは、既存のトリガーのイベントタイプと一致しません。 | |||
ファイルプレフィックスはオブジェクト名の先頭から、ファイルサフィックスは末尾から照合されます。
次のセクションでは、2 種類の競合について説明します。両方の種類の競合が存在する場合、新しいトリガーは作成できません。一方またはどちらの競合も存在しない場合、新しいトリガーを作成できます。
イベントタイプの競合
既存のトリガーイベントタイプ | 新しいトリガーイベントタイプ | 競合の説明 |
|
|
|
|
|
パス一致の競合
既存のトリガーパス | 新しいトリガーパス | 競合の説明 |
|
| プレフィックスは一致せず、サフィックスは一致します。パスの競合はありません。 |
|
| プレフィックスは一致しますが、サフィックスは一致しません。パスの競合はありません。 |
|
| プレフィックスとサフィックスが一致します。パスの競合があります。 |
同じ OSS イベントタイプを使用して、異なる処理タスクのために異なる関数をトリガーしたい場合は、EventBridge ベースの OSS トリガーを作成できます。
よくある質問
関連ドキュメント
トリガーの設定
ネイティブ OSS トリガーと EventBridge ベースの OSS トリガーを設定および使用する方法の詳細については、「ネイティブ OSS トリガーを設定する」および「EventBridge ベースの OSS トリガーを設定する」をご参照ください。
トリガーに関する質問
どのイベントが関数を実行したかを確認したい場合は、コードロジックからイベントタイプのログを出力できます。詳細については、「ログレコード」をご参照ください。
関数内から別の関数を呼び出したい場合は、API を使用して関数を呼び出すことができます。詳細については、「関数は互いに呼び出せますか?」をご参照ください。