[cloud]紀錄雲端儲存服務MinIO與Amazon S3開發筆記
簡單紀錄雲端儲存服務MinIO與Amazon S3與使用GO SDK開發筆記”
Amazon Web Services (AWS) S3
*Amazon Web Services (AWS) S3,全名為亞馬遜簡易儲存服務,是亞馬遜公司利用其亞馬遜網路服務系統所提供的網路線上儲存服務。(目前可申請免費12個月),沒有限制,就是用多少付多少錢,可以設定 Billing alert.
如果你有申請AWS帳號,可以用AWS SDK操作上傳到AWS S3,
s3沒有免費開發模擬器,只能註冊使用,但有其他可替代的兼容服務。
剛開始開發時因為沒有申請帳號,所以使用minIO替代.
minIO
MinIO是與Amazon S3兼容的服務器端存儲協議,可以處理最大對像大小為5TB的非結構化數據,例如照片,視頻,日誌文件,備份和容器映像,並附帶web ui介面。
官方文檔:https://docs.min.io/cn/
minIO server
1.自行建立安裝minIO server
各種安裝方式:https://docs.min.io/cn/minio-quickstart-guide.html
Windows系统 執行檔安裝
https://dl.min.io/server/minio/release/windows-amd64/minio.exe1
2
3
4執行minio.exe server D:\Photos
預設開啟9000
RootUser: minioadmin
RootPass: minioadminWindows docker
1
docker run -p 9000:9000 --name minio1 -v D:\data:/data -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" minio/minio server /data
1.接著開啟:http://127.0.0.1:9000/,輸入上面的資訊就可以登入,
2.新增一個bucket,
3.然後上傳檔案成功,
4.上傳的檔案就會出現在 D:\data裡。
但簡單建立的版本並沒有Https,設定上教學裡的win載點已不在..,有興趣可以看這篇安裝:使用TLS安全的访问Minio服务
*HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密封包
2.使用官方提供建立好的minIO server
1 | https://play.min.io |
minIO client
mc
MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。
有興趣可以至MinIO客户端快速入门指南
minIO SDK
自行寫程式撰寫,範例:Golang-minIO
首先使用minio-go
1
go get -u github.com/minio/minio-go
加入範例
自行替換以下endpoint/accessKeyID/secretAccessKey/useSSL資訊這個範例是使用minIO的SDK的範例golang-client-quickstart-guide 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64package main
import (
"context"
"log"
minio "github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
//1.先要建立minIO server
func main() {
// endpoint := "play.min.io"
// accessKeyID := "Q3AM3UQ867SPQQA43P2F"
// secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"
//useSSL := true
endpoint := "127.0.0.1:9000"
accessKeyID := "AKIAIOSFODNN7EXAMPLE"
secretAccessKey := "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
useSSL := false //error http: server gave HTTP response to HTTPS client
// 初使化 minio client对象。
minioClient, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
Secure: useSSL,
})
if err != nil {
log.Printf("err\n")
log.Fatalln(err)
}
log.Printf("ok\n") // minioClient初使化成功
// 创建一个叫mymusic的存储桶。
bucketName := "test11"
location := "us-east-1"
ctx := context.Background()
err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location})
if err != nil {
// 检查存储桶是否已经存在。
exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
if errBucketExists == nil && exists {
log.Printf("We already own %s\n", bucketName)
} else {
log.Printf("err\n")
log.Fatalln(err)
}
} else {
log.Printf("Successfully created %s\n", bucketName)
}
// 上传一个zip文件。
objectName := "ssss.zip"
filePath := "./ssss.zip"
contentType := "application/zip"
// 使用FPutObject上传一个zip文件。
n, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})
if err != nil {
log.Fatalln(err)
}
log.Printf("Successfully uploaded %s of size %d\n", objectName, n)
}
AWS SDK
如果你有用AWS S3的SDK,一樣可以使用它撰寫程式連結到minIO的server,
MinIO官方範例:How to use AWS SDK for Go with MinIO Server,不過該AWS ADK已經有V2了,如果用V2版需要再改一下自行定義資訊的寫法Overriding Endpoint with Fallback,或是讀取AWS config的本地Credentials資訊。
產生Credentials
組態與登入資料檔案設定
Windows 中是使用環境變數 %UserProfile% (通常是c:/users/xxx)來參考,而在 Unix 系統中是使用 $HOME 或 ~ (波狀符號) 來參考
- 可以下載AWS CLI 來幫你產生這些檔案
- minIO server的產生方式可以看這篇AWS CLI with MinIO Server
測試用aws CLI列出buckets
1 | aws configure |
網路參考文章
[cloud]紀錄雲端儲存服務MinIO與Amazon S3開發筆記