バケットが不要になった場合は、削除してすべての課金を停止できます。Object Storage Service (OSS) の料金はバケット内のリソースに課金されるため、バケットを削除する前にすべてのリソースを削除する必要があります。バケットの削除は、課金対象リソースの見落としによる予期しない料金を防ぐための最も確実な方法です。バケットを削除すると、データは復元できず、解放後は別のユーザーがその名前を使用できるようになりますので、ご注意ください。OSS の使用を完全に停止するには、アカウント内のすべてのバケットを削除する必要があります。
削除前のリスク評価
不可逆なデータ損失のリスク
この操作は元に戻すことができず、すべてのオブジェクト、以前のバージョン、およびパートが完全に削除されます。事前にデータをバックアップしてください。
サービスの中断のリスク
バケットを削除すると、このバケットを利用している Web サイト、アプリケーション、または CDN サービスは即座に中断します。このバケットにアクセスしているサービスがないことを確認してください。
バケット名のスクワッティングのリスク
バケットが削除されると、その名前は解放されるまで 4~8 時間のクールダウン期間に入ります。バケット名を保持したい場合は、バケットを削除するのではなく、空にすることを推奨します。
同期削除のリスク
クロスリージョンレプリケーションまたは同一リージョンレプリケーションを有効にしている場合、削除操作によって送信先バケットのデータも削除される可能性があります。設定を確認してください。
コストと時間の見積もり
多数のオブジェクトをクリーンアップすると、API リクエスト料金が発生する可能性があり、データ量に応じて数時間以上かかる場合があります。
削除が必要なリソースの確認
オブジェクト、パート、アクセスポイント、アクセラレーター、または RTMP インジェスト URL などのリソースが含まれているバケットを削除しようとすると、「The bucket is not empty」 というエラーが表示されます。OSS コンソールの削除ウィザードを使用することを推奨します。このウィザードでは、クリーンアップが必要なすべての項目が自動的にスキャンされ、一覧表示されます。
OSSコンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションペインで一番下までスクロールして、バケットの削除 をクリックします。
バケットの削除 ページで バケットを削除する をクリックすると、クリーンアップが必要な項目を表示できます。
必要なリソースのクリーンアップ
バケットを削除するには、まずバケット内のすべてのリソースをクリーンアップする必要があります。 システムが識別したリソース をクリーンアップしてください。 バケットに多数のオブジェクトが含まれている場合は、ライフサイクルルールを使用 してクリーンアップを自動化することを推奨します。
オブジェクト
「オブジェクト」リソースのステータス列で HDFS 機能が有効になっていると表示されている場合は、まず HDFS オブジェクトをクリーンアップする必要があります。 バージョニングが有効になっている場合、オブジェクトページには現在のバージョンと以前のすべてのバージョンが表示されます。 したがって、すべてのオブジェクトを選択して削除すると、すべてのバージョンが削除されます。
OSS オブジェクト
OSS コンソール
バケットの削除 ページで バケットを削除する をクリックし、[オブジェクト] リソースを見つけて 削除 をクリックします。
すべてのオブジェクトを選択し、ページの下部にある完全に削除をクリックします。
表示されるダイアログボックスで、OK をクリックします。
ossutil
現在のバージョンと以前のバージョンを含む、バケット内のすべてのオブジェクトを削除します。
ossutil rm oss://examplebucket/ -rその他の例については、「rm (削除)」をご参照ください。
HDFS オブジェクト
OSS コンソール
[オブジェクト] リソースのステータス列で、[今すぐ一時停止] をクリックして HDFS バックグラウンドタスクを停止します。
削除 をクリックして HDFS タブに移動します。
すべての HDFS ファイルが削除されるまで、完全に削除 を順にクリックします。
HDFS シェルコマンド
hdfs dfs -rm -r -skipTrash oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/*詳細については、「HDFS シェルコマンドを使用した OSS-HDFS サービスの一般的な操作の実行」をご参照ください。
パート
パートは、未完了のマルチパートアップロードによって生成されたオブジェクトフラグメントです。
OSS コンソール
バケットの削除 ページで、バケットを削除する をクリックし、フラグメント リソースアイテムを見つけ、削除 をクリックします。
オブジェクト ページで、[パート管理] をクリックします。
フラグメント(Multipart) パネルで、すべて削除 をクリックします。
ダイアログボックスで、OK をクリックします。
ossutil
未完了またはキャンセルされたマルチパートアップロードのすべてのパートを削除します。
ossutil rm oss://examplebucket -m -r -f詳細については、「rm (削除)」をご参照ください。
アクセスポイント
左側のナビゲーションバーで、エンドポイント をクリックします。
アクセスポイントごとに、[アクセスポイントの削除] をクリックします。
画面の指示に従って、対応するアクセスポリシーを削除します。
アクセスポリシーを削除した後、アクセスポイントリストに戻ります。 画面の指示に従ってアクセスポイント名を入力し、[OK] をクリックして削除を完了します。
アクセラレータ
アクセラレータを削除すると、そのキャッシュデータのみが消去されることに注意してください。 OSS バケットに保存されているデータに影響はありません。
左側のナビゲーションバーで、バケットの設定 > アクセラレータ をクリックします。
OSS アクセラレーターリストで、操作 列の 削除 をクリックします。
ページの指示に従ってアクセラレーター名を入力し、OK をクリックして削除を完了します。

RTMP インジェスト URL
OSS コンソールまたはツールを使用してバケットの LiveChannel を表示または削除することはできません。 代わりに、SDK を使用するか API を呼び出してください。 詳細については、「DeleteLiveChannel」をご参照ください。 以下のサンプルコードは、指定された LiveChannel を削除する方法の例です。
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.LiveChannelGenericRequest;
/**
* このコードは、指定された LiveChannel を削除する方法の例を示します。
* このプログラムは、Alibaba Cloud OSS で LiveChannel を削除する方法を示します。
*/
public class Demo {
public static void main(String[] args) throws Exception {
// OSS エンドポイント。リージョンに基づいてエンドポイントを選択します。この例では、中国 (杭州) リージョンのエンドポイントを使用します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。例:examplebucket。
String bucketName = "examplebucket";
// LiveChannel 名を指定します。
String liveChannelName = "yourLiveChannelName";
// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// LiveChannel を削除するリクエストを作成します。
LiveChannelGenericRequest request = new LiveChannelGenericRequest(bucketName, liveChannelName);
// 削除操作を実行します。
ossClient.deleteLiveChannel(request);
} catch (OSSException oe) {
// OSS サーバーから返された例外を処理します。
oe.printStackTrace();
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (Exception e) {
System.out.println("Caught an unexpected exception:");
e.printStackTrace();
} finally {
if (ossClient != null) {
// OSSClient リソースを解放します。
ossClient.shutdown();
}
}
}
}バケットの削除
バケット内のすべてのリソースが削除されていることを確認した後、バケットを削除できます。
OSS コンソール
対象のバケットのバケットの削除ページに戻ります。
バケットを削除する をクリックし、プロンプトに従ってバケット名を入力してから、OK をクリックして削除を完了します。
ossutil
次のコマンドは、バケット examplebucket を削除します。
ossutil api delete-bucket --bucket examplebucket詳細については、「delete-bucket」をご参照ください。
OSS SDK
以降のセクションでは、一般的な SDK を使用してバケットを削除するコード例を示します。その他の SDK については、「SDK の概要」をご参照ください。
Java
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
public class Demo {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。例:examplebucket。
String bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient を使用しなくなった場合は、shutdown メソッドを呼び出して関連リソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// バケットを削除します。
ossClient.deleteBucket(bucketName);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} Python
次のサンプルコードは、OSS SDK for Python を使用してバケットを削除する方法を示しています。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドライン引数パーサーを作成し、このスクリプトが指定された OSS バケットを削除するために使用されることを記述します。
parser = argparse.ArgumentParser(description="指定された OSS バケットを削除します。")
# --region コマンドライン引数を追加します。これは、バケットが配置されているリージョンを指定します。この引数は必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket コマンドライン引数を追加します。これは、削除するバケットの名前を指定します。この引数は必須です。
parser.add_argument('--bucket', help='削除するバケットの名前。', required=True)
# --endpoint コマンドライン引数を追加します。これは、他のサービスが OSS にアクセスするために使用できるドメイン名を指定します。この引数は必須ではありません。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名。')
def main():
"""
メイン関数。コマンドライン引数を解析し、指定されたバケットを削除するために使用されます。
"""
args = parser.parse_args() # コマンドライン引数を解析します。
# ID 検証のために環境変数から認証情報をロードします。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定を使用し、認証情報プロバイダーとリージョンを設定します。
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
# endpoint パラメーターが指定されている場合は、設定でエンドポイントを設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 設定に基づいて OSS クライアントを作成します。
client = oss.Client(cfg)
# 指定されたバケットを削除するためのリクエストを構築します。
request = oss.DeleteBucketRequest(bucket=args.bucket)
try:
# リクエストを送信し、レスポンスを取得します。
result = client.delete_bucket(request)
# レスポンスのステータスコードとリクエスト ID を出力します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id}')
except oss.exceptions.OssError as e:
# 発生する可能性のある例外をキャッチして出力します。
print(f"バケットの削除に失敗しました: {e}")
if __name__ == "__main__":
main() # スクリプトのエントリポイント。ファイルが実行されると、main 関数が呼び出されます。
Go
次のサンプルコードは、OSS SDK for Go を使用してバケットを削除する方法を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
var (
region string
bucketName string
)
func init() {
// コマンドラインパラメーターを定義して、バケットのリージョンと名前を指定します。
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// 削除のリクエストオブジェクトを作成します。
request := &oss.DeleteBucketRequest{
Bucket: oss.Ptr(bucketName),
}
// DeleteBucket メソッドを呼び出します。
result, err := client.DeleteBucket(context.TODO(), request)
if err != nil {
log.Fatalf("バケットの削除に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケットの削除結果:%#v\n", result)
}
PHP
次のサンプルコードは、OSS SDK for PHP を使用してバケットを削除する方法を示しています。
<?php
require_once __DIR__ . '/../vendor/autoload.php'; // オブジェクトと依存ライブラリを自動的にロードします。
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータを指定します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。例: oss-cn-hangzhou。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
"bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) バケットの名前を指定します。
];
$longopts = \array_map(function ($key) {
return "$key:"; // 各パラメータの末尾にコロン (:) を追加して、値が必要であることを示します。
}, array_keys($optsdesc));
// コマンドラインパラメータを解析します。
$options = getopt("", $longopts);
// 必須パラメータが構成されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 必須パラメータが構成されていないことを指定します。
exit(1);
}
}
// コマンドラインパラメータの値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
// 環境変数を使用して認証情報 (AccessKey ID と AccessKey シークレット) をロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト構成を使用します。
$cfg=Oss\Config::loadDefault(); // SDK のデフォルト構成をロードします。
$cfg->setCredentialsProvider($credentialsProvider); // 認証プロバイダーを指定します。
$cfg->setRegion($region); // リージョンを指定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合は、エンドポイントを指定します。
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// バケットを削除するリクエストを作成します。
$request = new Oss\Models\DeleteBucketRequest($bucket);
// deleteBucket メソッドを使用してバケットを削除します。
$result = $client->deleteBucket($request);
// 返された結果を表示します。
printf(
'status code:' . $result-> statusCode. PHP_EOL . // HTTP 応答ステータスコード。
'request id:' . $result->requestId // リクエストの一意の識別子。
);
Node.js
const OSS = require('ali-oss');
const client = new OSS({
// region をバケットが配置されているリージョンに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、region を oss-cn-hangzhou に設定します。
region: 'yourregion',
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// bucket をご利用のバケット名に設定します。
bucket: 'yourBucketName',
});
async function deleteBucket() {
try {
// バケット名を指定します。
const result = await client.deleteBucket('yourbucketname');
console.log(result);
} catch (err) {
console.log(err);
}
}
deleteBucket();.NET
using System;
using Aliyun.OSS;
using Aliyun.OSS.Common;
namespace Samples
{
public class Program
{
public static void Main(string[] args)
{
// endpoint を、バケットが配置されているリージョンのエンドポイントに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// bucketName をバケットの名前に設定します。 例: examplebucket。
var bucketName = "examplebucket314";
// region を、バケットが配置されているリージョンの ID に設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、必要に応じてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();
// 署名バージョンを V4 に設定します。
conf.SignatureVersion = SignatureVersion.V4;
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
client.DeleteBucket(bucketName);
Console.WriteLine("Delete bucket succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Delete bucket failed. {0}", ex.Message);
}
}
}
}Android
DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest("bucketName");
// バケットを非同期で削除します。
OSSAsyncTask deleteBucketTask = oss.asyncDeleteBucket(deleteBucketRequest, new OSSCompletedCallback<DeleteBucketRequest, DeleteBucketResult>() {
@Override
public void onSuccess(DeleteBucketRequest request, DeleteBucketResult result) {
Log.d("asyncDeleteBucket", "Success!");
}
@Override
public void onFailure(DeleteBucketRequest request, ClientException clientException, ServiceException serviceException) {
// リクエストは失敗しました。
if (clientException != null) {
// ネットワーク例外などのクライアント例外。
clientException.printStackTrace();
}
if (serviceException != null) {
// サービス例外。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});iOS
OSSDeleteBucketRequest * delete = [OSSDeleteBucketRequest new];
// バケット名を指定します。例:examplebucket。
delete.bucketName = @"examplebucket";
OSSTask * deleteTask = [client deleteBucket:delete];
[deleteTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"delete bucket success!");
} else {
NSLog(@"delete bucket failed, error: %@", task.error);
}
return nil;
}];
// タスクが完了するまで現在のスレッドをブロックします。
// [getdeleteTask waitUntilFinished];C++
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/*OSS アカウント情報を初期化します。*/
/*yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/*yourRegion を、バケットが配置されているリージョンに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/*バケット名を指定します (例: examplebucket)。*/
std::string BucketName = "examplebucket";
/*ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/*環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/*バケットを削除します。*/
DeleteBucketRequest request(BucketName);
auto outcome = client.DeleteBucket(request);
if (outcome.isSuccess()) {
std::cout << "Delete bucket successfully." << std::endl;
} else {
std::cout << "Failed to delete bucket. Error code: " << outcome.error().Code()
<< ", Message: " << outcome.error().Message()
<< ", RequestId: " << outcome.error().RequestId() << std::endl;
}
/*ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}C
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
/* バケット名を設定します。例:examplebucket。*/
const char *bucket_name = "examplebucket";
/* バケットが配置されているリージョンに yourRegion を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t 型を初期化します。*/
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
// 以下の 2 つの追加パラメーターを設定します。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME を使用して OSS にアクセスするかどうかを指定します。値 0 は、CNAME を使用しないことを示します。*/
options->config->is_cname = 0;
/* タイムアウト期間などのネットワークパラメーターを設定します。*/
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリリソースなどのグローバルリソースを初期化します。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリ管理用のメモリプール (pool) は、apr_pool_t に相当します。その実装コードは APR ライブラリにあります。*/
aos_pool_t *pool;
/* 新しいメモリプールを作成します。2 番目のパラメーターは NULL で、プールが他のメモリプールから継承しないことを示します。*/
aos_pool_create(&pool, NULL);
/* オプションを作成して初期化します。このパラメーターには、エンドポイント、access_key_id、access_key_secret、is_cname、curl などのグローバル構成情報が含まれます。*/
oss_request_options_t *oss_client_options;
/* メモリプール内のオプションにメモリを割り当てます。*/
oss_client_options = oss_request_options_create(pool);
/* クライアントオプション oss_client_options を初期化します。*/
init_options(oss_client_options);
/* パラメーターを初期化します。*/
aos_string_t bucket;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
/* char* データを aos_string_t バケットに割り当てます。*/
aos_str_set(&bucket, bucket_name);
/* バケットを削除します。*/
resp_status = oss_delete_bucket (oss_client_options, &bucket, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("delete bucket succeeded\n");
} else {
printf("delete bucket failed\n");
}
/* メモリプールを解放します。これにより、リクエスト中にリソースに割り当てられたメモリが解放されます。*/
aos_pool_destroy(pool);
/* 以前に割り当てられたグローバルリソースを解放します。*/
aos_http_io_deinitialize();
return 0;
}Ruby
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# ここでは、中国 (杭州) リージョンを例として使用します。実際のリージョンに対応するエンドポイントを指定してください。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します。例:examplebucket。
client.delete_bucket('examplebucket')大量データの自動クリーンアップ
バケットに大量 (数百万以上) のオブジェクトが含まれている場合、ライフサイクルルールの設定が、最も効率的でコスト効率の高いクリーンアップ方法です。このアプローチでは、「有効期限切れと削除」のルールを設定して、指定した期間が経過した後にバケット内のすべてのデータを自動的に削除するようシステムに指示します。ライフサイクルルールに詳しくない場合は、まず非本番環境のバケットでテストすることを推奨します。
注: オブジェクトの削除は元に戻せない操作です。注意して進めてください。
バージョニングが無効な場合
バージョニングが無効になっているバケットの場合、1 つのライフサイクルルールを設定するだけで、すべてのオブジェクトとパート (マルチパートアップロードからマージされていないパート) を自動的かつ迅速にクリーンアップできます。
OSS コンソールにログインし、[バケット] ページに移動して、対象のバケットの名前をクリックします。
左側メニューで、 を選択し、バケットのバージョニングが無効になっていることを確認します。
左側メニューで、データ管理 > [ライフサイクル] を選択します。バケット内のすべてのオブジェクトを最終変更日の 1 日後に自動的に削除し、作成から 1 日以上経過したパートを自動的にクリーンアップするライフサイクルルールを設定します。
バージョニングが有効な場合
バケットでバージョニングが有効になっている場合、バケットにはオブジェクトの現行バージョン、以前のバージョン、パート、削除マーカーが含まれる可能性があります。1 つのライフサイクルルールを設定するだけで、これらのすべての項目を自動的かつ迅速にクリーンアップできます。
OSS コンソールにログインし、[バケット] ページに移動して、対象のバケットの名前をクリックします。
左側のナビゲーションバーで、を選択し、バケットのバージョニングが有効になっていることを確認します。
左側のナビゲーションバーで、 を選択し、バケット内の現行バージョンと旧バージョンのすべてのオブジェクトを最終更新から 1 日後に自動的に削除し、1 日以上前に作成されたパートを自動的にクリーンアップするようにライフサイクルルールを設定します。このルールは削除マーカーもクリーンアップします。
よくある質問
「Bucket not empty」エラー
このエラーは、バケットにまだリソースが含まれていることを示します。「必要なリソースのクリーンアップ」で説明されているように、OSS コンソールを使用して残りのリソースを特定し、クリーンアップすることを推奨します。その後、バケットの削除を再度試みてください。
同名のバケットの再作成
バケットが削除された後、その名前は 4~8 時間のクールダウン期間に入ります。この間、どのユーザーもその名前で新しいバケットを作成できません。すぐにバケットが必要な場合は、新しい名前を使用してください。
クールダウン期間が終了すると、その名前はすべてのユーザーが利用できるようになります。バケットを速やかに再作成しない場合、他のユーザーが先にその名前を取得する可能性があります。
複数のバケットの一括削除
一括削除は、永続的なデータ損失を引き起こす可能性がある高リスクの操作です。続行する前に、削除対象のバケットのリストを慎重に確認し、必要なすべてのデータがバックアップされていることを確認してください。
OSS コンソールは一括削除をサポートしていません。ただし、ossutil を使用してこの操作を実行するスクリプトを作成できます。
コア ロジックは以下の通りです:
リストの準備:削除したいすべてのバケット名を含む正確なテキストファイルまたはリストを作成します。
ループ処理:スクリプトでこのリストを反復処理し、各バケット名に対して以下の 2 つの主要なステップを実行する必要があります。
バケットを空にする:現在のバケットに対して、ossutil コマンドを呼び出して空にします。
空のバケットを削除:前のステップが成功したことを確認した後、ossutil コマンドを呼び出してバケットを削除します。
「Insufficient permissions」エラー
バケットを削除する前に、その中のすべてのリソースをクリアする必要があります。このプロセスには、リスト権限や削除権限など、複数の権限が必要です。権限不足による削除の失敗を防ぐため、管理者に連絡して、お使いの RAM アイデンティティに AliyunOSSFullAccess 権限を付与してもらうことを推奨します。
OSS 課金の停止方法
すべての Object Storage Service (OSS) の課金を停止するには、アカウント内のすべてのバケットを削除する必要があります。空であってもバケットが存在する限り、または未払いの請求がある場合は、料金が発生し続ける可能性があります。
削除されたバケットの復元
いいえ。バケットの削除は不可逆な操作です。バケットを削除する前に、必ずデータをバックアップしてください。