イベント通知を使用して、データ同期、変更のモニタリング、ビジネスロジックのトリガー、またはログの記録のために OSS のファイル変更をリアルタイムで処理します。イベント通知ルールを設定して、特定のファイルをモニタリングし、それらに関する通知を受信できます。
前提条件
Simple Message Queue (SMQ) (旧称:MNS) が有効化されていることを確認してください。SMQ を有効化するには、SMQ 製品ページにアクセスしてください。
注意事項
イベント通知には OSS と SMQ 間の呼び出しが含まれます。OSS の操作がルールをトリガーすると、OSS は SMQ を呼び出してメッセージを送信します。OSS から SMQ へのこの呼び出しは失敗する可能性があります。呼び出しが成功したかどうかを確認するには、応答ヘッダーの `x-oss-event-status` の値を確認します。この値は Base64 でエンコードされています。デコードされた値が `{"Result": "Ok"}` の場合、SMQ への呼び出しは成功です。それ以外の場合、呼び出しは失敗です。
イベント通知機能では SMQ の料金が発生します。課金の詳細については、「課金の概要」をご参照ください。
バケットのイベント通知をサポートするリージョンのリストについては、「サポートされているリージョン」をご参照ください。
リージョンごとに最大 10 個のイベント通知ルールを設定できます。ビジネスでさらに多くのルールが必要な場合は、テクニカルサポートにお問い合わせください。
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 | ライフサイクルルールによってトリガーされるストレージクラスのトランジション操作。たとえば、標準ストレージから低頻度アクセス、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブへのトランジションなど。 | ObjectModified:ChangeStorageClass |
ObjectCreatedGroup | ファイルを作成または上書きするすべての操作。 | 通知で返されるイベント名は、アップロードメソッドに応じて `ObjectCreated:` で始まる任意のイベントになります。たとえば、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": "", // バケットの一意の識別子。形式は "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: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 コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、インテリジェントデータ処理 > イベント通知 を選択します。
イベント通知 ページで、ルールの作成 をクリックします。
ルールの作成 パネルで、次のパラメーターを設定します:
パラメーター
説明
スタイル名
イベント通知ルールの名前。
ルール名は、同じアカウントの同じリージョン内で一意である必要があります。名前は文字で始まる必要があり、大文字、小文字、数字、ハイフン (-) を含めることができます。長さは 85 文字を超えることはできません。
イベントタイプ
宛先オブジェクトのイベントタイプ。たとえば、コピー操作によって宛先オブジェクトが作成または上書きされたときにイベント通知を受信したい場合は、イベントタイプを `CopyObject` に設定します。
宛先オブジェクトに対して 1 つのイベント通知ルールを設定し、そのルールで複数のイベントタイプを指定できます。また、宛先オブジェクトに対して複数のイベント通知ルールを設定することもできます。複数のルールを設定する際は、次の点に注意してください:
複数のルールが同じ宛先オブジェクトに適用される場合、イベントタイプを同じにすることはできません。たとえば、ルール A がプレフィックス
imagesの `CopyObject` イベントで設定されている場合、ルール B がプレフィックスimagesを持つ任意のオブジェクトに適用される場合、`CopyObject` イベントを含めることはできません。複数のルールが異なる宛先オブジェクトに適用される場合、イベントタイプは同じでも異なっていてもかまいません。たとえば、ルール A がプレフィックス
imagesとサフィックス.pngを持つオブジェクトの `PutObject` イベントで設定され、ルール B がプレフィックスlogとサフィックス.jpgを持つオブジェクトに適用される場合、ルール B のイベントタイプは `PutObject` または `DeleteObject` にすることができます。
重要バージョン管理が有効なバケットからバージョン ID を指定せずにオブジェクトを削除しても、`DeleteObject` または `DeleteObjects` イベント通知はトリガーされません。これは、デフォルトの削除動作ではどのオブジェクトバージョンも削除されないためです。代わりに、オブジェクトの現在のバージョンを以前のバージョンに変換し、削除マーカーを追加します。
イベントタイプに対応するオブジェクト操作の詳細については、「イベントタイプ」をご参照ください。
オブジェクトのマッチング
イベント通知をトリガーする宛先オブジェクト。
フルネーム で宛先オブジェクトを照合
バケットのルートディレクトリにある exampleobject.txt という名前の宛先オブジェクトを照合するには、exampleobject.txt と入力します。
バケットの destdir ディレクトリにある myphoto.jpg という名前の宛先オブジェクトを照合するには、destdir/myphoto.jpg と入力します。
プレフィックス / サフィックス で宛先オブジェクトを照合
バケット内のすべてのオブジェクトを照合するには、プレフィックスとサフィックスを空のままにします。
バケットの examplefolder ディレクトリ内のすべてのオブジェクトを照合するには、プレフィックスを examplefolder/ に設定し、サフィックスを空のままにします。
バケット内の拡張子が .jpg のすべてのオブジェクトを照合するには、プレフィックスを空のままにし、サフィックスを .jpg に設定します。
バケットの examplefolder ディレクトリ内の拡張子が .mp3 のすべてのオブジェクトを照合するには、プレフィックスを examplefolder/ に、サフィックスを .mp3 に設定します。
[条件を追加] ボタンをクリックして、最大 5 つの リソースの説明 オブジェクトマッチング ルールを作成します。
サブスクリプションエンドポイント
イベントを受信するエンドポイント。HTTP や キュー などのサブスクリプションタイプがサポートされています。
OK をクリックします。
上記の手順を完了すると、イベント通知ルールは約 10 分で有効になります。
よくある質問
関連ドキュメント
イベント通知ルールでモニタリングするオブジェクトを指定できます。これらのオブジェクトで指定されたイベントが発生すると、SMQ で設定されたエンドポイントを介して通知を受け取ります。詳細については、「チュートリアル:SMQ を使用して OSS イベント通知を実装する」をご参照ください。
HttpEndpoint インターフェイスを介してメッセージ本文を取得できない場合、POST メソッドを使用していることが原因である可能性があります。解決策については、「Simple Message Queue (旧称:MNS) で PHP を使用して HttpEndpoint インターフェイスを作成する際にメッセージ本文を受信できない場合の対処方法」をご参照ください。
OSS のアップロードコールバック機能を使用して、アップロードコールバックを実装することもできます。詳細については、「アップロードコールバック」をご参照ください。