GolangでAmazonS3にアクセスする方法はいくつかあるものの、RiakCSに対応してるかどうかはまた別の話のようでそれなりに苦戦したのでここに書く。
RiakCSにアクセスするために必要なこととして、古いバージョン(v2)のsignatureに対応してるかどうかと、Region指定で、RiakCSの動いてるホストを指定できるかの二点がある。とりあえず、最近Amazonから出てきたaws-sdk-goではv4しか対応してないので選択肢はgoamz シリーズに絞られる。今回はgoamzのあまたあるforkの中でもstarの多いmitchellh/goamz を使ってみた。
package main
import (
"fmt"
"github.com/mitchellh/goamz/aws"
"github.com/mitchellh/goamz/s3"
)
var RiakCS = aws.Region{
"riak-cs",
"",
"http://localhost:8080",
"",
true,
true,
"",
"",
"",
"",
"",
"",
"",
"",
}
func main() {
// The AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables are used.
auth, err := aws.EnvAuth()
if err != nil {
fmt.Println("1: ", err)
panic(err.Error())
}
// Open Bucket
s := s3.New(auth, RiakCS)
bucket := s.Bucket("test")
data := []byte("hoge")
err = bucket.Put("sample.txt", data, "text/plain", s3.Private)
if err != nil {
fmt.Println("2: ", err)
panic(err.Error())
}
}