[英]What is the best way to write an VM's external IP to a .env file for a Node.js project running on GCP Compute Engine (Managed Instance Group)
背景資料
我有一個 Node.js 應用程序在 GCP 計算引擎上的虛擬機托管實例組上運行。
新 VM 是從帶有啟動腳本的模板生成的。 該腳本執行通常的操作,安裝 Node.js、curl、git 克隆應用程序代碼等。
此應用程序設置為自動縮放,這就是為什么我需要以編程方式進行配置 - 即在 Node.js 項目的 .env 文件中設置host
和port
。
我是如何嘗試解決問題的
我可以考慮在我的 startup.sh 腳本中以編程方式執行此操作的唯一方法是運行以下命令: gcloud compute instaces list
這會返回類似這樣的內容
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
VM-1 us-central1-a n1-standard-1 XX.XXX.X.X XX.XXX.XXX.XXX RUNNING
VM-2 us-central1-a n1-standard-1 XX.XXX.X.X XX.XXX.XXX.XXX RUNNING
VM-3 us-central1-a n1-standard-1 XX.XXX.X.X XX.XXX.XXX.XXX RUNNING
然后,我想提取當前運行腳本的機器的EXTERNAL_IP,並以某種方式將其寫入環境變量/將其寫入我項目的.env文件。
.env 文件中僅包含以下信息:
{
"config" : {
"host" : "VM_EXTERNAL_IP"
"port" : 3019
}
}
我認為,這種方法需要某種正則表達式從命令 output 中獲取正確的 IP,然后存儲在環境變量中,然后寫入.env。
這似乎是不必要的工作,因為我肯定不是第一個想做這種事情的人。 有這樣做的標准方法嗎? 無論如何,我都不是 Node.js 專家,更不是 GCP 專家。 也許 GCP 上有一種機制來處理這個問題? - 一些元數據 API 可以輕松獲取 IP 以在代碼中使用? 也許在 Node.js 方面有更好的配置主機的方法? 任何建議表示贊賞。
確定外部IP地址的方法有很多。 請注意,您的實例沒有外部公共 IP 地址。 Google 實現了一個一對一的 NAT,它處理 IP 地址到私有 IP 地址的 IP 地址轉換。
CLI 支持命令行選項--format json
。 您可以使用解析 json 的工具,例如jq
。
gcloud compute instances list --format json | jq -r ".[].networkInterfaces[0].accessConfigs[0].natIP"
從多個來源獲取您的公共 IP 地址,這些來源可能與您的實例相同,也可能不同:
https://checkip.amazonaws.com/ 。
curl https://checkip.amazonaws.com/
使用帶有選項的 CLI 來獲取外部地址
gcloud compute instances describe [INSTANCE_NAME] --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
從實例內部讀取元數據服務器:
curl http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip -H "Metadata-Flavor: Google"
一旦確定了獲取外部 IP 地址的方法,就可以使用awk
等工具替換文件中的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.