Go 言語を使って Azure Blob Storage にコンテナーを作成する
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)
}
Discussion