GCPでアプリケーションを動かす場合、Project ID のパラメータをプログラム内から利用したい場合があります。
環境変数で渡す、というのも方法として悪くないと思いますが、
GCP環境で動いている場合にはメタサーバからProject IDを取得することができます。
今回はGoを用いてメタサーバから取得する方法をメモしておきます。
コード
import "cloud.google.com/go/compute/metadata" ~~ snip ~~ c := metadata.NewClient(&http.Client{}) pid, err := c.ProjectID() ~~ snip ~~
上記のような比較的簡単なコードでプロジェクトIDを取得することができます。
注意点
上記のコードは、GCP上のメタサーバへ接続する処理が内部で行われているため、
ローカルや、何かCI環境上で取得処理を実行する場合、接続先に到達できずtimeoutが発生します。
timeoutが発生すること自体は問題がないように思えるかもしれませんが、しばらくプログラムが止まっている状態になるので、
テストなどで呼ばれると非常に困ると思いますので、呼び出す部分でGCP上で実行されているか否かの判定処理などは必要になりますのでご注意を。
その他の関数
metadataの実装をサラッとみる限り以下のようなものが実装されています。
ProjectID NumericProjectID InstanceID InternalIP ExternalIP Hostname InstanceTags InstanceName Zone InstanceAttributes ProjectAttributes InstanceAttributeValue ProjectAttributeValue Scopes Subscribe
適当に抽出してこのような感じです。
参考
ではでは。