やりたいこと
参考1:さくらのクラウド オブジェクトストレージをRubyから操作する
参考2:さくらのクラウド オブジェクトストレージをPythonから操作する
これをGo言語からやりたい。
結論
mitchellh/goamzを使えばできました。
以下は試した記録です。
試した1:AWS公式SDK / ダメでした
aws/aws-sdk-go:S3 V2 signing(#400)
現状ではsignature v2には対応してない。
さくらのクラウドのオブジェクトストレージはv2のみ対応。
試した2:goamz / できた!
安心のHashicorp社mitchellh(Mitchell Hashimoto)のリポジトリですね。
これならいける、、?
こちらの記事ではできてそうなので試してみました。
参考:GolangでRiakCSにオブジェクトを書き出す
main.go
package main
import (
"os"
"log"
"github.com/mitchellh/goamz/aws"
"github.com/mitchellh/goamz/s3"
)
func main() {
//アップロードするファイル
file, err := os.Open("./test.txt")
if err != nil {
log.Println(err.Error())
}
defer file.Close()
//アップロードするファイルのサイズ取得用
fi , err := file.Stat()
if err != nil {
log.Println(err.Error())
}
// s3クライアントを環境変数から作成
// 事前に以下の値を環境変数に設定しておく
// AWS_ACCESS_KEY_ID : アクセスキーID
// AWS_SECRET_ACCESS_KEY : シークレットアクセスキー
auth, err := aws.EnvAuth()
if err != nil {
panic(err.Error())
}
cli := s3.New(auth , aws.Region{
Name : "us-west-2", //なんでもいいらしい
S3Endpoint : "https://b.sakurastorage.jp", //さくらのオブジェクトストレージ用URL
})
// バケット
bucket := cli.Bucket("wanwano")
// バケットに対しアップロード
err = bucket.PutReader("test.txt" , file , fi.Size(), "text/plain" , s3.PublicRead)
if err != nil {
panic(err.Error())
}
}
クレデンシャルを環境変数から読めるようにしてくれてて楽。
以上です。
おまけ
オブジェクトストレージの操作について記事を書きました。
さくらのクラウドのオブジェクトストレージを使う(docker + s3cmd)
実装中に作成されたゴミファイルなどの削除に便利です。
こちらもあわせてどうぞ