簡體   English   中英

對於在 GCP 計算引擎(托管實例組)上運行的 Node.js 項目,將 VM 的外部 IP 寫入 a.env 文件的最佳方法是什么

[英]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 文件中設置hostport

我是如何嘗試解決問題的

我可以考慮在我的 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等工具替換文件中的值。

https://www.grymoire.com/Unix/Awk.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM