LoginSignup
4
3

More than 5 years have passed since last update.

さくらのクラウドのオブジェクトストレージにGo言語からアクセスしたい

Last updated at Posted at 2016-07-13

やりたいこと

参考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)

実装中に作成されたゴミファイルなどの削除に便利です。
こちらもあわせてどうぞ:bangbang:

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3