Go を使用して BLOB の削除と復元を行う
この記事では、Go 用の Azure Storage クライアント モジュールを使用して BLOB を削除する方法と、論理的に削除された BLOB を保持期間内に復元する方法を説明します。
前提条件
- Azure サブスクリプション - 無料アカウントを作成する
- Azure Storage アカウント - ストレージ アカウントの作成
- Go 1.18+
環境を設定する
既存のプロジェクトがない場合、Go 用 Azure Blob Storage クライアント モジュールを操作するためのプロジェクトを設定する方法についてこのセクションで説明します。 この手順には、モジュールのインストール、import
パスの追加、認可されているクライアント オブジェクトの作成が含まれます。 詳細については、Azure Blob Storage および Go の概要に関するページを参照してください。
モジュールのインストール
次のコマンドを使用して、azblob モジュールをインストールします。
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Microsoft Entra ID で認証するには (推奨)、次のコマンドを使用して azidentity
モジュールをインストールします。
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
インポート パスの追加
コード ファイルに、次のインポートを追加します。
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
これらのインポート パスは、作業を始めるために最低限必要なものを表します。 この記事の一部のコード例では、追加のインポート パスが必要な場合があります。 具体的な詳細と使用例についてはコード サンプルに関するページを参照してください。
クライアント オブジェクトの作成
アプリを Blob Storage に接続するには、azblob.NewClient を使用してクライアント オブジェクトを作成します。 次の例では、認可のために DefaultAzureCredential
を使用してクライアント オブジェクトを作成する方法を示します。
func getServiceClientTokenCredential(accountURL string) *azblob.Client {
// Create a new service client with token credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(accountURL, credential, nil)
handleError(err)
return client
}
承認
認可メカニズムには、BLOB の削除、または論理的に削除された BLOB の復元のために必要なアクセス許可が必要です。 Microsoft Entra ID を使用した認可 (推奨) には、Azure RBAC 組み込みロールのストレージ BLOB データ共同作成者以上が必要です。 詳しくは、「Delete Blob (REST API)」と「Undelete Blob (REST API)」の認可のガイダンスを参照してください。
BLOB を削除する
Note
ストレージ アカウントで BLOB の論理的な削除が有効になっている場合、クライアント ライブラリ メソッドを使用して完全削除を実行することはできません。 この記事の方法を使用すると、論理的に削除された BLOB、BLOB バージョン、スナップショットは、保持期間が終了してそれらが完全に削除されるまでは利用可能な状態となります。 基になる REST API 操作の詳細については、「BLOB の削除 (REST API)」を参照してください。
BLOB を削除する場合は、次のメソッドを呼び出します。
次の例では、BLOB を削除します。
func deleteBlob(client *azblob.Client, containerName string, blobName string) {
// Delete the blob
_, err := client.DeleteBlob(context.TODO(), containerName, blobName, nil)
handleError(err)
}
BLOB にスナップショットが関連付けられている場合は、そのスナップショットをすべて削除してから BLOB を削除する必要があります。 次の例では、BLOB とそのスナップショットを削除します。
func deleteBlobWithSnapshots(client *azblob.Client, containerName string, blobName string) {
// Delete the blob and its snapshots
_, err := client.DeleteBlob(context.TODO(), containerName, blobName, &blob.DeleteOptions{
DeleteSnapshots: to.Ptr(blob.DeleteSnapshotsOptionTypeInclude),
})
handleError(err)
}
BLOB 自体ではなくスナップショット "のみ" を削除するには、パラメーター DeleteSnapshots
に値 DeleteSnapshotsOptionTypeOnly
を渡します。
削除された BLOB を復元する
BLOB の論理的な削除を使用すると、削除されたデータがシステムに一定の期間保有されることにより、個々の BLOB とその複数バージョン、スナップショット、およびメタデータが誤った削除や上書きから保護されます。 保持期間中は、BLOB を削除時の状態に復元できます。 保持期間が過ぎると、BLOB は完全に削除されます。 BLOB の論理的な削除の詳細については、「BLOB の論理的な削除」を参照してください。
Azure Storage クライアント ライブラリを使用して、論理的に削除された BLOB またはスナップショットを復元できます。
論理的に削除された BLOB を復元する方法は、ストレージ アカウントで BLOB のバージョン管理が有効になっているかどうかに応じて異なります。 BLOB のバージョン管理の詳細については、「BLOB のバージョン管理」を参照してください。 実際のシナリオに応じて、次のいずれかのセクションを参照してください。
バージョン管理が無効になっている場合に論理的に削除されたオブジェクトを復元する
バージョン管理が無効になっているときに削除された BLOB を復元するには、次のメソッドを呼び出します。
このメソッドは、論理的に削除された BLOB と、関連付けられている論理的に削除されたスナップショットのコンテンツとメタデータを復元します。 削除されていない BLOB に対してこのメソッドを呼び出しても効果はありません。
func restoreDeletedBlob(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Restore the deleted blob
_, err := blobClient.Undelete(context.TODO(), &blob.UndeleteOptions{})
handleError(err)
}
バージョン管理が有効になっている場合に論理的に削除されたオブジェクトを復元する
ストレージ アカウントが BLOB のバージョン管理を有効にするように構成されている場合、BLOB を削除すると、BLOB の現在のバージョンが以前のバージョンになります。 バージョン管理が有効になっている場合に論理的に削除された BLOB を復元するには、ベース BLOB に以前のバージョンをコピーします。 次のメソッドを使用できます。
次のコード例では、削除された BLOB のバージョンを識別し、それをベース BLOB にコピーしてバージョンを復元しています。
func restoreDeletedBlobVersion(client *azblob.Client, containerName string, blobName string, versionID string) {
// Reference the blob as a client object
baseBlobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
blobVersionClient, err := baseBlobClient.WithVersionID(versionID)
handleError(err)
// Restore the blob version by copying it to the base blob
_, err = baseBlobClient.StartCopyFromURL(context.TODO(), blobVersionClient.URL(), nil)
handleError(err)
}
Note
このガイドのコード サンプルは、Azure Blob Storage と Go の使用を開始するのに役立つことを目的としています。 エラー処理と Context
の値は、アプリケーションのニーズに合わせて変更する必要があります。
リソース
Go 用 Azure Blob Storage クライアント モジュールを使って、BLOB を削除したり、削除された BLOB を復元したりする方法について詳しくは、次のリソースを参照してください。
コード サンプル
- この記事のコード サンプルを表示する (GitHub)
REST API の操作
Azure SDK for Go には Azure REST API に基づき構築されたライブラリが含まれるため、使い慣れた Go パラダイムを通じて REST API 操作を実施できます。 BLOB の削除および削除した BLOB の復元のためのクライアント ライブラリ メソッドでは、次の REST API 操作が使用されます。
- Delete Blob (REST API)
- Undelete Blob (REST API)