リアルタイム処理、同期、リスニング、ビジネスロジックトリガー、ロギングなど、さまざまな理由でObject Storage Service (OSS) のオブジェクトの変更を監視することができます。 イベント通知ルールを設定してオブジェクトを監視し、通知を受け取ることで、できるだけ早い機会に適切に行動できるようにすることができます。
前提条件
メッセージサービス (MNS) が起動されます。 でMNSを有効にできます。 MNS製品ページ。
使用上の注意
イベント通知では、OSSとMNSが協調して動作する必要があります。 OSSでアクションが実行されると、MNSがメッセージを送信するためのイベント通知ルールがトリガーされます。 MNSは、メッセージを送信するためにトリガされない場合がある。 これを防ぐには、応答でx-oss-event-statusヘッダー (Base64-encoded) を使用して、MNSがトリガーされているかどうかを判断します。 x-oss-event-statusのデコード値が {"Result": "Ok"} の場合、MNSがトリガーされます。 x-oss-event-statusのデコード値が {"Result": "Ok"} でない場合、MNSはトリガーされません。
イベント通知機能を使用すると、MNSによって課金されます。 詳細は、「料金」をご参照ください。
次のリージョン: 中国 (杭州) 、中国 (上海) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (深セン) 、中国 (成都) 、中国 (香港) 、米国 (シリコンバレー) 、米国 (バージニア) 、日本 (東京) 、シンガポール、オーストラリア (シドニー) 、インドネシア (ジャカルタ) 、フィリピン (マニラ) 、インド (ムンバイ) 、ドイツ (フランクフルト) 、英国 (ロンドン)
1つのリージョンで最大10個のイベント通知ルールを設定できます。
リアルタイムメッセージングプロトコル (RTMP) を介してストリームを取り込むことによって生成されたTSおよびM3U8オブジェクトの通知はトリガーされません。 RTMPによるストリーム取り込みの詳細については、「概要」をご参照ください。
制御ポリシー機能の動作
OSSリソースで実行された操作がイベント通知ルールをトリガーすると、MNSは指定されたHTTPサーバーまたはMNSキューに操作に関する通知を送信します。 プロセスの詳細を次の図に示します。
Events
ObjectCreatedGroup、ObjectDownloadedGroup、およびObjectRemovedGroupイベントは、中国 (香港) 、米国 (シリコンバレー) 、米国 (バージニア) 、ドイツ (フランクフルト) 、オーストラリア (シドニー) 、シンガポール、英国 (ロンドン) の各リージョンでのみサポートされています。
FinishRestoreイベントは、Cold ArchiveオブジェクトとDeep Cold Archiveオブジェクトでのみサポートされます。
イベント | 説明 |
PutObject | オブジェクトは、単純なアップロードを使用して作成または上書きされます。 |
PostObject | オブジェクトは、フォームアップロードを使用して作成または上書きされます。 |
CopyObject | オブジェクトは、オブジェクトをコピーすることによって作成または上書きされます。 |
InitiateMultipartUpload | マルチパートアップロードタスクが開始されます。 |
UploadPart | マルチパートアップロードを使用してオブジェクトを作成または上書きします。 |
UploadPartCopy | オブジェクトは、マルチパートコピーを使用して作成または上書きされます。 |
CompleteMultipartUpload | マルチパートアップロードタスクが完了しました。 |
AbortMultipartUpload | マルチパートアップロードタスクがキャンセルされ、アップロードされたパーツが削除されます。 |
AppendObject | オブジェクトは、追加アップロードを使用して作成または追加されます。 |
GetObject | オブジェクトは、単純なダウンロードを使用して取得されます。 |
DeleteObject | オブジェクトが削除されます。 |
オブジェクトの削除 | 複数のオブジェクトが削除されます。 |
ObjectReplication:ObjectCreated | オブジェクトはデータ複製タスクで作成されます。 |
ObjectReplication:ObjectRemoved | データ複製タスクでオブジェクトが削除されます。 |
ObjectReplication:ObjectModified | データ複製タスクでオブジェクトが上書きされます。 |
ObjectCreatedGroup | オブジェクトの作成または上書き操作が実行されます。 |
ObjectDownloadedGroup | オブジェクトダウンロード操作が実行されます。 |
ObjectRemovedGroup | オブジェクト削除操作が実行されます。 |
FinishRestore | オブジェクト復元操作が完了しました。 |
イベント通知
OSSイベント通知の内容がBase64-encodedされます。 コンテンツがデコードされると、コンテンツはJSON形式になります。 次のサンプルコードは、デコードされたイベント通知コンテンツの例を示します。
{"events": [
{
"eventName": "", // イベント名。
"eventSource": "", // イベント通知をトリガーするソース。 有効値: acs:oss。
"eventTime": "", // イベントが発生した時刻。 時間は、ISO 8601標準におけるタイムスタンプである。
"eventVersion": "", // イベント通知のバージョン。 現在のバージョンは 1.0 です。
"oss": {
"bucket": {
"arn": "", // バケットのAlibaba Cloudリソース名 (ARN) の形式: acs:oss:region:uid:bucketname。
"name": "", // イベント通知ルールが適用されるオブジェクトを含むバケットの名前。
"ownerIdentity": "" // バケットの所有者。
},
"オブジェクト":{
"deltaSize": "", // 新しいオブジェクトと元のオブジェクトのサイズの違い。 オブジェクトを作成する場合、このパラメーターの値はオブジェクトのサイズを示します。 オブジェクトを上書きする場合、値は新しいオブジェクトと元のオブジェクトのサイズの差を示します。 値は負であってもよい。
"eTag": "", // オブジェクトのETag値。
"key": "", // オブジェクトの名前。
"position": "", // AppendObject操作の開始位置。 このパラメーターは、ObjectCreated:AppendObjectイベントにのみ適用されます。 オブジェクトに対する最初のAppendObject操作は、オブジェクトのバイト0から始まります。
"readFrom": "", // GetObject操作の開始位置。 このパラメーターは、ObjectDownloaded:GetObjectイベントにのみ適用されます。 GetObject操作がrangeによって実行されない場合、このパラメーターの値は0です。 それ以外の場合、値はGetObject操作が開始されるバイトの位置を参照します。
"readTo": "", // 最後のGetObject操作が終了する位置。 このパラメーターは、ObjectDownloaded:GetObjectイベントにのみ適用されます。 GetObject操作がrangeによって実行されない場合、このパラメーターの値はオブジェクトサイズです。 これが範囲ベースの操作である場合、値は、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 ****"} 、
"オブジェクト":{
"deltaSize": 0,
"eTag": "0CC175B9C0F1B6468E1199E269772661" 、
"key": "test",
"readFrom": 0,
"readTo": 1,
「サイズ」: 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文字を超えることはできません。
イベントタイプ
ドロップダウンリストから1つ以上のイベントを選択します。 たとえば、オブジェクトをコピーして特定のオブジェクトを作成または上書きしたときに通知を受け取る場合は、[CopyObject] を選択します。
特定のオブジェクトに対してイベント通知ルールを設定し、ルールをトリガーできる複数のイベントを指定できます。 オブジェクトに対して複数のイベント通知ルールを設定することもできます。 複数のイベント通知ルールを設定する場合は、次の項目に注意してください。
複数のイベント通知ルールが同じオブジェクトに適用される場合、これらのルールで構成されるイベントは異なる必要があります。 たとえば、名前に
images
プレフィックスが含まれるオブジェクトのイベント通知ルールを作成するときに、イベントタイプとしてCopyObjectを選択した場合、名前に同じプレフィックスが含まれるオブジェクトに適用される別のイベント通知ルールを作成するときに、イベントタイプとしてCopyObjectを選択することはできません。複数のイベント通知ルールが異なるオブジェクトに適用される場合、これらのルールのこのパラメーターの値は同じでも異なっていてもかまいません。 たとえば、名前に
images
プレフィックスとが含まれるオブジェクトのイベント通知ルールを作成するときに、イベントタイプにPutObjectを選択したとします。png
拡張機能では、名前にログ
プレフィックスとが含まれるオブジェクトに対して別のイベント通知ルールを作成するときに、イベントタイプにPutObjectまたはDeleteObjectを選択できます。jpg
拡張子。
重要バージョン管理されたバケットからオブジェクトを削除するときにバージョンIDを指定しない場合、DeleteObjectまたはDeleteObjectsイベント通知はトリガーされません。 この場合、オブジェクトのバージョンは削除されません。 オブジェクトの現在のバージョンは以前のバージョンとして格納され、削除マーカーがオブジェクトに追加されます。
イベントをトリガーできるオブジェクト操作の詳細については、「イベント」をご参照ください。
リソースの説明
イベント通知ルールを適用するオブジェクトを指定します。
指定した名前と同じ名前のオブジェクトにルールを適用するには、 を選択します。
バケットのルートディレクトリにあるexampleobject.txtという名前のオブジェクトに適用されるルールを作成するには、exampleobject.txtと入力します。
バケットのルートディレクトリ内のdestdirディレクトリにあるmyphoto.jpgという名前のオブジェクトに適用されるルールを作成するには、destdir/myphoto.jpgと入力します。
を選択すると、指定されたプレフィックスと拡張子を含む名前のオブジェクトにルールが適用されます。
バケット内のすべてのオブジェクトに適用されるルールを作成するには、PrefixとSuffixを空のままにします。
バケットのルートディレクトリ内のexamplefolderディレクトリ内のすべてのオブジェクトに適用されるルールを作成するには、Prefixをexamplefolder/ に設定し、Suffixを空のままにします。
バケット内のすべてのJPGオブジェクトに適用されるルールを作成するには、Prefixを空のままにし、Suffixをに設定します。. jpg
バケットのルートディレクトリ内のexamplefolderディレクトリ内のすべてのMP3オブジェクトに適用されるルールを作成するには、Prefixをexamplefolder/ に設定し、Suffixをに設定します。mp3
別のリソース説明エントリを追加するには、[追加] をクリックします。 イベント通知ルールには、最大5つのエントリを指定できます。
エンドポイント
通知の送信先の端末を指定します。 有効な値: HTTPエンドポイントとキュー。
HTTP: 通知の送信先のHTTPエンドポイントを入力します。 例:
http:// 198.51.100.1:8080
エンドポイントの詳細については、「トピックの管理」および「HttpEndpoint」をご参照ください。キュー: MNSキューの名前を入力します。 キューの作成方法の詳細については、「キューの作成」をご参照ください。
エンドポイントまたはキューを追加するには、[追加] をクリックします。 イベント通知ルールには、最大5つのエンドポイントエントリを指定できます。
OK をクリックします。
イベント通知ルールを設定した後、ルールは約10分後に有効になります。
よくある質問
Q: イベント通知ルールがDeleteObjectおよびDeleteObjectsイベントを監視するように設定されているバケット内のオブジェクトに対して削除操作を実行すると、通知が送信されないのはなぜですか。
A: バケットのバージョン管理が有効になっています。 ただし、削除操作ではオブジェクトバージョンIDは指定されません。 削除操作の実行時にオブジェクトのバージョンIDを指定しない場合、現在のバージョンが以前のバージョンに変換され、削除マーカーがオブジェクトに追加されます。 したがって、削除操作は、DeleteObjectおよびDeleteObjectsイベントに関連するイベント通知ルールをトリガーしません。
参考資料
イベント通知ルールを設定して、OSS内の特定のオブジェクトを監視し、オブジェクトの変更に関する通知を受信できます。 詳細については、「チュートリアル: MNSを使用してOSSイベントの通知を送信する」をご参照ください。
HttpEndpointを使用して通知メッセージの本文を受信できない場合は、おそらくPOSTメソッドを使用しました。 問題を修正する方法の詳細については、「PHPでHttpEndpoint操作を記述したときにHTTPボディを受信できない場合の対処方法」をご参照ください。
OSSのアップロードコールバック機能を使用して、アップロードコールバックを実装できます。 詳細については、「コールバックのアップロード」をご参照ください。