Simple Message Queue (SMQ、旧称 MNS) を使用すると、Object Storage Service (OSS) イベント通知を特定の受信者にプッシュするイベント通知ルールを作成できます。このトピックでは、OSS イベント通知の背景情報、シナリオ、イベントタイプ、およびメッセージ形式について説明します。また、OSS イベント通知をプッシュするイベント通知ルールを作成する方法についても説明します。
背景情報
イベント通知ルールを作成すると、特定の OSS リソースでイベントがトリガーされたときに、SMQ は次の図に示すように、イベント通知を特定の受信者にプッシュします。
OSS の操作を呼び出すリクエストを送信すると、イベント通知ルールが一致した場合、OSS はレスポンスにヘッダーを追加します。このヘッダーは、イベント通知が生成されたかどうかを示します。これは、元のリクエストへのレスポンスには影響しません。イベント通知ルールが一致しない場合は、ヘッダーは追加されません。イベント通知ルールが一致する場合は、イベント通知が生成されるかどうかに関係なく、ヘッダーが追加されます。ヘッダーの形式:
x-oss-process-status: 'ewogICAgImNvZGUiOiAiU3VjY2VzcyIsCiAgICAibWVzc2FnZSI6ICJOb3RpZmljYXRpb25TdWNjZWVkIiwKICAgICJ0eXBlIjogIkV2ZW50Tm90aWZpY2F****'キー: x-oss-process-status
値: 値は Base64 でエンコードされています。デコード後のサンプル値:
{ "code":"Success", // イベント通知が生成されたかどうかを示します。イベント通知が生成された場合は、Success の値が返されます。それ以外の場合は、Fail の値が返されます。Success の値は、OSS が MSQ トピックにメッセージを送信したことを示しますが、MSQ がトピックから受信者のエンドポイントにメッセージをプッシュしたことを示すものではありません。 "message":"NotificationSucceed", // 操作の説明。イベント通知が生成されない場合は、失敗の原因が表示されます。 "type":"EventNotification", // 操作のタイプ。イベント通知の操作タイプは EventNotification です。 "version":"1.0" }
通知をプッシュする方法の詳細については、「キュー」をご参照ください。
シナリオ
他のユーザーに OSS バケットに対する操作の実行を承認し、これらの操作が発生したときに通知を受けたい場合は、イベント通知ルールを作成できます。
イベント通知に基づいてデータを分析し、一定期間内に操作が何回発生したかを確認し、ビジネスの最近の動向を分析できます。また、E-MapReduce (EMR) など、分析のためにイベント通知を他のサービスにインポートすることもできます。
イベント通知に基づいて、OSS リソースに対して実行される操作の QPS などのメトリックを監視できます。
イベント
イベント | タイプ | 説明 |
ObjectCreated (オブジェクトの作成) | ObjectCreated:PutObject | PutObject 操作が呼び出されて、オブジェクトがアップロードされます。詳細については、「PutObject」をご参照ください。 |
ObjectCreated:PostObject | PostObject 操作が呼び出されて、オブジェクトがアップロードされます。詳細については、「PostObject」をご参照ください。 | |
ObjectCreated:CopyObject | CopyObject 操作が呼び出されて、バケット内またはバケット間でオブジェクトがコピーされます。詳細については、「CopyObject」をご参照ください。 | |
ObjectCreated:AppendObject | AppendObject 操作が呼び出されて、既存のオブジェクトにオブジェクトを追加することでオブジェクトがアップロードされます。詳細については、「AppendObject」をご参照ください。 | |
ObjectCreated:InitiateMultipartUpload | InitiateMultipartUpload 操作が呼び出されて、OSS でマルチパートアップロードタスクが開始されます。詳細については、「InitiateMultipartUpload」をご参照ください。 | |
ObjectCreated:UploadPart | UploadPart 操作が呼び出されて、データがパーツでアップロードされます。詳細については、「UploadPart」をご参照ください。 | |
ObjectCreated:UploadPartCopy | UploadPartCopy 操作が呼び出されて、データがパーツでコピーされます。詳細については、「UploadPartCopy」をご参照ください。 | |
ObjectCreated:CompleteMultipartUpload | CompleteMultipartUpload 操作が呼び出されて、マルチパートアップロードタスクが完了します。詳細については、「CompleteMultipartUpload」をご参照ください。 | |
ObjectCreated:PutSymlink | PutSymlink 操作が呼び出されて、宛先オブジェクトを指すシンボリックリンクが作成されます。詳細については、「PutSymlink」をご参照ください。 | |
ObjectCreated:* | 通知内のイベント名は、 説明 このタイプのイベントには、ObjectCreated で始まるすべての新しいイベントが含まれます。たとえば、通知内のイベント名が ObjectCreated:test の場合、イベントを特定の受信者にプッシュできます。 | |
ObjectDownloaded (オブジェクトのダウンロード) | ObjectDownloaded:GetObject | GetObject 操作が呼び出されて、単純なダウンロードを実行することでオブジェクトが取得されます。 |
ObjectModified (オブジェクトの変更) | ObjectModified:UpdateObjectMeta | UpdateObjectMeta 操作が呼び出されて、オブジェクトの属性が変更されます。 |
ObjectModified:ChangeStorageClass | ChangeStorageClass 操作が呼び出されて、ライフサイクルルールに基づいてストレージタイプが変更されます。 | |
ObjectModified:* | 通知内のイベント名は、 説明 このタイプのイベントには、ObjectModified で始まるすべての新しいイベントが含まれます。たとえば、通知内のイベント名が ObjectModified:test の場合、イベントを特定の受信者にプッシュできます。 | |
ObjectRemoved (オブジェクトの削除) | ObjectRemoved:DeleteObject | DeleteObject 操作が呼び出されて、オブジェクトが削除されます。詳細については、「DeleteObject」をご参照ください。 |
ObjectRemoved:DeleteObjects | DeleteObjects 操作が呼び出されて、複数のオブジェクトが削除されます。詳細については、「DeleteMultipleObjects」をご参照ください。 | |
ObjectRemoved:AbortMultipartUpload | AbortMultipartUpload 操作が呼び出されて、マルチパートアップロードタスクがキャンセルされ、タスクでアップロードされたパーツが削除されます。詳細については、「AbortMultipartUpload」をご参照ください。 | |
ObjectRemoved:* | 通知のイベント名は、 説明 このタイプのイベントには、ObjectRemoved で始まるすべての新しいイベントが含まれます。たとえば、通知のイベント名が ObjectRemoved:test の場合、イベントを特定の受信者にプッシュできます。 | |
オブジェクトレプリケーション (オブジェクトのコピー) | ObjectReplication:ObjectCreated | データレプリケーションタスクでオブジェクトが作成されます。 |
ObjectReplication:ObjectRemoved | データ レプリケーション タスクでオブジェクトが削除されます。 | |
ObjectReplication:ObjectModified | データ レプリケーション タスクでオブジェクトが上書きされます。 | |
ObjectReplication:* | 通知のイベント名は、 説明 このイベントタイプには、ObjectReplication で始まるすべての新しいイベントが含まれます。たとえば、通知のイベント名が ObjectReplication:test の場合、イベントを特定の受信者にプッシュできます。 | |
ObjectRestore (オブジェクトの復元) | ObjectRestore:FinishRestore | オブジェクトのリストア操作が完了しました。コールドアーカイブ オブジェクトは、アクセスできるようになる前にリストアされます。このイベントタイプは、コールドアーカイブ オブジェクトとディープコールドアーカイブ オブジェクトのみをサポートします。 |
メッセージ形式
OSS イベント通知のメッセージ内容は 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", // バケットのARN
"name":"event-notification-test-shenzhen", // バケット名
"ownerIdentity":"123456789098****" // バケット作成者のID
},
"object":{
"deltaSize":0, // オブジェクトのサイズ変更
"eTag":"0CC175B9C0F1B6A831C399E26977****", // オブジェクトの内容
"key":"test", // オブジェクト名
"readFrom":0, // オブジェクト読み取り開始位置
"readTo":1, // オブジェクト読み取り終了位置
"size":1 // オブジェクトのサイズ
},
"ossSchemaVersion":"1.0", // OSSスキーマのバージョン
"ruleId":"GetObjectRule" // イベントに一致するルールのID
},
"region":"cn-shenzhen", // バケットが存在するリージョン
"requestParameters":{
"sourceIPAddress":"140.205.XX.XX" // リクエストの送信元 IP アドレス
},
"responseElements":{
"requestId":"5776514AF09A9E654242****" // リクエスト ID
},
"userIdentity":{
"principalId":"123456789098****" // リクエスタの一意の ID(UID)
},
"xVars":{
"x:callback-var1":"value1", // コールバックのカスタムパラメータ1
"x:vallback-var2":"value2" // コールバックのカスタムパラメータ2
}
}
]
}次の表は、メッセージ内容のパラメーターについて説明しています。
パラメーター | 説明 |
eventName | イベントのタイプ。 |
eventSource | イベントソース。 |
eventTime | イベントが発生した時刻。 |
eventVersion | イベントプロトコルのバージョン。 |
oss | OSS イベントの内容。 |
bucket | OSS バケットの詳細。 |
arn | バケットの Alibaba Cloud リソースネーム (ARN)。 |
name | バケット名。 |
ownerIdentity | バケットを作成したユーザーの ID。 |
object | オブジェクトの詳細。 |
deltaSize | オブジェクトのサイズ変更。 |
eTag | オブジェクトの内容。PutObject リクエストを使用してオブジェクトが作成された場合、オブジェクトのエンティティタグ (ETag) はオブジェクトコンテンツの MD5 ハッシュです。他のメソッドを使用してオブジェクトが作成された場合、ETag は特定のアルゴリズムに基づいて生成された一意の値です。オブジェクトの ETag を使用して、オブジェクトの内容が変更されたかどうかを確認できます。 |
key | オブジェクト名。 |
readFrom | オブジェクトの読み取り開始位置。 |
readTo | オブジェクトの読み取り終了位置。 |
size | オブジェクトのサイズ。 |
ossSchemaVersion | OSS スキーマのバージョン。 |
ruleId | イベントに一致するルールの ID。 |
region | バケットが存在するリージョン。 |
requestParameters | リクエストパラメーターの値。 |
sourceIPAddress | リクエストの送信元 IP アドレス。 |
responseElements | レスポンスパラメーターの値。 |
requestId | リクエスト ID。 |
userIdentity | ユーザー情報。 |
principalId | リクエスタの一意の ID (UID)。 |
xVars | OSS のコールバックのカスタムパラメーター。 |
使用上の注意
新しいイベント通知ルールが有効になるまで約 10 分かかります。
イベント通知ルールのトピックはシステムによって自動的に作成され、作成されたトピックに対して課金される場合があります。詳細については、「請求の概要」をご参照ください。
イベント通知ルールを作成または削除できます。ただし、イベント通知ルールを変更することはできません。
(オプション)ステップ 1:キューを作成する
ダウンストリーム クライアントからメッセージを受信するためにキューをサブスクライブするには、キューを作成する必要があります。イベント通知ルールが作成された後にサブスクリプションを作成することもできます。
SMQ コンソール にログインします。
左側のナビゲーション ウィンドウで、[キューモデル] > キュー を選択します。
上部のナビゲーション バーで、リージョンを選択します。
キュー ページで、キューを作成 をクリックします。
キューを作成 パネルで、次のパラメーターを設定し、OK をクリックします。
名前: キューの名前。
メッセージの最大長さ: キューに送信されるメッセージの最大長。
ロングポーリング期間: ReceiveMessage 操作が呼び出された後、ロングポーリング リクエストが保持される最大期間。
メッセージの可視性タイムアウト時間: キューからメッセージが受信された後、メッセージが非アクティブ状態のままになる期間。
メッセージの保持期間: メッセージがキューに存在する最大期間。指定された保持期間が過ぎると、メッセージが受信されたかどうかに関係なく、メッセージは削除されます。
メッセージ遅延時間: キューに送信されたすべてのメッセージが消費されるまでの期間。
ログ機能の有効化: ログ記録機能を有効にするかどうかを指定します。
キューが作成されると、キュー ページに表示されます。
(オプション) ステップ 2: バケットを作成する
目的のバケットがすでに存在する場合は、このステップをスキップします。
OSS コンソール にログオンします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。
[バケット] ページで、[バケットの作成] をクリックします。
[バケットの作成] パネルで、次のパラメーターを設定し、[作成] をクリックします。
バケット名: バケットの名前。この例では、event-notification-test を使用します。
リージョン: バケットが存在するリージョン。リージョンは、キューが存在するリージョンと同じである必要があります。
パブリックアクセスをブロック: パブリックアクセスをブロックするかどうかを指定します。この例では、この機能は無効になっています。
ACL: バケットの権限を指定します。この例では、[パブリック読み取り/書き込み] が選択されています。
説明その他のパラメーターにはデフォルト値を使用します。
手順
イベント通知ルールが作成されると、SMQ はルール用の Topic を自動的に作成し、指定されたエンドポイントを使用して Topic のサブスクリプションを作成します。SMQ コンソールで Topic とサブスクリプションを表示および管理できます。
[SMQ コンソール] にログオンします。
左側のナビゲーションウィンドウで、[イベント通知] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。
OSS[イベント通知] ページの [ルールを作成] タブで、 をクリックします。
[ルールの作成 - OSS] パネルで、次のパラメーターを設定し、[OK] をクリックします。
名前: ルールの名前を入力します。
イベントタイプ: 1 つ以上のイベントタイプを選択します。
一致モード: ルールの一致モードを設定します。
説明一致モードには、完全名、プレフィックス、サフィックス、およびプレフィックスとサフィックスがあります。 2 つの一致モードに共通部分を含めることはできません。 OSS リソースには、バケットとオブジェクトが含まれます。これらの名前はスラッシュ (/) で区切られます。例: movie/hello.avi。
完全名: movie/hello.avi。
プレフィックス:
movie/hello は、movie バケット内でプレフィックスが hello のすべてのオブジェクトを示します。
movie/ は、movie バケット内のすべてのオブジェクトを示します。
mov は、プレフィックスが mov のバケット内のすべてのオブジェクトを示します。
サフィックス: avi は、すべてのバケット内でサフィックスが .avi のすべてのオブジェクトを示します。
プレフィックスとサフィックス: movie/ プレフィックスと .avi サフィックスの組み合わせは、movie バケット内でサフィックスが .avi のすべてのオブジェクトを示します。
受信端末: ドロップダウンリストから [キュー] を選択し、手順 1 で作成したキューの名前を入力します。
ステップ 4: オブジェクトのアップロード
OSS コンソール にログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。
[バケット] ページで、管理する OSS バケットの名前をクリックして、[オブジェクト管理] ページに移動します。
オブジェクトリストの上にある [オブジェクトのアップロード] をクリックします。
表示されたページで、パラメーターを設定し、[オブジェクトのアップロード] をクリックします。 パラメーターの詳細については、「Simple upload」トピックの Simple upload セクションをご参照ください。
タスクリストパネルが表示されます。[アップロードタスク] タブに、オブジェクトの状態が「アップロード済み」と表示されます。
ステップ 5: メッセージを受信する
SMQ コンソール にログインします。
左側のナビゲーションウィンドウで、[キューモデル] > キュー を選択します。
上部のナビゲーションバーで、リージョンを選択します。
キュー ページで、管理するキューを見つけ、アクション 列で を選択します。
[メッセージの受信] セクションの [クイック エクスペリエンス] ページで、[メッセージの受信] をクリックします。
[メッセージの受信] セクションにメッセージのリストが表示されます。
メッセージリストで、表示するメッセージを見つけ、詳細[アクション] 列の詳細をクリックします。 ダイアログボックスで、メッセージの内容を表示します。