Object Storage Service (OSS) をFunction Computeと統合すると、OSSイベントにより、OSSバケット内のデータを処理する関数の実行がトリガーされます。 このトピックでは、Function ComputeのネイティブOSSトリガーとEventBridgeベースのOSSトリガーの制限、イベントタイプ、トリガールールについて説明します。
背景情報
OSSは、OSSトリガーを使用してFunction Computeとシームレスに統合できます。 OSSイベントを使用して関数を記述し、関数を呼び出すことができます。 OSSが指定されたタイプのイベントをキャプチャすると、関連付けられた関数が実行されます。 たとえば、PutObjectイベントを処理する関数を記述できます。 OSSのPutObject操作を呼び出して画像をOSSにアップロードすると、関数が自動的に呼び出されて画像が処理されます。
OSSがFunction Computeと統合された後、さまざまな関数を呼び出して画像やオーディオファイルを処理し、処理したファイルを特定のストレージサービスに書き込むことができます。 プロセス全体で、関数ロジックの記述に集中するだけで済みます。 Function Computeは、大量のデータをリアルタイムで並行して処理できます。
OSSトリガーの制限
ネイティブOSSトリガーのみが、バケットの関連するすべてのトリガーのクエリをサポートします。
ビジネス要件に基づいて、既存のOSSトリガーを再利用したり、使用されなくなったOSSトリガーを削除したりできます。 これにより、バケットに関連付けられたトリガーの数が10を超えるのを防ぎます。 関数の詳細ページの [トリガー管理 (URL)] タブで、管理するトリガーを見つけ、[設定] 列のバケット名をクリックします。 [OSSバケット関連のトリガー] パネルで、バケットに関連付けられている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 | OSSでマルチパートアップロードタスクを開始するには、InitiateMultipartUpload操作が呼び出されます。 マルチパートアップロードを使用してデータをアップロードする前に、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操作のいずれかが呼び出されると、関数がトリガーされます。 | |
ObjectRemoved | oss:ObjectRemoved:DeleteObject | オブジェクトを削除するには、DeleteObject操作が呼び出されます。 詳細については、「DeleteObject」をご参照ください。 |
oss:ObjectRemoved:DeleteObjects | DeleteMultipleObjects操作は、一度に複数のオブジェクトを削除するために呼び出されます。 詳細については、「DeleteMultipleObjects」をご参照ください。 | |
oss:ObjectRemoved:AbortMultipartUpload | 指定されたアップロードIDに基づいてマルチパートアップロードタスクをキャンセルするには、AbortMultipartUpload操作が呼び出されます。 詳細については、「AbortMultipartUpload」をご参照ください。 | |
ObjectModified | oss:ObjectModified:UpdateObjectMeta | UpdateObjectMeta操作は、オブジェクトの属性を変更するために呼び出されます。 説明 このタイプのイベントは、中国 (杭州) 、中国 (上海) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (フフホト) 、中国 (深セン) 、中国 (成都) の各リージョンでサポートされています。 |
ObjectReplication | oss:ObjectReplication:ObjectCreated | オブジェクトはデータ複製タスクで作成されます。 説明 このイベントは、中国 (杭州) 、中国 (上海) 、中国 (北京) 、中国 (深セン) の各リージョンでサポートされています。 |
oss:ObjectReplication:ObjectModified | データ複製タスクでオブジェクトが上書きされます。 説明 このイベントは、中国 (杭州) 、中国 (上海) 、中国 (北京) 、中国 (深セン) の各リージョンでサポートされています。 | |
oss:ObjectReplication:ObjectRemoved | データ複製タスクでオブジェクトが削除されます。 説明 このイベントは、中国 (杭州) 、中国 (上海) 、中国 (北京) 、中国 (深セン) の各リージョンでサポートされています。 |
トリガールール
ループトリガーを実行しない
OSSイベントトリガーを使用する場合は、ループトリガーを実行しないでください。 たとえば、オブジェクトをOSSバケットにアップロードすると、アップロード操作によって関数がトリガーされます。 この関数は、OSSバケットに書き込まれる1つ以上のオブジェクトを生成し、書き込み操作によって関数が再びトリガーされます。 この結果、ループが生じる。
ループトリガーによる追加コストを防ぐため、OSSトリガーの作成時にオブジェクトプレフィックスまたはオブジェクトサフィックスを設定することを推奨します。 たとえば、Object Prefixをsrc
に、Object Prefixをdst
に設定できます。 このように、生成されたオブジェクトは関数を再度呼び出さない。 オブジェクトプレフィックスまたはオブジェクトサフィックスを設定しない場合、すべてのプレフィックスとサフィックスを持つオブジェクトが一致します。 詳細については、「OSSトリガーの設定」をご参照ください。
セマンティックの一意性を確保する
トリガーの構成セマンティクスは、トリガーが作成されるバケット全体で一意である必要があります。 設定には、Trigger Eventパラメーター、Object Prefixパラメーター、およびObject Suffixパラメーターが含まれます。 たとえば、バケットのトリガーイベントがoss:ObjectCreated:PutObjectであるトリガーを作成します。 トリガーのObject PrefixパラメーターとObject Suffixパラメーターは、sourceとzipに設定されます。 次の表に、バケットの新しいトリガーが有効かどうかを示します。
トリガーイベント | オブジェクトプレフィックス | オブジェクト接尾辞 | 有効 | 説明 |
oss:ObjectCreated:* | ソース1 | zip1 | いいえ | 新しいトリガーは、既存のトリガーと同じタイプのイベントで構成されます。 説明 oss:ObjectCreated:* には、すべてのObjectCreatedイベントが含まれます。 ObjectCreatedイベントタイプのトリガーをバケットに作成した場合、oss:ObjectCreated:* イベントタイプのトリガーは作成できません。 同様に、oss:ObjectCreated:* イベントタイプのトリガーをバケットに作成した場合、ObjectCreatedイベントのトリガーは作成できません。 |
oss:ObjectCreated:PutObject | source | zip | いいえ | 新しいトリガーは、既存のトリガーと同じObject PrefixパラメーターとObject Suffixパラメーターの値で設定されます。 |
source | なし | いいえ | 新しいトリガーは、既存のトリガーと同じObject Prefixパラメーターの値で設定されます。 Object Suffixパラメーターを指定しない場合、zipサフィックスの付いたオブジェクトが含まれます。 | |
なし | zip | いいえ | 新しいトリガーは、既存のトリガーと同じObject Suffixパラメーターの値で設定されます。 Object Prefixパラメーターを指定しない場合、ソースプレフィックスを持つオブジェクトが含まれます。 | |
ソース1 | zip1 | はい | 新しいトリガーは、既存のトリガーとは異なるObject PrefixパラメーターとObject Suffixパラメーターの値で設定されます。 | |
source | zip1 | はい | 新しいトリガーは、既存のトリガーとは異なるObject Suffixパラメーターの値で設定されます。 | |
ソース1 | zip | はい | 新しいトリガーは、既存のトリガーとは異なるObject Prefixパラメーターの値で設定されます。 | |
oss:ObjectCreated:PostObject | source | zip | はい | 新しいトリガーは、既存のトリガーとは異なるトリガーイベントパラメーターの値で設定されます。 |
ネイティブOSSトリガーでは、セマンティックの一意性を確保する必要があります。 したがって、異なる関数に対して同じOSSトリガーを設定することはできません。
同じイベントタイプの異なる関数に対して同じOSSトリガーを設定する場合は、EventBridgeベースのOSSトリガーを設定できます。 詳細については、「EventBridgeベースのOSSトリガーの設定」をご参照ください。
よくある質問
関連ドキュメント
トリガーの設定
ネイティブOSSトリガーとEventBridgeベースのOSSトリガーを設定および使用する方法の詳細については、「ネイティブOSSトリガーの設定」および「EventBridgeベースのOSSトリガーの設定」をご参照ください。
トリガー
どのイベントが関数をトリガーするかを確認する場合は、コードにイベントタイプのログを印刷するようにシステムを設定できます。 詳細は、「ログレコード」をご参照ください。
関数を使用して別の関数を呼び出す場合は、関数を呼び出すAPI操作を指定できます。 詳細については、「関数はお互いを呼び出すことができますか? 」をご参照ください。
関数を調整する場合は、関数ワークフローを使用するか、非同期呼び出しの宛先サービスを設定できます。 詳細については、「ビデオ処理ワークフローシステム」および「非同期呼び出しの宛先の設定」をご参照ください。
トリガー関连のチュートリアル
OSSにアップロードされたZIPファイルを解凍する方法の詳細については、「Function Computeを使用してOSSのファイルを自動的に解凍する」をご参照ください。
パッケージ内の複数のOSSオブジェクトをダウンロードする方法の詳細については、「Function Computeを使用してOSSから複数のオブジェクトをパッケージ化およびダウンロードする」をご参照ください。
オーディオファイルとビデオファイルの処理、オーディオ情報とビデオ情報の取得、またはオーディオファイルとビデオファイルにウォーターマークを追加する方法の詳細については、「Function ComputeのFFmpegベースのアプリケーションを使用したオーディオファイルとビデオファイルの処理」をご参照ください。
大きなビデオのトランスコードを高速化したり、複雑な操作を実行したりする場合は、CloudFlowを使用してビデオ処理システムを開発できます。 詳細については、「サーバーレスアーキテクチャでの柔軟で可用性の高いオーディオおよびビデオ処理システムの構築」をご参照ください。