この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
データアナリティクス事業本部の森脇です。
今回は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作成も行えるようでした。