Object Storage Service (OSS) リソースに対して特定の操作が行われると、Simple Message Queue (SMQ、旧称 MNS) が通知をプッシュします。イベント通知ルールを設定すると、これらの通知をキューにルーティングし、ダウンストリームで処理できます。
仕組み
イベント通知ルールを作成すると、SMQ は指定された OSS リソースを監視し、一致するイベントが発生した際に、事前に設定した受信先(例:キュー)に通知をプッシュします。
OSS は、イベント通知ルールに一致するリクエストに対して、x-oss-process-status 応答ヘッダーを追加します。このヘッダーは、通知が正常に配信されたかどうかに関係なく付与されます。また、元のリクエストへの応答には影響しません。どのルールにも一致しないリクエストには、このヘッダーは含まれません。
ヘッダーの値は Base64 エンコードされています。デコード後の JSON ペイロードには、以下のフィールドが含まれます。
{
"code": "Success",
"message": "NotificationSucceed",
"type": "EventNotification",
"version": "1.0"
}フィールド | 説明 |
| 通知が生成されたかどうかを示します。 |
| 結果の説明です。失敗時には、このフィールドに原因が記載されます。 |
| 操作タイプです。イベント通知の場合、常に |
| プロトコルバージョンです。 |
メッセージ配信の詳細については、「キュー」をご参照ください。
利用シーン
共有バケットでの操作を追跡 — バケット内のオブジェクトが、承認済みユーザーによってアップロード・削除・変更された際に通知を受け取ります。
アクセスパターンを分析 — 通知を集約して操作頻度を測定したり、トレンドを把握したり、E-MapReduce (EMR) などの分析サービスにデータを送信したりできます。
リクエストレートをモニター — OSS リソースに対する操作の QPS を追跡します。
注意事項
新規のイベント通知ルールが有効になるまで、約 10 分かかります。
SMQ は、各イベント通知ルールに対して自動的にトピックを作成します。トピックには課金が発生する場合があります。詳細については、「課金概要」をご参照ください。
イベント通知ルールは作成または削除できますが、変更はできません。ルールを更新する場合は、既存のルールを削除してから新しいルールを作成してください。
サポートされるイベントタイプ
イベントはカテゴリごとにグループ化されています。ワイルドカードサフィックス :* を使用すると、そのカテゴリに属するすべてのイベント(今後追加されるイベントタイプも含む)に一致します。
オブジェクト作成イベント
イベントタイプ | トリガー |
ObjectCreated:PutObject | PutObject によりオブジェクトがアップロードされます。 |
ObjectCreated:PostObject | PostObject により HTML フォーム経由でオブジェクトがアップロードされます。 |
ObjectCreated:CopyObject | CopyObject により、同一バケット内またはバケット間でオブジェクトがコピーされます。 |
ObjectCreated:AppendObject | AppendObject により、既存のオブジェクトにデータが追加されます。 |
ObjectCreated:InitiateMultipartUpload | InitiateMultipartUpload により、マルチパートアップロードタスクが開始されます。 |
ObjectCreated:UploadPart | UploadPart により、マルチパートアップロードの一部がアップロードされます。 |
ObjectCreated:UploadPartCopy | UploadPartCopy により、マルチパートアップロードの一部としてデータがコピーされます。 |
ObjectCreated:CompleteMultipartUpload | CompleteMultipartUpload により、マルチパートアップロードが完了します。 |
ObjectCreated:PutSymlink | PutSymlink により、宛先オブジェクトへのシンボリックリンクが作成されます。 |
ObjectCreated:* |
|
オブジェクトダウンロードイベント
イベントタイプ | トリガー |
ObjectDownloaded:GetObject | GetObject によりオブジェクトがダウンロードされます。 |
オブジェクト変更イベント
イベントタイプ | トリガー |
ObjectModified:UpdateObjectMeta | UpdateObjectMeta によりオブジェクトのメタデータが更新されます。 |
ObjectModified:ChangeStorageClass | ライフサイクルルールによりオブジェクトのストレージクラスが変更されます。 |
ObjectModified:* |
|
オブジェクト削除イベント
イベントタイプ | トリガー |
ObjectRemoved:DeleteObject | DeleteObject によりオブジェクトが削除されます。 |
ObjectRemoved:DeleteObjects | DeleteMultipleObjects により、1 回のリクエストで複数のオブジェクトが削除されます。 |
ObjectRemoved:AbortMultipartUpload | AbortMultipartUpload により、マルチパートアップロードがキャンセルされ、アップロード済みのパーツが削除されます。 |
ObjectRemoved:* |
|
データレプリケーションイベント
イベントタイプ | トリガー |
ObjectReplication:ObjectCreated | データレプリケーションタスク中にオブジェクトが作成されます。 |
ObjectReplication:ObjectRemoved | データレプリケーションタスク中にオブジェクトが削除されます。 |
ObjectReplication:ObjectModified | データレプリケーションタスク中にオブジェクトが上書きされます。 |
ObjectReplication:* |
|
オブジェクト復元イベント
イベントタイプ | トリガー |
ObjectRestore:FinishRestore | コールドアーカイブまたはディープコールドアーカイブオブジェクトの復元が完了します。このイベントタイプは、コールドアーカイブおよびディープコールドアーカイブオブジェクトにのみ適用されます。 |
イベント通知メッセージフォーマット
メッセージの内容は Base64 エンコードされています。デコード後のペイロードは、以下の構造を持つ JSON オブジェクトです。
{
"events": [
{
"eventName": "ObjectDownloaded:GetObject",
"eventSource": "acs:oss",
"eventTime": "2016-07-01T11:17:30.000Z",
"eventVersion": "1.0",
"oss": {
"bucket": {
"arn": "acs:oss:cn-shenzhen:123456789098****:event-notification-test-shenzhen",
"name": "event-notification-test-shenzhen",
"ownerIdentity": "123456789098****"
},
"object": {
"deltaSize": 0,
"eTag": "0CC175B9C0F1B6A831C399E26977****",
"key": "test",
"readFrom": 0,
"readTo": 1,
"size": 1
},
"ossSchemaVersion": "1.0",
"ruleId": "GetObjectRule"
},
"region": "cn-shenzhen",
"requestParameters": {
"sourceIPAddress": "140.205.XX.XX"
},
"responseElements": {
"requestId": "5776514AF09A9E654242****"
},
"userIdentity": {
"principalId": "123456789098****"
},
"xVars": {
"x:callback-var1": "value1",
"x:vallback-var2": "value2"
}
}
]
}メッセージフィールド
フィールド | 説明 |
eventName | 通知をトリガーしたイベントタイプです。 |
eventSource | イベントソースです。値は |
eventTime | イベントが発生した時刻(ISO 8601 形式)です。 |
eventVersion | イベントプロトコルのバージョンです。 |
oss | OSS イベントの詳細です。 |
oss.bucket.arn | バケットの Alibaba Cloud リソースネーム (ARN) です。 |
oss.bucket.name | バケット名です。 |
oss.bucket.ownerIdentity | バケットを作成したユーザーの ID です。 |
oss.object.deltaSize | オブジェクトのサイズ変化(バイト単位)です。 |
oss.object.eTag | オブジェクトの ETag です。PutObject でアップロードされたオブジェクトの場合、これはコンテンツの MD5 ハッシュです。他の方法で作成されたオブジェクトの場合、内部アルゴリズムにより生成された一意の値です。ETag を比較することで、オブジェクトのコンテンツが変更されたかどうかを確認できます。 |
oss.object.key | オブジェクト名です。 |
oss.object.readFrom | オブジェクト読み取りの開始バイト位置です。 |
oss.object.readTo | オブジェクト読み取りの終了バイト位置です。 |
oss.object.size | オブジェクトのサイズ(バイト単位)です。 |
oss.ossSchemaVersion | OSS スキーマのバージョンです。 |
oss.ruleId | このイベントに一致したイベント通知ルールの ID です。 |
region | バケットが存在するリージョンです。 |
requestParameters.sourceIPAddress | リクエストの送信元 IP アドレスです。 |
responseElements.requestId | リクエスト ID です。 |
userIdentity.principalId | リクエスト元のユニーク ID (UID) です。 |
xVars | OSS コールバック構成で定義されたカスタムパラメーターです。 |
前提条件
作業を開始する前に、以下の準備が整っていることを確認してください。
SMQ および OSS が有効化された Alibaba Cloud アカウント
(任意)通知を受信するためのキュー。まだない場合は、ステップ 1 で作成します。
(任意)キューと同じリージョンにある OSS バケット。まだない場合は、ステップ 2 で作成します。
操作手順
ステップ 1:(任意)キューの作成
すでにイベント通知を受信するキューがある場合は、このステップをスキップしてください。イベント通知ルール作成後にサブスクリプションを作成することも可能です。
SMQ コンソールにログインします。
左側のナビゲーションウィンドウで、キュー モデル > キュー を選択します。
上部のナビゲーションバーで、リージョンを選択します。
キュー ページで、キューの作成 をクリックします。
キューの作成 パネルで、以下のパラメーターを設定し、OK をクリックします。新しいキューが キュー ページに表示されます。
パラメーター
説明
名前
キュー名です。
最大メッセージ長
キューに送信される単一メッセージの最大サイズです。
ロングポーリング期間
ReceiveMessage 操作呼び出し後、ロングポーリングリクエストが保持される最大時間です。
可視性タイムアウト期間
キューからメッセージを受信した後、そのメッセージが非アクティブ状態で維持される時間です。
メッセージ保持期間
キュー内でメッセージが保持される最大時間です。この期間を過ぎると、受信の有無にかかわらずメッセージは削除されます。
メッセージ遅延期間
キューに送信されたすべてのメッセージが消費されるまでの期間。
ログ機能を有効化
メッセージ操作ログを有効にするかどうかを指定します。
ステップ 2:(任意)バケットの作成
すでにキューと同じリージョンにバケットがある場合は、このステップをスキップしてください。
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。
バケット ページで、バケットの作成 をクリックします。
バケットの作成 パネルで、以下のパラメーターを設定し、作成 をクリックします。
その他のパラメーターはすべてデフォルト値を使用します。デフォルトでは、パブリックアクセスブロックが有効化され、ACL はプライベートに設定されます。これらの設定は、イベント通知のテストに十分です。
パラメーター
説明
バケット名
バケットの名前です。例:
event-notification-testリージョン
キューと同じリージョンである必要があります。
ステップ 3:イベント通知ルールの作成
イベント通知ルールを作成すると、SMQ は自動的にトピックとサブスクリプションを作成し、トピックからのメッセージを指定された受信先にルーティングします。
SMQ コンソールにログインします。
左側のナビゲーションウィンドウで、イベント通知 をクリックします。
上部のナビゲーションバーで、リージョンを選択します。
イベント通知 ページの OSS タブで、ルールの作成 をクリックします。
ルールの作成 - OSS パネルで、以下のパラメーターを設定し、OK をクリックします。
パラメーター
説明
名前
ルールの名前です。
イベントタイプ
監視対象のイベントタイプを 1 つ以上選択します。「サポートされるイベントタイプ」をご参照ください。
マッチモード
OSS リソース名のフィルタリングパターンです。「マッチモードの詳細」をご参照ください。
受信端末
キュー を選択し、ステップ 1 で作成したキューの名前を入力します。
マッチモードの詳細
OSS リソース名は、バケット名とオブジェクト名をスラッシュ (/) で結合した形式です。例:movie/hello.avi
4 種類のマッチモードが利用可能です。2 つのマッチモードが重複することはありません。
マッチモード | 例 | マッチ対象 |
氏名 |
|
|
プレフィックス |
|
|
プレフィックス |
|
|
プレフィックス |
| 名前が |
サフィックス |
| すべてのバケットにおいて、 |
プレフィックス & サフィックス | プレフィックス: |
|
ステップ 4:ルールの検証のためオブジェクトをアップロード
新規ルールが有効になるまで約 10 分かかるため、ルール作成後、少なくとも 10 分待ってからアップロードを行ってください。
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。
対象のバケット名をクリックして、オブジェクト ページを開きます。
オブジェクトリストの上部にある オブジェクトのアップロード をクリックします。
アップロードパラメーターを設定し、オブジェクトのアップロード をクリックします。詳細については、「シンプルアップロード」セクションをご参照ください。タスクリスト パネルに、アップロードステータスが アップロード済み と表示されます。
ステップ 5:イベント通知の受信
SMQ コンソールにログインします。
左側のナビゲーションウィンドウで、キュー モデル > キュー を選択します。
上部のナビゲーションバーで、キューと同じリージョンを選択します。
キュー ページで、対象のキューを見つけ、操作 列の メッセージの送信 をクリックします。
クイック体験 ページの メッセージの受信 セクションで、メッセージの受信 をクリックします。受信済みメッセージの一覧が表示されます。
対象のメッセージを見つけ、操作 列の 詳細 をクリックします。メッセージの詳細 ダイアログボックスに、イベント通知の内容が表示されます。