前回の記事から引き続いて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は廃止予定が利用ユーザ宛にされたので、この記事が移行の参考になれば幸いです。