【GCP】バケットを削除するときは中身を先に削除しないといけない
GCPのバケットをAPIから削除する場合、中身をまず消さないとダメ、という話。
中身が残ってる場合
PHPですが、単純にバケットを消そうとするとこんな感じ。
$storage = new StorageClient(); $bucket = $storage->bucket("name"); $bucket->delete();
バケットが空っぽだと大丈夫ですが、ファイルやフォルダがあると…
====================================================================== The application has thrown an exception! ====================================================================== Google\Cloud\Core\Exception\ConflictException { "error": { "errors": [ { "domain": "global", "reason": "conflict", "message": "The bucket you tried to delete was not empty." } ], "code": 409, "message": "The bucket you tried to delete was not empty." } }
エラーになります。
空っぽじゃないよ、というエラー。
バケットの中身を消してやる
なのでバケットの中身を消してやります。
$storage = new StorageClient(); $bucket = $storage->bucket("name"); // バケットの中身を削除してからバケットを削除する $objects = $bucket->objects(); foreach ($objects as $object) { $object->delete(); } $bucket->delete();
いちいち中身を1つずつ消すというダサいコードです。 とりあえずこれでバケットは削除できます。
一括削除したい場合
APIから
ライブラリのコード確認しましたが、とりあえずPHPではバケットの中身全削除とか、バケットの中身入ってても削除、みたいな方法はありませんでした。。
コンソール
GCPコンソールからは、バケット選択して削除すると、中身ごと消えます。
うーん、やはりAPIはあって、自分の調査不足なのか?
なんかありそうな気もするので、見つけたら追記します。