寝ても覚めてもこんぴうた

プログラム書いたり、ネットワーク設計したり、サーバ構築したり、車いじったり、ゲームしたり。そんなひとにわたしはなりたい。 投げ銭は kyash_id : chidakiyo マデ

GCP のメタサーバから Project ID を取得する(Cloud Runでも)

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

適当に抽出してこのような感じです。

参考

github.com

ではでは。