リアルタイム処理、同期、リスニング、ビジネスロジックトリガー、ロギングなど、さまざまな目的でObject Storage Service (OSS) のオブジェクトの変更を監視することができます。 イベント通知ルールを設定して、オブジェクトを監視し、通知を受信できます。 このようにして、できるだけ早い機会に適切な行動を取ることができます。
前提条件
シンプルメッセージキュー (SMQ) が起動される。 SMQ製品ページでSMQを有効にすることができます。
使用上の注意
イベント通知では、OSSとSMQが協調して動作する必要があります。 OSSリソースで操作が実行されると、SMQがメッセージを送信するためのイベント通知ルールがトリガーされます。 SMQは、メッセージを送信するためにトリガされないことがある。 レスポンスのx-oss-event-statusヘッダーの値 (Base64-encoded) を確認して、SMQがトリガーされているかどうかを確認できます。 x-oss-event-statusヘッダーのデコードされた値が {"Result": "Ok"} の場合、SMQがトリガーされます。 x-oss-event-statusヘッダーのデコード値が {"Result": "Ok"} でない場合、SMQはトリガーされません。
イベント通知機能を使用すると、SMQによって課金されます。 詳細については、「課金」をご参照ください。
次のリージョンにあるバケット内のオブジェクトに対して、イベント通知ルールを設定できます。中国 (杭州) 、中国 (上海) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (深セン) 、中国 (成都) 、中国 (香港) 、米国 (シリコンバレー) 、米国 (バージニア) 、日本 (東京) 、シンガポール、オーストラリア (シドニー) (サービス終了)、インドネシア (ジャカルタ) 、フィリピン (マニラ) 、ドイツ (フランクフルト) 、および英国 (ロンドン).
1つのリージョンで最大10個のイベント通知ルールを設定できます。
リアルタイムメッセージングプロトコル (RTMP) によるストリーム取り込みによって生成されたTSおよびM3U8オブジェクトの通知はトリガーされません。 RTMPによるストリーム取り込みの詳細については、「概要」をご参照ください。
制御ポリシー機能の動作
OSSリソースで実行された操作がイベント通知ルールをトリガーすると、SMQは指定されたHTTPサーバーまたはSMQキューに操作に関する通知を送信します。 プロセスの詳細を次の図に示します。
Events
ObjectCreatedGroup、ObjectDownloadedGroup、およびObjectRemovedGroupイベントは、中国 (香港) 、米国 (シリコンバレー) 、米国 (バージニア) 、ドイツ (フランクフルト) 、オーストラリア (シドニー) (サービス終了)、シンガポール、英国 (ロンドン) の各リージョンでのみサポートされています。
イベントタイプ | 説明 | 通知のイベント名 |
PutObject | オブジェクトは、単純なアップロードを使用して作成または上書きされます。 | ObjectCreated:PutObject |
PostObject | オブジェクトは、フォームアップロードを使用して作成または上書きされます。 | ObjectCreated:PostObject |
CopyObject | オブジェクトは、オブジェクトをコピーすることによって作成または上書きされます。 | ObjectCreated:CopyObject |
InitiateMultipartUpload | マルチパートアップロードタスクが開始されます。 | ObjectCreated:InitiateMultipartUpload |
UploadPart | マルチパートアップロードを使用してオブジェクトを作成または上書きします。 | ObjectCreated:UploadPart |
UploadPartCopy | オブジェクトは、マルチパートコピーを使用して作成または上書きされます。 | * oss:ObjectCreated:UploadPartCopy |
CompleteMultipartUpload | マルチパートアップロードタスクが完了しました。 | ObjectCreated:CompleteMultipartUpload |
AbortMultipartUpload | マルチパートアップロードタスクがキャンセルされ、アップロードされたパーツが削除されます。 | ObjectRemoved:AbortMultipartUpload |
AppendObject | オブジェクトは、追加アップロードを使用して作成または追加されます。 | ObjectCreated:AppendObject |
GetObject | オブジェクトは、単純なダウンロードを使用して取得されます。 | ObjectDownloaded:GetObject |
DeleteObject | オブジェクトが削除されます。 | ObjectRemoved:DeleteObject |
オブジェクトの削除 | 複数のオブジェクトが削除されます。 | ObjectRemoved:DeleteObjects |
ObjectReplication:ObjectCreated | オブジェクトはデータ複製タスクで作成されます。 | ObjectReplication:ObjectCreated |
ObjectReplication:ObjectRemoved | データ複製タスクでオブジェクトが削除されます。 | ObjectReplication:ObjectRemoved |
ObjectReplication:ObjectModified | データ複製タスクでオブジェクトが上書きされます。 | ObjectReplication:ObjectModified |
ObjectCreatedGroup | オブジェクトの作成または上書き操作が実行されます。 | 通知のイベント名は、選択したアップロード方法に応じて、ObjectCreated: で始まる任意のイベントにすることができます。 たとえば、OSS SDKを使用して単純アップロードを実行してオブジェクトをアップロードする場合、通知のイベント名はObjectCreated:PutObjectです。 OSSコンソールにオブジェクトがアップロードされると、通知のイベント名はObjectCreated:PostObjectになります。 |
ObjectDownloadedGroup | オブジェクトダウンロード操作が実行されます。 | 通知のイベント名は、選択したダウンロード方法に応じて、ObjectDownloaded: で始まる任意のイベントにすることができます。 たとえば、単純なアップロードを実行してオブジェクトをダウンロードする場合、通知のイベント名はObjectDownloaded:GetObjectです。 |
ObjectRemovedGroup | オブジェクト削除操作が実行されます。 | 通知のイベント名は、選択した削除方法に応じて、ObjectRemoved: で始まる任意のイベントにすることができます。 たとえば、オブジェクトが削除された場合、通知のイベント名はObjectRemoved:DeleteObjectです。 一度に複数のオブジェクトが削除される場合、通知のイベント名はObjectRemoved:DeleteObjectsです。 |
FinishRestore | オブジェクト復元操作が完了しました。 イベントタイプは、Cold ArchiveオブジェクトとDeep Cold Archiveオブジェクトのみをサポートします。 | ObjectRestore:FinishRestore |
イベント通知
OSSイベント通知の内容がBase64-encodedされます。 コンテンツがデコードされると、コンテンツはJSON形式になります。 次のサンプルコードは、デコードされたイベント通知コンテンツの例を示します。
{"events": [
{
"eventName": "", // The event name.
"eventSource": "", // The source that triggers the event notification rule. Valid value: acs:oss.
"eventTime": "", // The time when the event occurred. The time is a timestamp in the ISO 8601 standard.
"eventVersion": "", // The version of the event notification. The current version is 1.0.
"oss": {
"bucket": {
"arn": "", // The Alibaba Cloud Resource Name (ARN) of the bucket in the following format: acs:oss:region:uid:bucketname.
"name": "", // The name of the bucket that contains the objects to which the event notification rule applies.
"ownerIdentity": "" // The owner of the bucket.
},
"object": {
"deltaSize": "", // The size difference between the new object and the original object. If an object is created, the value of this parameter indicates the size of the object. If an object is overwritten, the value indicates the difference between the sizes of the new object and the original object. The value may be negative.
"eTag": "", // The ETag value of the object.
"key": "", // The name of the object.
"position": "", // The position from which the AppendObject operation starts. This parameter applies only to the ObjectCreated:AppendObject event. The first AppendObject operation on an object starts from byte 0 of the object.
"readFrom": "", // The position from which the GetObject operation starts. This parameter applies only to the ObjectDownloaded:GetObject event. If the GetObject operation is not performed by range, the value of this parameter is 0. Otherwise, the value refers to the position of the byte from which the GetObject operation starts.
"readTo": "", // The position at which the GetObject operation ends. This parameter applies only to the ObjectDownloaded:GetObject event. If the GetObject operation is not performed by range, the value of this parameter is the object size. Otherwise, the value refers to the position of the first byte after the byte at which the GetObject operation ends.
"size": "" // The size of the object.
},
"ossSchemaVersion": "", // The version of the schema. The current value is 1.0.
"ruleId": "GetObject", // The ID of the event notification rule that is triggered by the event.
"region": "", // The region in which the bucket is located.
"requestParameters": {
"sourceIPAddress": "" // The source IP address from which the request is sent.
},
"responseElements": {
"requestId": "" // The ID of the request.
},
"userIdentity": {
"principalId": "" // The UID of the requester.
},
"xVars": { // The custom parameters of an OSS callback.
"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コンソールにログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションツリーで、インテリジェントデータ処理>イベント通知を選択します。
イベント通知ページで、ルールの作成をクリックします。
ルールの作成パネルで、次の表で説明するパラメーターを設定します。
パラメーター
説明
スタイル名
イベント通知ルール名を指定します。
イベント通知ルールの名前は、Alibaba Cloudアカウント内のリージョンで一意である必要があります。 名前は英字で始まる必要があり、英字、数字、およびハイフン (-) のみを使用できます。 名前の長さは85文字を超えることはできません。
イベントタイプ
ドロップダウンリストから1つ以上のイベントを選択します。 たとえば、オブジェクトをコピーして特定のオブジェクトを作成または上書きしたときに通知を受け取る場合は、[CopyObject] を選択します。
特定のオブジェクトに対してイベント通知ルールを設定し、ルールをトリガーできる複数のイベントを指定できます。 オブジェクトに対して複数のイベント通知ルールを設定することもできます。 複数のイベント通知ルールを設定する場合は、次の項目に注意してください。
複数のイベント通知ルールが同じオブジェクトに適用される場合、これらのルールで構成されるイベントは異なる必要があります。 たとえば、名前に
images
プレフィックスが含まれるオブジェクトのイベント通知ルールを作成するときに、イベントタイプとしてCopyObjectを選択した場合、名前に同じプレフィックスが含まれるオブジェクトに適用される別のイベント通知ルールを作成するときに、イベントタイプとしてCopyObjectを選択することはできません。複数のイベント通知ルールが異なるオブジェクトに適用される場合、これらのルールのこのパラメーターの値は同じでも異なっていてもかまいません。 たとえば、名前に
イメージ
プレフィックスと. 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.
のすべてのMP3オブジェクトに適用されるルールを作成するにはexamplefolderバケットのルートディレクトリ内のディレクトリに、Prefixをexamplefolder /と接尾辞. mp3.
別のリソース説明エントリを追加するには、[追加] をクリックします。 イベント通知ルールには、最大5つのリソースの説明エントリを指定できます。
エンドポイント
イベント通知の送信先となるエンドポイントを指定します。 有効値: HTTPおよびキュー。
HTTP: HTTPエンドポイントを指定します。 例:
http:// 198.51.100.1:8080
HTTPエンドポイントを取得する方法の詳細については、「トピックの管理」および「HttpEndpoint」をご参照ください。キュー: SMQキューの名前を入力します。 キューの作成方法の詳細については、「キューの作成」をご参照ください。
エンドポイントまたはキューを追加するには、[追加] をクリックします。 イベント通知ルールには、最大5つのエンドポイントエントリを指定できます。
OKをクリックします。
イベント通知ルールを設定した後、ルールは約10分後に有効になります。
よくある質問
関連ドキュメント
イベント通知ルールを設定して、OSS内の特定のオブジェクトを監視し、オブジェクトの変更に関する通知を受信できます。 詳細については、「チュートリアル: SMQを使用してOSSイベントの通知を送信する」をご参照ください。
HttpEndpoint操作を呼び出して通知メッセージの本文を受信できない場合は、POSTメソッドを使用している可能性があります。 問題を解決するには、PHPでHttpEndpoint操作を作成したときにHTTPボディを受信できない場合はどうすればよいですか?
OSSのアップロードコールバック機能を使用して、アップロードコールバックを実装できます。 詳細については、「コールバックのアップロード」をご参照ください。