🍣

Go 言語を使って Azure Blob Storage にコンテナーを作成する

2023/05/07に公開

Azure では、Go 言語を使って Azure サービスと通信できるようにするライブラリが用意されています。
今回、実際にコンテナーを作成して試してみたいと思います。

事前準備

フォルダーを作成し、go.mod を作成します。IDE を使っている方は、Go のプロジェクトを作成します。

mkdir azureblob-storage-withgo
cd azureblob-storage-withgo
touch go.mod

Azure ストレージアカウントを作成します。

ACCOUNT=<ストレージアカウント名>
RESOURCEGROUP=<リソースグループ名>
az storage account create --name $ACCOUNT --resource-group $RESOURCEGROUP --location japaneast --sku Standard_LRS

これで準備完了です。

必要なパッケージのインストール

Azure Blob Storage SDK for Go をインストールします。

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

Azure Active Directory のモジュールもインストールします。

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

go.mod には以下を記載します。module と Go のバージョンについては説明を割愛します。

module azureblob-storage-withgo

go 1.20

require (
    github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2 // indirect
    github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.0.0 // indirect
)

書いていく

ここから粛々とコードを書いていきます。main.go を作成します。

touch main.go

最初にエラーハンドリングを書いておきます。

func handleError(err error) {
    if err != nil {
        log.Fatal(err.Error())
    }
}

クライアントを認証する

Azure Blob Storage サービスと対話するためには、azblob.Client タイプのインスタンスを作成する必要があります。
azidentity モジュールを使用すると、Azure SDK クライアントを対応する Azure サービスで認証するための Azure Active Directory サポートを追加することができます。

//Azure Blob Storage Account を使用するために、認証情報を取得する
cred, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)

// 認証を使用する、ストレージアカウントの azblob.Client を作成する
client, err := azblob.NewClient(account, cred, nil)
handleError(err)

コンテナーを作成する

ストレージアカウントの中にコンテナーを作成します。

//container を作成する
fmt.Println("Create a container")
_, err = client.CreateContainer(ctx, containerName, nil)
handleError(err)

おっと、コンテナーの情報を入れていませんでした。作成したストレージアカウントの情報と作成する予定のコンテナー名を入力します。

const (
    account       = "https://<ストレージアカウント名>.blob.core.windows.net/"
    containerName = "sample-container"
)

今回は作成までなので、コードとしては以上になります。こちらを実行していくと、ストレージアカウントの中にコンテナーが作成されます。

% go run main.go
% az storage container list --account-name <ストレージアカウント名>

プログラムを実行してコンテナーが作成されたことを確認できました。

おわりに

Azure SDK for Go を使用して、ストレージのコンテナーを作成することができました。そのほか、ファイルのアップロードや削除などもできるので、別途書いてみたいと思います。

今回参考にした記事はこちらです。

コード全体

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

func handleError(err error) {
    if err != nil {
        log.Fatal(err.Error())
    }
}

func main() {
    fmt.Printf("Hello Azure Blob\n")

    const (
        account       = "https://<ストレージアカウント名>.blob.core.windows.net/"
        containerName = "sample-container"
    )
    ctx := context.Background()

    //Azure Blob Storage Account を使用するために、認証情報を取得する
    cred, err := azidentity.NewDefaultAzureCredential(nil)
    handleError(err)

    client, err := azblob.NewClient(account, cred, nil)
    handleError(err)

    //container を作成する
    fmt.Println("Create a container")
    _, err = client.CreateContainer(ctx, containerName, nil)
    handleError(err)
}
GitHubで編集を提案
Microsoft (有志)

Discussion