5
2

More than 3 years have passed since last update.

【GCP】Cloud Functions の Go 1.13 で取得できなくなった環境変数とそれを置き換えれるメタデータの対応表

Posted at

前回の記事から引き続いてGCF/Go 1.11から Go1.13への移行の話です。
自動的に設定される環境変数にも変更がありました。

Go1.11で設定されている環境変数

キー 説明
ENTRY_POINT 予約済み:実行される機能。
GCP_PROJECT 予約済み:現在のGCPプロジェクトID。
GCLOUD_PROJECT 予約済み:現在のGCPプロジェクトID(非推奨)。
GOOGLE_CLOUD_PROJECT 予約済み:設定されていませんが、内部使用のために予約されています。
FUNCTION_TRIGGER_TYPE 予約済み:関数のトリガータイプ。
FUNCTION_NAME 予約済み:関数リソースの名前。
FUNCTION_MEMORY_MB 予約済み:関数の最大メモリ。
FUNCTION_TIMEOUT_SEC 予約済み:秒単位の実行タイムアウト。
FUNCTION_IDENTITY 予約済み:関数の現在のID(サービスアカウント)。
FUNCTION_REGION 予約済み:関数領域(例:)us-central1。

Go1.13で設定されている環境変数

キー 説明
FUNCTION_TARGET 予約済み:実行される機能。
FUNCTION_SIGNATURE_TYPE 予約済み:関数のタイプ:httpHTTP関数およびeventバックグラウンド関数用。
K_SERVICE 予約済み:関数リソースの名前。
K_REVISION 予約済み:関数のバージョンID。
PORT 予約済み:関数が呼び出されるポート。

環境変数の代わりにメタデータサーバーを使う

メタデータサーバーには、インスタンスのホスト名やインスタンスIDなどのインスタンスのメタデータが保存されています。
通常は、GCEから利用するようですが、GCFからも一部の情報は取得できるようなので確認してみました。

サンプルコードは下記に公開しています。
https://github.com/shigwata/gcp-cloud-functions-env-var

GCFでメタデータ サーバーから取得できた値

メタデータキー
project/attributes/ -
project/attributes/disable-legacy-endpoints -
project/attributes/enable-oslogin -
project/attributes/vmdnssetting -
project/attributes/ssh-keys -
project/numeric-project-id [GCP_PROJECT_NUM]
project/project-id [GCP_PROJECT]
instance/attributes/ -
instance/attributes/enable-oslogin -
instance/attributes/vmdnssetting -
instance/attributes/ssh-keys -
instance/cpu-platform -
instance/description -
instance/disks/ -
instance/guest-attributes/ -
instance/hostname -
instance/id [INSTANCE_ID]
instance/machine-type -
instance/name -
instance/network-interfaces/ -
instance/network-interfaces/0/access-configs/0/external-ip -
instance/network-interfaces/0/forwarded-ips/ -
instance/scheduling/ -
instance/scheduling/on-host-maintenance -
instance/scheduling/automatic-restart -
instance/scheduling/preemptible -
instance/maintenance-event -
instance/service-accounts/ [SERVICE_ACCOUNTS]
instance/service-accounts/default/email [GCP_PROJECT]@appspot.gserviceaccount.com
instance/service-accounts/default/token [TOKEN]
instance/service-accounts/default/identity -
instance/tags -
instance/zone projects/[GCP_PROJECT_NUM]/zones/[ZONE]

全然取れないです。。。

対応表

Go 1.11環境変数 Go 1.13環境変数 メタデータキー
ENTRY_POINT FUNCTION_TARGET -
GCP_PROJECT - project/project-id
GCLOUD_PROJECT - project/project-id
GOOGLE_CLOUD_PROJECT - -
FUNCTION_TRIGGER_TYPE FUNCTION_SIGNATURE_TYPE(※値は一致しない) -
FUNCTION_NAME K_SERVICE -
FUNCTION_MEMORY_MB - -
FUNCTION_TIMEOUT_SEC - -
FUNCTION_IDENTITY - instance/service-accounts/default/email
FUNCTION_REGION - -
- K_REVISION -
- PORT -

対応する値がないものは、デプロイ時に環境変数を設定するしかなさそうですね。

おわりに

GCFもGAEの第二世代のように内部的に大きく変わっているようです。
GCF/Go 1.11は廃止予定が利用ユーザ宛にされたので、この記事が移行の参考になれば幸いです。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2