0

実行時に特定の 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 でのデプロイに適した値にハードコードするだけで、その変更をチェックインしていません。これは明らかに、目標を達成するための非常に大雑把な方法です。

構成を次のように設定しようとしましたentrypointentrypoint: ./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 スタンダード環境を使用しています。そして、同じために環境変数を使用したくありません。

ありがとう!

4

1 に答える 1