このトピックでは、バージョン管理が有効なバケットから、単一のオブジェクト、複数のオブジェクト、または名前に指定されたプレフィックスが含まれるオブジェクトを削除する方法について説明します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトを削除するには、
oss:DeleteObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
バージョン管理が有効なバケットの削除操作
バージョン管理が有効なバケットからオブジェクトを削除する場合、リクエストにバージョンIDを指定するかどうかを決定する必要があります。
バージョンIDを指定せずにオブジェクトを削除する (一時削除)
デフォルトでは、リクエストで削除するオブジェクトのバージョンIDを指定しない場合、object Storage Service (OSS) はオブジェクトの現在のバージョンを削除せず、最新バージョンとしてオブジェクトに削除マーカーを追加します。 オブジェクトに対してGetObject操作を実行すると、OSSはオブジェクトの現在のバージョンを削除マーカーとして識別し、
404 Not Found
を返します。 また、レスポンスには、header:x-oss-delete-marker = true
と、削除マーカーのバージョンidを示すx-oss-version-ID
が含まれています。x-oss-delete-marker
の値がtrueの場合、x-oss-version-id
の値は削除マーカーのバージョンIDです。バージョンIDを指定してオブジェクトを削除する (永久削除)
リクエストで削除するオブジェクトのバージョンIDを指定した場合、OSSは
params
で指定されたversionId
パラメーターに基づいてオブジェクトの特定のバージョンを完全に削除します。 IDがnullのバージョンを削除するには、params['versionId'] = "null"
をparams
に追加します。 OSSは、削除するバージョンのIDとして文字列 "null" を識別し、IDがnullのバージョンを削除します。
オブジェクトの削除
次の例は、バージョン管理が有効なバケットからオブジェクトを永続的または一時的に削除する方法を示しています。
バージョン管理が有効なバケットからオブジェクトを完全に削除する
次のサンプルコードは、リクエストでオブジェクトのバージョンIDを指定して、バージョン管理が有効なバケットからオブジェクトを完全に削除する方法の例を示しています。
# -*-コーディング: utf-8 -*- osのインポート oss2のインポート oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 # バケットの名前を指定します。 bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName') # オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: Example /test.txt。 object_name = 'yourObjectName' # 削除するオブジェクトまたは削除マーカーのバージョンIDを指定します。 params = dict() params['versionId'] = 'yourObjectVersionIdOrDeleteMarkerVersionId' # 特定のバージョンのオブジェクトまたは削除マーカーを削除します。 result = bucket.de lete_object(object_name, params=params) print("delete object name: ", object_name) # リクエストでオブジェクトのバージョンIDが指定されている場合、レスポンスのdelete_markerヘッダーの値はNoneで、レスポンスのversionIdヘッダーの値はリクエストで指定されたバージョンIDです。 # 削除マーカーのバージョンIDがリクエストで指定されている場合、レスポンスのdelete_markerヘッダーの値はTrueで、レスポンスのversionIdヘッダーの値はリクエストで指定されたバージョンIDです。 if result.delete_marker: print("delete del-marker versionid: ",result.versionid) else: print("delete object versionid:", result.versionid)
バージョン管理が有効なバケットからオブジェクトを一時的に削除する
次のサンプルコードは、バージョンIDが指定されていないリクエストを送信して、バージョン管理が有効なバケットからオブジェクトを一時的に削除する方法の例を示しています。
# -*-コーディング: utf-8 -*- osのインポート oss2のインポート oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 # バケットの名前を指定します。 bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName') # オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: Example /test.txt。 object_name = 'yourObjectName' # バージョンIDを指定せずにオブジェクトを一時的に削除します。 削除マーカーがオブジェクトに追加されます。 result = bucket.de lete_object(object_name) # オブジェクトに追加された削除マーカーを表示します。 print("delete marker: ", result.de lete_marker) # 追加した削除マーカーのバージョンIDを表示します。 print("delete marker versionid: ", result.versionid)
複数のオブジェクトの削除
次の例では、バージョン管理が有効なバケットから複数のオブジェクトを永続的または一時的に削除する方法について説明します。
バージョン管理が有効なバケットから複数のオブジェクトを完全に削除する
次のサンプルコードでは、リクエスト内のオブジェクトまたはマーカーの削除のバージョンIDを指定して、バージョン管理が有効なバケットから複数のオブジェクトまたはマーカーを完全に削除する方法の例を示します。
# -*-コーディング: utf-8 -*- osのインポート oss2のインポート oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート oss2.modelsからBatchDeleteObjectVersionをインポート oss2.modelsからBatchDeleteObjectVersionListをインポート # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 # バケットの名前を指定します。 bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName') version_list = BatchDeleteObjectVersionList() # 削除するオブジェクトまたは削除マーカーのバージョンIDを指定します。 obj1_versionid = 'yourObject1VersionId' obj1_del_marker_versionid = 'yourObject1DelMarkerVersionId' obj2_versionid = 'yourObject2VersionId' obj2_del_marker_versionid = 'yourObject2DelMarkerVersionId' version_list.append(BatchDeleteObjectVersion(key='yourObject1Name', versionid=obj1_versionid)) version_list.append(BatchDeleteObjectVersion(key='yourObject1Name', versionid=obj1_del_marker_versionid)) version_list.append(BatchDeleteObjectVersion(key='yourObject2Name', versionid=obj2_versionid)) version_list.append(BatchDeleteObjectVersion(key='yourObject2Name', versionid=obj2_del_marker_versionid)) # 指定されたバージョンIDを持つオブジェクトまたはマーカーを削除します。 result = bucket.de lete_object_versions(version_list) # 削除されたオブジェクトまたは削除マーカーのバージョンIDを表示します。 for del_version in result.delete_versions: print('del object name:', del_version.key) # 削除されたオブジェクトが削除マーカーかどうかを確認します。 print('Is del marker:', del_version.delete_marker) # 削除されたオブジェクトが削除マーカーの場合は、削除マーカーのバージョンIDを表示します。 削除されたオブジェクトが削除マーカーでない場合は、削除されたオブジェクトのバージョンIDを表示します。 if del_version.delete_marker : print('del object del_marker.versionid', del_version.delete_marker_versionid) else: print('del object versionid:', del_version.versionid)
バージョン管理が有効なバケットから複数のオブジェクトを一時的に削除する
次のサンプルコードでは、バージョンIDが指定されていないリクエストを送信して、バージョン管理が有効なバケットから複数のオブジェクトを一時的に削除する方法の例を示します。
# -*-コーディング: utf-8 -*- osのインポート oss2のインポート oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート oss2.modelsからBatchDeleteObjectVersionをインポート oss2.modelsからBatchDeleteObjectVersionListをインポート # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 # バケットの名前を指定します。 bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName') key_list = ['yourObject1Name', 'yourObject2Name'] # リクエストにバージョンIDを指定せずにオブジェクトを削除すると、オブジェクトに削除マーカーが追加されます。 result = bucket.batch_delete_objects(key_list) result.de lete_versionsのdel_versionの場合: print('key name:', del_version.key) # 返された削除マーカーを表示します。 print('Is del marker:', del_version.delete_marker) print('key del_marker.versionid ', del_version.delete_marker_versionid)
指定されたプレフィックスを含む名前のオブジェクトを削除する
次のサンプルコードは、名前に指定されたプレフィックスが含まれるオブジェクトを削除する方法の例を示しています。
# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName')
prefix = "yourKeyPrefix"
# 指定されたプレフィックスを名前に含むオブジェクトのバージョンIDを一覧表示し、これらのオブジェクトを削除します。
next_key_marker=なし
next_versionid_marker=なし
真の間:
result = bucket.list_object_versions(prefix=prefix, key_marker=next_key_marker, versionid_marker=next_versionid_marker)
for version_info in result.versions:
bucket.de lete_object(version_info.key, params={'versionId': version_info.versionid})
result.de lete_markerのdel_marker_infoの場合:
bucket.de lete_object(del_marker_info.key, params={'versionId': del_marker_info.versionid})
is_truncated = result.is_truncated
is_truncatedの場合:
next_key_marker = result.next_key_marker
next_versionid_marker = result.next_versionid_marker
else:
休憩
参考資料
オブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteObject」をご参照ください。
複数のオブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteMultipleObjects」をご参照ください。