実行時に特定の gflag 値を渡す必要がある Go サーバー プログラムがありますが、GCP の app.yaml ファイルでそれを指定できません。私はGCPにかなり慣れていないので、これは初心者のクエリかもしれません。
私のGoコード構造は次のとおりです。
project_root
|
|___cmd
|___ main
|___ main.go
|___ foo_handlers.go (defines FooHandler(w, r))
|___ bar_handlers.go (defines BarHandler(w, r))
main.go は、大まかに次の構造を持つ典型的な Golang HTTP サーバー プログラムです。
func main() {
// Flags
flag.StringVar(
&SomeFlagVar,
"some_flag", // flag name
"dev_value", // default value
"Some Flag")
flag.Parse()
// Foo
http.HandleFunc("/foo", FooHandler)
// Bar
http.HandleFunc("/bar/", BarHandler)
// Server starting boiler plate code
http.ListenAndServe(..)
私の GCP app.yaml ファイルは、おおよそ次のようになります。
runtime: go114
main: ./cmd/main
handlers:
- url: /.*
script: auto
これは問題なく動作しますが、お気づきのように、カスタム値をsome_flag
フラグに渡すことができません。今のところ、デフォルトのフラグ値を GCP でのデプロイに適した値にハードコードするだけで、その変更をチェックインしていません。これは明らかに、目標を達成するための非常に大雑把な方法です。
構成を次のように設定しようとしましたentrypoint
:
entrypoint: ./cmd/main/main --some_flag=gcp
または
entrypoint: .bin/main --some_flag=gcp
しかし、どちらの場合も、GCP は形式のエラーでエラーを出し/bin/sh: 1: exec: bin/main: not found
ます。
次のように Web dyno を指定することで、Heroku で同じことを非常に簡単に実現できます。
bin/main --some_flag=heroku
GCP アプリで同じ設定を行うにはどうすればよいですか? GCP スタンダード環境を使用しています。そして、同じために環境変数を使用したくありません。
ありがとう!