OSS 内のオブジェクトに対して、リアルタイムで処理・同期・モニタリング・ビジネスワークフローのトリガー、または変更ログの記録を行う必要がある場合は、イベント通知ルールを設定できます。このルールにより、監視対象のオブジェクトを指定し、関連イベントが発生した際に迅速に通知を受け取ることができます。
前提条件
Simple メッセージキュー (SMQ) を有効化しました。SMQ は、SMQ 製品ページで有効化できます。
注意事項
イベント通知機能では、OSS と SMQ 間で呼び出しが行われます。OSS の操作がイベント通知ルールをトリガーすると、OSS は SMQ に通知メッセージの送信を指示します。この OSS から SMQ への呼び出しが失敗する可能性があります。応答の
x-oss-event-statusヘッダーの値を確認することで、通知が正常にトリガーされたかどうかを判断できます。この値は Base64 エンコードされています。デコード後の値が{"Result": "Ok"}の場合、SMQ への呼び出しは成功しています。デコード後の値が{"Result": "Ok"}でない場合、SMQ への呼び出しは失敗しています。イベント通知機能の利用には、SMQ の料金が発生します。詳細については、「課金」をご参照ください。
バケットに対してイベント通知を設定可能なリージョンの一覧については、「サポートされているリージョン」をご参照ください。
各リージョンで設定可能なイベント通知ルールの上限は 10 個です。業務上、これ以上のルールが必要な場合は、テクニカルサポートにお問い合わせください。
リアルタイムメッセージングプロトコル (RTMP) ストリームから生成される TS および M3U8 オブジェクトは、イベント通知ルールをトリガーしません。RTMP ストリーミングの詳細については、「LiveChannel 関連操作」をご参照ください。
仕組み
イベント通知ルールを作成後、ご利用の OSS バケットに対する操作がそのルールをトリガーすると、SMQ は指定された HTTP サーバーまたは SMQ キューにイベントに関するメッセージを送信します。以下の図はこのプロセスを示しています。
イベントタイプ
グループ | タイプ | 説明 |
ObjectCreated (オブジェクト作成) | ObjectCreated:PutObject | PutObject 操作によってオブジェクトがアップロードされました。詳細については、「PutObject」をご参照ください。 |
ObjectCreated:PostObject | PostObject 操作によってオブジェクトがアップロードされました。詳細については、「PostObject」をご参照ください。 | |
ObjectCreated:CopyObject | オブジェクトがコピーされました。詳細については、「CopyObject」をご参照ください。 | |
ObjectCreated:AppendObject | データを追加してオブジェクトがアップロードされました。詳細については、「AppendObject」をご参照ください。 | |
ObjectCreated:InitiateMultipartUpload | フラグメントアップロードタスクが開始されました。詳細については、「InitiateMultipartUpload」をご参照ください。 | |
ObjectCreated:UploadPart | フラグメントアップロードタスクの一部がアップロードされました。詳細については、「UploadPart」をご参照ください。 | |
ObjectCreated:UploadPartCopy | フラグメントアップロードタスクの一部がコピーされました。詳細については、「UploadPartCopy」をご参照ください。 | |
ObjectCreated:CompleteMultipartUpload | フラグメントアップロードタスクが完了しました。詳細については、「CompleteMultipartUpload」をご参照ください。 | |
ObjectCreated:PutSymlink | オブジェクトのシンボリックリンクが作成されました。詳細については、「PutSymlink」をご参照ください。 | |
ObjectCreated:Mirror | ミラーリングによってオブジェクトが作成されました。 説明 デフォルトでは、OSS のミラーリングは ObjectCreated:PutObject イベントをトリガーします。代わりに ObjectCreated:Mirror イベントをトリガーするには、チケットを送信してこの機能を有効化する必要があります。 | |
ObjectCreated:* |
説明 このワイルドカードは、将来的に ObjectCreated カテゴリに追加される新しいイベントタイプ(例: | |
ObjectDownloaded (オブジェクトダウンロード) | ObjectDownloaded:GetObject | オブジェクトがダウンロードされました。 |
ObjectModified (オブジェクト変更) | ObjectModified:UpdateObjectMeta | UpdateObjectMeta 操作によってオブジェクトのメタデータが変更されました。 |
ObjectModified:ChangeStorageClass | ライフサイクルルールによってオブジェクトのストレージクラスが変更されました。 | |
ObjectModified:* |
説明 このワイルドカードは、将来的に ObjectModified カテゴリに追加される新しいイベントタイプ(例: | |
ObjectRemoved (オブジェクト削除) | ObjectRemoved:DeleteObject | 単一のオブジェクトが削除されました。詳細については、「DeleteObject」をご参照ください。 |
ObjectRemoved:DeleteObjects | 複数のオブジェクトが削除されました。詳細については、「DeleteMultipleObjects」をご参照ください。 | |
ObjectRemoved:AbortMultipartUpload | フラグメントアップロードタスクが中止され、そのパーツが削除されました。詳細については、「AbortMultipartUpload」をご参照ください。 | |
ObjectRemoved:* |
説明 このワイルドカードは、将来的に ObjectRemoved カテゴリに追加される新しいイベントタイプ(例: | |
ObjectReplication (オブジェクトレプリケーション) | ObjectReplication:ObjectCreated | データレプリケーションプロセスの一部として書き込み操作が実行されました。 |
ObjectReplication:ObjectRemoved | データレプリケーションプロセスの一部として削除操作が実行されました。 | |
ObjectReplication:ObjectModified | データレプリケーションプロセスの一部として上書き操作が実行されました。 | |
ObjectReplication:* |
説明 このワイルドカードは、将来的に ObjectReplication カテゴリに追加される新しいイベントタイプ(例: | |
ObjectRestore (オブジェクト復元) | ObjectRestore:FinishRestore | オブジェクトがアーカイブストレージクラスからアクセス可能な状態に正常に復元されました。このイベントタイプは、コールドアーカイブおよびディープコールドアーカイブストレージクラスのオブジェクトにのみ適用されます。 |
通知メッセージ
OSS イベント通知には、Base64 エンコードされた 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": "" // バケットの所有者。
},
"object": {
"deltaSize": "", // オブジェクトサイズの変化量。たとえば、新規オブジェクト作成時はオブジェクトサイズ、上書き時は新旧オブジェクトのサイズ差(負の値もあり得る)。
"eTag": "", // オブジェクトの ETag。
"key": "", // オブジェクトキー。
"position": "", // 追加操作の開始位置。このパラメーターは ObjectCreated:AppendObject イベントにのみ適用されます。オブジェクトに対する最初の AppendObject リクエストはバイト 0 から開始されます。
"readFrom": "", // 読み取り操作の開始位置。このパラメーターは ObjectDownloaded:GetObject イベントにのみ適用されます。範囲指定なしのリクエストでは 0、範囲指定リクエストではリクエストの開始バイト。
"readTo": "", // 読み取り操作の終了位置。このパラメーターは ObjectDownloaded:GetObject イベントにのみ適用されます。範囲指定なしのリクエストではオブジェクトサイズ、範囲指定リクエストではリクエスト範囲の終了バイト + 1。
"size": "" // オブジェクトサイズ。
},
"ossSchemaVersion": "", // このスキーマのバージョン。現在のバージョンは "1.0" です。
"ruleId": "GetObject", // 一致したイベント通知ルールの ID。
"region": "", // バケットのリージョン。
"requestParameters": {
"sourceIPAddress": "" // リクエストの送信元 IP アドレス。
},
"responseElements": {
"requestId": "" // リクエスト ID。
},
"userIdentity": {
"principalId": "" // リクエストを行ったユーザーの UID。
},
"xVars": { // OSS アップロードコールバック機能におけるカスタムパラメーター。
"x:callback-var1":"value1",
"x:callback-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:callback-var2":"value2"
}
}
}
]
}手順
-
OSS コンソールにログインします。
-
左側のナビゲーションウィンドウで、バケット をクリックします。表示されたページで、対象バケットの名前をクリックします。
左側のナビゲーションウィンドウで、データ処理 > イベント通知 を選択します。
イベント通知 ページで、ルールの作成 をクリックします。
ルールの作成 パネルで、以下のパラメーターを設定します。
パラメーター
説明
スタイル名
イベント通知ルールの名前を指定します。
ルール名は、同一 Alibaba Cloud アカウントの同一リージョン内で一意である必要があります。英字で始まり、大文字・小文字・数字・ハイフン (-) を使用でき、最大 85 文字までです。
イベントタイプ
対象オブジェクトのイベントタイプを 1 つ以上選択します。たとえば、オブジェクトが作成またはコピー操作で上書きされた際に通知を受け取る場合は、CopyObject を選択します。
1 つのルールで複数のイベントタイプを設定することも、同じオブジェクトに対して複数のルールを設定することも可能です。複数のルールを設定する際は、以下の点にご注意ください。
複数のルールが同じ対象オブジェクトに適用される場合、イベントタイプを重複させることはできません。たとえば、ルール A でプレフィックス
imagesに対して CopyObject イベントを設定している場合、ルール B がimagesプレフィックス配下の任意のオブジェクトに適用される場合、ルール B のイベントタイプに CopyObject を含めることはできません。複数のルールが異なる対象オブジェクトに適用される場合、イベントタイプは同一でも異なっていても問題ありません。たとえば、ルール A でプレフィックス
imagesかつ拡張子.pngのオブジェクトに対して PutObject イベントを設定しており、ルール B がプレフィックスlogかつ拡張子.jpgのオブジェクトに適用される場合、ルール B のイベントタイプには PutObject や DeleteObject を含めることができます。
重要バージョン管理が有効なバケットからオブジェクトを削除する際、バージョン ID を指定しない場合は DeleteObject または DeleteObjects イベントはトリガーされません。これは、バージョン ID を指定せずに削除操作を実行しても、いずれのオブジェクトバージョンも完全に削除されないためです。代わりに、現在のバージョンが以前のバージョンとなり、削除マーカーが追加されます。
イベントタイプに対応するオブジェクト操作の詳細については、「イベントタイプ」をご参照ください。
[Object Matching]
イベント通知の対象となるオブジェクトを指定します。
オブジェクトを フルネーム で一致させます。
バケットのルートディレクトリにある
exampleobject.txtという名前のオブジェクトを一致させるには、exampleobject.txt と入力します。バケットの
destdirディレクトリにあるmyphoto.jpgという名前のオブジェクトを一致させるには、destdir/myphoto.jpg と入力します。
プレフィックス / サフィックス でオブジェクトを一致させる
バケット内のすべてのオブジェクトを一致させるには、プレフィックスとサフィックスの両方を空のままにします。
examplefolderディレクトリ内のすべてのオブジェクトを一致させるには、プレフィックスを examplefolder/ に設定し、サフィックスは空のままにします。バケット内の拡張子が
.jpgのすべてのオブジェクトを一致させるには、プレフィックスを空のままにし、サフィックスを .jpg に設定します。examplefolder ディレクトリ内の拡張子が
.mp3のすべてのオブジェクトを一致させるには、プレフィックスを examplefolder/、サフィックスを .mp3 に設定します。
条件を追加 をクリックすると、最大 5 つの [object matching] ルールを作成できます。
[Subscription Endpoint]
イベントを受信するエンドポイントを指定します。サポートされているサブスクリプションタイプは [HTTP] および [Queue] です。
OK をクリックします。
上記の手順を完了すると、イベント通知ルールは約 10 分以内に有効になります。
よくある質問
参考資料
イベント通知ルールでは、監視対象のオブジェクトを定義できます。これらのオブジェクトで指定されたイベントが発生すると、SMQ で指定されたエンドポイントを通じてイベント通知を受信できます。詳細については、「チュートリアル:SMQ を使用した OSS イベント通知の実装」をご参照ください。
HttpEndpoint でメッセージ本文を受信できない場合、POST メソッドを使用していることが原因である可能性があります。解決策については、「Simple Message Queue (旧称:MNS) で PHP を使用して HttpEndpoint インターフェイスを記述する際にメッセージ本文を受信できない場合はどうすればよいですか?」をご参照ください。
アップロードコールバックを実装したい場合は、OSS が提供するアップロードコールバック機能も使用できます。詳細については、「アップロードコールバック」をご参照ください。