Golang で Azure Blob Storage
Go 始めてみようと Tour of Go を終えた後、Azure Blob Storage を使った簡単なサンプルWebサイトを作った備忘録です。 Webフレームワークは最初に見かけた Gin を使って、Blobの操作は クイック スタート: Go を使用して BLOB をアップロード、ダウンロード、および一覧表示する を参考にしています。
作ったサンプルから、エラー処理などを省いてBLOB操作部分を抜粋すると以下な感じです。
main.go
一覧
for marker := (azblob.Marker{}); marker.NotDone(); { listBlob, err := containerURL.ListBlobsFlatSegment(ctx, marker, azblob.ListBlobsSegmentOptions{}) if err != nil { ctx.Error(err).SetType(gin.ErrorTypePublic) return } marker = listBlob.NextMarker for _, blobInfo := range listBlob.Segment.BlobItems { items = append(items, blobItem{ Name: blobInfo.Name, Size: *blobInfo.Properties.ContentLength, }) } }
アップロード
formFiles := form.File["file1"] formFile := formFiles[0] fileName := formFile.Filename blobURL := containerURL.NewBlockBlobURL(fileName) file, err := formFile.Open() defer file.Close() if err != nil { ctx.Error(err).SetType(gin.ErrorTypePublic) return } buf := bytes.NewBuffer(nil) if _, err := io.Copy(buf, file); err != nil { ctx.Error(err).SetType(gin.ErrorTypePublic) return } _, err = azblob.UploadBufferToBlockBlob(ctx, buf.Bytes(), blobURL, azblob.UploadToBlockBlobOptions{ BlockSize: 4 * 1024 * 1024, Parallelism: 16})
削除
_, err := blobURL.Delete(ctx, azblob.DeleteSnapshotsOptionNone, azblob.BlobAccessConditions{})
Web App for Containers にデプロイして動作確認。
DockerFile
FROM golang:latest RUN go get -u github.com/Azure/azure-storage-blob-go/azblob && \ go get -u github.com/gin-gonic/gin COPY . /go/app WORKDIR /go/app RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=0 /go/app/ . CMD ["./main"]