Google App EngineのGolang 1.12でファイルの読み書きテスト

2020-02-19

Google App Engineで静的ファイルの読み書きをテストしてみます。

Google App Engineが第二世代になって、利用できるAPIが大きく変更されました。また、静的ファイルへのアクセスができるようになったので、その読み書きができるか検証してみたいと思います。

ここで静的ファイルというのは、app.yamlに以下のような記述をして外部から読み出すことができるようにしたファイルです。

- url: /test.txt
  static_files: statics/test.txt
  upload: statics/test.txt
  mime_type: text/plain

このファイルの内容は、以下のようなGolangのコードで読み出せます。

   data, err := ioutil.ReadFile("statics/test.txt")
   if err != nil {
      log.Fatal(err)
   }
   fmt.Fprintf(w, "%s", data)

次に、以下のようなコードでファイルに書き込みます。

   err := ioutil.WriteFile("statics/test.txt", []byte("書き込み成功!"), 0644)
   if err != nil {
      fmt.Fprintf(w, "Error: %v", err)
   }

これをローカルで実行すると、エラーなく正常に実行できて、test.txtには「書き込み成功!」の文字が書き込まれます。

ちなみに、Golang 1.12で実行するためにapp.yamlには runtime: go112 の設定が必要ですが、App Engineのローカル開発環境では、go112を受け付けないので、ローカル実行時には go111を設定しました。

ローカルでうまくいったので本サーバにアップして確認したところ、読み出しはうまくいきますが、

Error: open statics/test.txt: read-only file system

エラーになりました。当然といえば当然です。もしこれで書き込みできるのであれば、簡単なものはデータベースなどを使わずにすむ算段でしたが、素直に別の方法を考える必要があります。

GolangGoogle App Engine