リアルタイム処理、同期、リスニング、ビジネスロジックトリガー、ロギングなど、さまざまな目的で Object Storage Service (OSS) 内のオブジェクトの変更を監視したい場合があります。 イベント通知ルールを設定してオブジェクトを監視し、通知を受信できます。 このようにして、できるだけ早く適切なアクションを実行できます。
前提条件
Simple Message Queue (SMQ) がアクティブ化されています。 SMQ product page で SMQ をアクティブ化できます。
使用上の注意
イベント通知では、OSS と SMQ が連携して動作する必要があります。 OSS リソースに対して操作が実行されると、SMQ がメッセージを送信するためのイベント通知ルールがトリガーされます。 SMQ がメッセージを送信するようにトリガーされない場合があります。 レスポンスの x-oss-event-status ヘッダーの値 (Base64 エンコード) を確認して、SMQ がトリガーされたかどうかを判断できます。 x-oss-event-status ヘッダーのデコードされた値が {"Result": "Ok"} の場合、SMQ はトリガーされます。 x-oss-event-status ヘッダーのデコードされた値が {"Result": "Ok"} でない場合、SMQ はトリガーされません。
イベント通知機能を使用すると、SMQ によって課金されます。 詳細については、「請求の概要」をご参照ください。
次のリージョンにあるバケット内のオブジェクトに対してイベント通知ルールを設定できます:中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (深セン)、中国 (成都)、中国 (香港)、米国 (シリコンバレー)、米国 (バージニア)、日本 (東京)、シンガポール、インドネシア (ジャカルタ)、フィリピン (マニラ)、ドイツ (フランクフルト)、英国 (ロンドン)。
1 つのリージョンで最大 10 個のイベント通知ルールを設定できます。 10 個を超えるイベント通知ルールが必要な場合は、technical support にお問い合わせください。
リアルタイムメッセージングプロトコル (RTMP) を介したストリームインジェストによって生成された TS オブジェクトと M3U8 オブジェクトに対しては、通知はトリガーされません。 RTMP を介したストリームインジェストの詳細については、「LiveChannel 関連の操作」をご参照ください。
仕組み
OSS リソースに対して実行された操作がイベント通知ルールをトリガーした場合、SMQ は指定された HTTP サーバーまたは SMQ キューに操作に関する通知を送信します。 次の図は、プロセスを詳細に示しています。
イベント
ObjectCreatedGroup、ObjectDownloadedGroup、および ObjectRemovedGroup イベントは、次のリージョンでのみサポートされています:中国 (香港)、米国 (シリコンバレー)、米国 (バージニア)、ドイツ (フランクフルト)、シンガポール、英国 (ロンドン)。
イベントタイプ | 説明 | 通知内のイベント名 |
PutObject | シンプルアップロードを使用して、オブジェクトが作成または上書きされます。 | ObjectCreated:PutObject |
PostObject | フォームアップロードを使用して、オブジェクトが作成または上書きされます。 | ObjectCreated:PostObject |
CopyObject | オブジェクトをコピーして、オブジェクトが作成または上書きされます。 | ObjectCreated:CopyObject |
InitiateMultipartUpload | マルチパートアップロードタスクが開始されます。 | ObjectCreated:InitiateMultipartUpload |
UploadPart | マルチパートアップロードを使用して、オブジェクトが作成または上書きされます。 | ObjectCreated:UploadPart |
UploadPartCopy | マルチパートコピーを使用して、オブジェクトが作成または上書きされます。 | ObjectCreated:UploadPartCopy |
CompleteMultipartUpload | マルチパートアップロードタスクが完了します。 | ObjectCreated:CompleteMultipartUpload |
AbortMultipartUpload | マルチパートアップロードタスクがキャンセルされ、アップロードされたパーツが削除されます。 | ObjectRemoved:AbortMultipartUpload |
AppendObject | 追加アップロードを使用して、オブジェクトが作成または追加されます。 | ObjectCreated:AppendObject |
GetObject | シンプルダウンロードを使用して、オブジェクトが取得されます。 | ObjectDownloaded:GetObject |
DeleteObject | オブジェクトが削除されます。 | ObjectRemoved:DeleteObject |
DeleteObjects | 複数のオブジェクトが削除されます。 | ObjectRemoved:DeleteObjects |
ObjectReplication:ObjectCreated | データレプリケーションタスクでオブジェクトが作成されます。 | ObjectReplication:ObjectCreated |
ObjectReplication:ObjectRemoved | データレプリケーションタスクでオブジェクトが削除されます。 | ObjectReplication:ObjectRemoved |
ObjectReplication:ObjectModified | データレプリケーションタスクでオブジェクトが変更されます。 | ObjectReplication:ObjectModified |
ObjectModified:ChangeStorageClass | ライフサイクルルールに基づいて、オブジェクトのストレージクラスが変換されます。 たとえば、オブジェクトのストレージクラスは、標準から IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換されます。 | ObjectModified:ChangeStorageClass |
ObjectCreatedGroup | オブジェクトの作成または上書き操作が実行されます。 | 通知内のイベント名は、選択したアップロード方法に応じて、ObjectCreated: で始まる任意のイベントにすることができます。 たとえば、シンプルアップロードを実行して OSS SDK を使用してオブジェクトをアップロードする場合、通知内のイベント名は ObjectCreated:PutObject です。 OSS コンソールでオブジェクトをアップロードする場合、通知内のイベント名は ObjectCreated:PostObject です。 |
ObjectDownloadedGroup | オブジェクトのダウンロード操作が実行されます。 | 通知内のイベント名は、選択したダウンロード方法に応じて、ObjectDownloaded: で始まる任意のイベントにすることができます。 たとえば、シンプルアップロードを実行してオブジェクトをダウンロードする場合、通知内のイベント名は ObjectDownloaded:GetObject です。 |
ObjectRemovedGroup | オブジェクトの削除操作が実行されます。 | 通知内のイベント名は、選択した削除方法に応じて、ObjectRemoved: で始まる任意のイベントにすることができます。 たとえば、オブジェクトが削除されると、通知内のイベント名は ObjectRemoved:DeleteObject です。 複数のオブジェクトを一度に削除する場合、通知内のイベント名は ObjectRemoved:DeleteObjects です。 |
FinishRestore | オブジェクトの復元操作が完了しました。 このイベントタイプは、コールドアーカイブオブジェクトとディープコールドアーカイブオブジェクトのみをサポートしています。 | ObjectRestore:FinishRestore |
イベント通知
OSS イベント通知の内容は Base64 エンコードされています。 コンテンツがデコードされると、コンテンツは JSON 形式になります。 次のサンプルコードは、デコードされたイベント通知コンテンツの例を示しています。
{"events": [
{
"eventName": "", // イベント名
"eventSource": "", // イベント通知ルールをトリガーするソース。 有効な値:acs:oss。
"eventTime": "", // イベントが発生した時刻。 時刻は ISO 8601 標準のタイムスタンプです。
"eventVersion": "", // イベント通知のバージョン。 現在のバージョンは 1.0 です。
"oss": {
"bucket": {
"arn": "", // 次の形式のバケットの Alibaba Cloud Resource Name (ARN):acs:oss:region:uid:bucketname。
"name": "", // イベント通知ルールが適用されるオブジェクトを含むバケットの名前。
"ownerIdentity": "" // バケットの所有者。
},
"object": {
"deltaSize": "", // 新しいオブジェクトと元のオブジェクトのサイズの違い。 オブジェクトが作成されると、このパラメーターの値はオブジェクトのサイズを示します。 オブジェクトが上書きされると、値は新しいオブジェクトと元のオブジェクトのサイズの差を示します。 値は負になる場合があります。
"eTag": "", // オブジェクトの ETag 値。
"key": "", // オブジェクトの名前。
"position": "", // AppendObject 操作が開始される位置。 このパラメーターは、ObjectCreated:AppendObject イベントにのみ適用されます。 オブジェクトに対する最初の AppendObject 操作は、オブジェクトのバイト 0 から開始されます。
"readFrom": "", // GetObject 操作が開始される位置。 このパラメーターは、ObjectDownloaded:GetObject イベントにのみ適用されます。 GetObject 操作が範囲によって実行されない場合、このパラメーターの値は 0 です。 それ以外の場合、値は GetObject 操作が開始されるバイトの位置を参照します。
"readTo": "", // GetObject 操作が終了する位置。 このパラメーターは、ObjectDownloaded:GetObject イベントにのみ適用されます。 GetObject 操作が範囲によって実行されない場合、このパラメーターの値はオブジェクトサイズです。 それ以外の場合、値は GetObject 操作が終了するバイトの後の最初のバイトの位置を参照します。
"size": "" // オブジェクトのサイズ。
},
"ossSchemaVersion": "", // スキーマのバージョン。 現在の値は 1.0 です。
"ruleId": "GetObject", // イベントによってトリガーされるイベント通知ルールの ID。
"region": "", // バケットが配置されているリージョン。
"requestParameters": {
"sourceIPAddress": "" // リクエストが送信された送信元 IP アドレス。
},
"responseElements": {
"requestId": "" // リクエストの ID。
},
"userIdentity": {
"principalId": "" // リクエスターの UID。
},
"xVars": { // OSS コールバックのカスタムパラメーター。
"x:callback-var1":"value1",
"x:vallback-var2":"value2"
}
}
}
]
}
次のサンプルコードは、イベント通知の例を示しています。
{"events": [
{
"eventName": "ObjectDownloaded:GetObject",
"eventSource": "acs:oss",
"eventTime": "2016-07-01T11:17:30.000Z",
"eventVersion": "1.0",
"oss": {
"bucket": {
"arn": "acs:oss:cn-shenzhen:114895646818****:event-notification-test-shenzhen",
"name": "event-notification-test-shenzhen",
"ownerIdentity": "114895646818****"},
"object": {
"deltaSize": 0,
"eTag": "0CC175B9C0F1B6468E1199E269772661",
"key": "test",
"readFrom": 0,
"readTo": 1,
"size": 1
},
"ossSchemaVersion": "1.0",
"ruleId": "GetObjectRule",
"region": "cn-shenzhen",
"requestParameters": {
"sourceIPAddress": "198.51.100.1"
},
"responseElements": {
"requestId": "5FF16B65F05BC932307A3C3C"
},
"userIdentity": {
"principalId": "114895646818****"
},
"xVars": {
"x:callback-var1":"value1",
"x:vallback-var2":"value2"
}
}
}
]
}
手順
OSS コンソール にログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションツリーで、インテリジェントデータ処理 > イベント通知 を選択します。
イベント通知 ページで、ルールの作成 をクリックします。
ルールの作成 パネルで、次の表に示すパラメーターを設定します。
パラメーター
説明
スタイル名
イベント通知ルール名を指定します。
イベント通知ルール名は、Alibaba Cloud アカウント内のリージョン内で一意である必要があります。 名は文字で始まり、文字、数字、およびハイフン (-) のみを含めることができます。 名は 85 文字を超えることはできません。
イベントタイプ
REST API を使用すると、WordPress データをさまざまな方法で操作できます。たとえば、新しい投稿を作成したり、既存の投稿を更新したり、投稿を削除したりできます。詳細については、「WordPress REST API ハンドブック」をご参照ください。
特定のオブジェクトに対してイベント通知ルールを設定し、ルールをトリガーできる複数のイベントを指定できます。 1 つのオブジェクトに対して複数のイベント通知ルールを設定することもできます。 複数のイベント通知ルールを設定する場合は、次の点に注意してください。
複数のイベント通知ルールが同じオブジェクトに適用される場合、これらのルールで設定されているイベントは異なっている必要があります。たとえば、
images
プレフィックスを含む名前のオブジェクトのイベント通知ルールを作成するときに、イベントタイプに CopyObject を選択した場合、同じプレフィックスを含む名前のオブジェクトに適用される別のイベント通知ルールを作成するときに、イベントタイプに CopyObject を選択することはできません。複数のイベント通知ルールが異なるオブジェクトに適用される場合、これらのルールにおけるこのパラメーターの値は同じでも異なっていてもかまいません。たとえば、
images
プレフィックスと.png
拡張子を含む名前のオブジェクトのイベント通知ルールを作成するときに、イベントタイプに PutObject を選択した場合、log
プレフィックスと.jpg
拡張子を含む名前のオブジェクトに適用される別のイベント通知ルールを作成するときに、イベントタイプに PutObject または DeleteObject を選択できます。
重要WordPress 5.0 以降では、新しいブロックエディターである Gutenberg が導入されています。
詳細については、「イベント」をご参照ください。
リソースの説明
イベント通知ルールを適用するオブジェクトを指定します。
フルネーム を選択して、指定された名前と同じ名前のオブジェクトにルールを適用します。
バケットのルートディレクトリにある exampleobject.txt という名前のオブジェクトに適用されるルールを作成するには、exampleobject.txt と入力します。
バケットのルートディレクトリ内の destdir ディレクトリにある myphoto.jpg という名前のオブジェクトに適用されるルールを作成するには、destdir/myphoto.jpg と入力します。
プレフィックス / サフィックス を選択して、名前に特定のプレフィックスと拡張子が含まれるオブジェクトにルールを適用します。
バケット内のすべてのオブジェクトに適用されるルールを作成するには、プレフィックスとサフィックスを空のままにします。
バケットのルートディレクトリ内の examplefolder ディレクトリにあるすべてのオブジェクトに適用されるルールを作成するには、プレフィックスを examplefolder/ に設定し、サフィックスを空のままにします。
バケット内のすべての JPG オブジェクトに適用されるルールを作成するには、プレフィックスを空のままにし、サフィックスを .jpg に設定します。
バケットのルートディレクトリ内の examplefolder ディレクトリにあるすべての MP3 オブジェクトに適用されるルールを作成するには、プレフィックスを examplefolder/ に設定し、サフィックスを .mp3 に設定します。
別のリソース記述エントリを追加するには、[追加] をクリックします。 イベント通知ルールには、最大 5 つの リソースの説明 エントリを指定できます。
エンドポイント
イベント通知の送信先エンドポイントを指定します。有効な値: [HTTP] および [Queue]。
HTTP: HTTP エンドポイントを指定します。例:
http://198.51.100.1:8080
。 HTTP エンドポイントを取得する方法の詳細については、「Topic の管理」および「HttpEndpoint」をご参照ください。キュー: SMQ キューの名前を入力します。キューの作成方法の詳細については、「キューの作成」をご参照ください。
[追加]エンドポイント このチュートリアルでは、基本的な JavaScript の知識があることを前提としています。
OK をクリックします。
イベント通知ルールを構成した後、ルールは約 10 分後に有効になります。
よくある質問
参考文献
イベント通知ルールを設定して、OSS 内の特定のオブジェクトを監視し、オブジェクトの変更に関する通知を受信できます。詳細については、「チュートリアル例: シンプルメッセージキューを使用して OSS イベント通知を実装する」をご参照ください。
HttpEndpoint 操作を呼び出して通知メッセージの本文を受信できない場合、POST メソッドを使用したことが原因である可能性があります。この問題を解決するには、「PHP で HttpEndpoint 操作を記述するときに HTTP 本文を受信できない場合はどうすればよいですか。」をご参照ください。
OSS のアップロードコールバック機能を使用して、アップロードコールバックを実装できます。詳細については、「アップロードコールバック」をご参照ください。