利用方法をメモしておきます。
GAE/GのFileServiceはなぜか、ドキュメントに記載されていない(8/2現在)ので、
GAE/GのSDKのソースコードを見て使い方を理解する必要があります。
(もしくは、Python版、Java版のプログラムから推測するとか…)
ということで、時間がある時にいじって、Blogにメモしようと思います。
1. Google API Consoleで課金設定をONにする。
Google Cloud Storageは課金設定をONにしないと、書き込みも読み込みも、Bucketの作成さえもできないようなので、課金をONにします。
課金をONにしないとIO_ERRORになってしまいます。
※ローカル環境では、何もしなくても実行可能なので、ローカルでしか動かさないという人は、この手順は不要です。
2. Google APIs ConsoleのTeamにサービスのアカウントを追加する。
GAEのアプリケーションからアクセスさせるためには、API Consoleにサービスのアカウントを追加しなければPERMISSION_DENIEDでエラーになります。
サービスのアカウントの場所は、http://appengine.google.comのGAEのアプリケーションにある、
Application→Application Settingsを開きBasic(一番上)のService Account Nameにあるので、書かれているアカウントをコピーします。
[app-id]@appspot.gserviceaccount.com
みたいなものが、書かれていると思います。
(app-idは作成したappidが書かれています。)
Google APIs ConsoleのTeamのところに、ペーストして、権限設定をして追加すれば完了です。
※ローカル環境では、何もしなくても実行可能なので、ローカルでしか動かさないという人は、この手順は不要です。
3. Go言語でプログラムを作成し、デプロイする。
package controller
import (
"appengine"
"appengine/file"
"fmt"
"net/http"
)
func init() {
http.HandleFunc("/", list)
}
func list(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
name, err := file.DefaultBucketName(c);
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
} else {
fmt.Fprintf(w, "DefaultBucketName = %s", name)
}
options := new(file.CreateOptions)
options.MIMEType = "text/plain"
options.BucketName = "yourBucketName"
// if wc, absFileName, cErr := file.Create(c, "/gs/yourBucketName/test/sample.txt", options); cErr != nil {
if wc, absFileName, cErr := file.Create(c, "test/sample.txt", options); cErr != nil {
fmt.Fprintf(w, "Create Error")
fmt.Fprintf(w, " %s", absFileName)
c.Debugf("Create Error %s [%s]", cErr.Error(), absFileName)
} else {
fmt.Fprintf(w, "Create Success")
fmt.Fprintf(w, " %s", absFileName)
if _, wErr := wc.Write([]byte("Sample Text")); wErr != nil {
c.Debugf("Write Error = %s", wErr.Error())
}
wc.Close()
if fi, statErr := file.Stat(c, absFileName); statErr != nil {
c.Debugf("%s", statErr.Error())
} else {
c.Debugf("%s %d", fi.Name(), fi.Size())
}
}
}
4. 実行
上記のプログラムを実行すると、作成したBucketの中のtestフォルダの中にsample.txtが
作成されていると思います。
GAE/Gだと、file.CreateOptionsにBucketNameが指定されていないと、デフォルトの
BucketNameが設定される様になっているのですが、本番環境では、""(空文字列)なので
作成時にエラーになると思います。(BucketNameは必ず指定する必要があるので)
(ちなみに、ローカル環境だと"app_default_bucket"というのが設定されます)
後は、プログラムを見れば大体わかると思いますが、ファイル作成時は、絶対パス指定でも、
相対パス指定でもファイルの参照は可能です。
絶対パス指定の場合は、先頭に"/gs"をつける必要があります。
書式は「/gs/[Bucket名]/フォルダ名/ファイル名」となります。
フォルダ名を省略すれば、Bucketの直下(という表現が正しいのか?)に作成されると思います。
ということで、課金が恐ろしいですが、
1GBあたり、$0.12とか、$0.01とか、ある程度のところまでは、円高のおかげでうまい棒程度で済みそうなので
いろいろいじってみたいと思います。
(参考:https://developers.google.com/storage/docs/pricingandterms?hl=ja)
はじめまして。
返信削除ここ数日、Google Cloud Storage にファイルを作成、保存できずに悩んでいました。
が、Teamにサービスのアカウントを登録する箇所を参考にさせていただき、解決することができました。
感謝の意を込めて、コメントさせていただきます。
また参考にさせて頂きたいと思います。