次の方法で共有


Go を使用して BLOB の削除と復元を行う

この記事では、Go 用の Azure Storage クライアント モジュールを使って BLOB を削除する方法について説明します。 BLOB の論理的な削除を有効にしていた場合は、保持期間中に削除された BLOB を復元できます。

前提条件

環境を設定する

既存のプロジェクトがない場合、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 を削除する

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 を復元したりする方法について詳しくは、次のリソースを参照してください。

コード サンプル

REST API の操作

Azure SDK for Go には Azure REST API に基づき構築されたライブラリが含まれるため、使い慣れた Go パラダイムを通じて REST API 操作を実施できます。 BLOB の削除および削除した BLOB の復元のためのクライアント ライブラリ メソッドでは、次の REST API 操作が使用されます。

クライアント モジュール リソース

関連項目