Go言語(golang)で、Azure Blob Storageからファイルを取得する
データアナリティクス事業本部の森脇です。
今回はAzure Blob Storageからファイルを取得する方法についてご紹介したいと思います。
使用するGo言語のバージョンは1.13.6です。
sdkをインストールする
github.com/Azure/azure-sdk-for-go/storage を使用します。
$ go mod init example.com/azure_blob/read go: creating new go.mod: module example.com/azure_blob/read $ go get -u github.com/Azure/azure-sdk-for-go/storage . . . $ cat go.mod module example.com/azure_blob/read go 1.13 require ( github.com/Azure/azure-sdk-for-go v40.3.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.10.0 // indirect github.com/satori/go.uuid v1.2.0 // indirect )
v40.3がインストールされました。
作る
main.goファイルを作成し、実装していきます。
クライアントを作成する
Blob Storageを操作するには、まずClientを作成します。 今回はストレージアカウント名とアクセスキーを用いたシンプルなクライアントを作成します。
package main import ( "log" "github.com/Azure/azure-sdk-for-go/storage" ) func main() { storageAccountName := "xxxx" accessKey := "yyyyy" // clientを作成 client, err := storage.NewBasicClient(storageAccountName, accessKey) if err != nil { log.Fatal(err) } }
このclientを利用してBlobストレージにアクセスします。
ファイル(Blob)を取得する
package main import ( "bufio" "io" "log" "os" "github.com/Azure/azure-sdk-for-go/storage" ) func main() { storageAccountName := "xxxx" accessKey := "yyyyy" // clientを作成 client, err := storage.NewBasicClient(storageAccountName, accessKey) if err != nil { log.Fatal(err) } // コンテナを取得 containerName := "zzz-container" blobService := client.GetBlobService() container := blobService.GetContainerReference(containerName) // Blobオブジェクトを書き込むファイルの作成 f, err := os.Create("sample.txt") if err != nil { log.Fatal(err) } defer f.Close() // パスからreaderを取得 filePath := "sample.txt" blob := container.GetBlobReference(filePath) opt := &storage.GetBlobOptions{} reader, err := blob.Get(opt) if err != nil { log.Fatal(err) } defer reader.Close() // ローカルファイルに書き込み tee := io.TeeReader(reader, f) s := bufio.NewScanner(tee) for s.Scan() { } if err := s.Err(); err != nil { log.Fatal(err) } log.Println("done") }
実行してみます。
$ go run main.go 2020/03/11 16:15:32 done
実行が完了し、ローカルに取得することができました。
まとめ
「github.com/Azure/azure-sdk-for-go/storageを使うことで、簡単にファイルを取得することができました。 今回は一番シンプルな認証方法でClientを作成しましたが、SASを用いたClient作成も行えるようでした。