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