託管目標工作

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

取消部署代管目標 Proxy

取消部署含有代管目標應用程式的 Edge Proxy 時,系統會取消部署相關聯的代管目標應用程式,但不會刪除基礎應用程式映像檔。如果您重新部署 Proxy,系統會重新部署代管目標應用程式。

刪除代管目標 Proxy

刪除代管目標 Proxy 後,基礎執行階段執行個體會在一定時間內停止運作。不過,應用程式的程式碼仍會保留。

存取記錄檔

記錄檔對於偵錯和疑難排解非常實用。您可以查看兩種代管目標部署的記錄檔:

  • 建構記錄 - 顯示與部署和建構代管目標應用程式相關的輸出內容。
  • 執行階段記錄:顯示與執行中代管目標應用程式相關的輸出內容。執行階段記錄的範圍僅限於環境,並顯示目前部署的 Proxy 修訂版本的記錄檔資訊。

從 Edge UI 存取記錄

  1. 前往:apigee.com/edge
  2. 輸入您的登入憑證,然後按一下「Sign In」
  3. 在側邊導覽選單中依序選取「Develop」(開發) >「API Proxy」
  4. 選取要查看記錄檔的 Proxy。
  5. 按一下「開發」分頁標籤。
  6. 如要查看建構記錄檔,請按一下「Build Logs」
  7. 如要查看執行階段記錄,請按一下「Runtime Logs」

使用 API 存取記錄

您也可以使用 Edge API 擷取代管目標記錄檔。詳情請參閱「取得快取 Node.js 記錄」一文。

使用私人 npm 存放區

本節說明如何在開發環境中使用私人 NPM 存放區時,將 Node.js Proxy 部署至託管的目標。

使用私人存放區的重要須知

將 Node.js 應用程式部署至 Edge 時,系統會在部署程序中,自動匯入專案的所有依附元件。基本上,代管目標會在部署後在您的程式碼上執行 npm install。但如果您在開發環境中使用私人 NPM 存放區,則無法在 Cloud 中解析私人依附元件。在此情況下,解決方法是在使用部署公用程式 apigeetool 使用 --bundled-dependencies 選項。另請參閱「將系統中的 Node.js 從系統部署至 Edge」。

apigeetool 上使用 --bundled-dependencies 標記時,您的 Node.js 應用程式會上傳至代管目標,以及 package.jsonbundledDependencies 陣列中列出的任何本機/私人檔案,都會與套件一起壓縮並上傳。

雖然這不是常見的情況,但請注意,如果在內部複製公開 NPM 存放區,如果您的部署項目組合包含指向私人鏡像的 .npmrcpackage-lock.json 檔案,部署作業就會失敗。在此情況下,請務必在要部署的 Proxy 組合中省略 .npmrcpackage-lock.json

使用私人 NPM 存放區進行部署

如要使用私人 NPM 存放區提供的模組,請按照下列步驟操作:

  1. 登入 npm:
    npm login
  2. 取得 npm 驗證權杖:
    1. 找出您的 .npmrc (應該位於 ~/.npmrc)。
    2. .npmrc 中,記下行末端的權杖,如下所示:

      //registry.npmjs.org/:_authToken=****
    3. 或者,使用 npm token <list | create | revoke> 指令列出、建立或撤銷驗證權杖。詳情請參閱 npm-token 說明文件
  3. 按照下文說明存取「鍵/值對應」設定頁面。

    Edge

    如何使用 Edge UI 存取鍵/值對應設定頁面:

    1. 登入 apigee.com/edge
    2. 在左側導覽列中,依序選取「管理」>「環境」>「鍵/值對應」

    傳統邊緣 (Private Cloud)

    如何使用傳統版 Edge UI 存取鍵/值對應設定頁面:

    1. 登入 http://ms-ip:9000,其中 ms-ip 是管理伺服器節點的 IP 位址或 DNS 名稱。
    2. 在頂端的導覽列中,依序選取「API」>「環境設定」>「鍵/值對應」
  4. 按一下「+ 鍵/值對應」
  5. 在「New Key Value Map」對話方塊中輸入名稱,然後選取「Encrypted」
  6. 按一下 [新增]。
  7. 將您先前找到或建立的驗證權杖新增為剛建立的每個 KVM 中的新項目。
  8. app.yaml 檔案中,新增參照 KVM 和與 npm 驗證權杖相關聯的金鑰的項目。如下所示:
  9. env:
    - name: NPM_TOKEN
     valueRef:
       name: npm_store
       key: private_token

    在此情況下:

    • 頂層 name 屬性對應至即將建立的環境變數名稱。
    • valueRef 下方的 name 會對應至您先前建立的 KVM。
    • key 屬性會對應至您新增至 KVM 的 npm 權杖的金鑰。
  10. 在與 package.json 相同的目錄中建立 .npmrc 檔案。這個檔案看起來會像這樣:
    //registry.npmjs.org/:_authToken=${NPM_TOKEN}
    。如果您不使用 registry.npmjs.org,可以在 .npmrc 檔案中設定範圍,請新增類似以下的 @myscope:registry=https://mycustomregistry.example.org@myscope:registry=https://mycustomregistry.example.org。另請參閱 npmrc 說明文件
  11. 使用內含的 .npmrc 檔案和 app.yaml 檔案上傳或更新 Node.js Proxy。
  12. 確認新的或更新的 Proxy 已部署項目,且可與所需的私人存放區模組搭配運作。
  13. 如果 Proxy 未部署,請查看建構記錄檔,確認其安裝私人 npm 模組是否失敗。若是如此:
    1. 在開發分頁中,確認 .npmrc 存在。
    2. 請確認您的權杖有效 (請嘗試在本機使用 kvm 中的權杖在本機安裝模組)。
    3. 如果您使用的是自訂範圍,請確認該範圍已設定完畢。

為隨附依附元件指定 NPM 版本

根據預設,NPM v4 是用來在代管目標環境中安裝套裝組合依附元件。不過,如果您想使用其他 NPM 版本,可以在 NPM_VERSION 環境變數中指定。您可以在應用程式的資訊清單檔案中設定這個變數。詳情請參閱「資訊清單檔案元素」。

如果您使用組合依附元件,而且未指定 NPM_VERSION,代管目標會預設使用 NPM v4。如未使用套裝組合依附元件,系統會採用指定的 Node.js 執行階段中包含的 NPM 版本。

組合依附元件示例

如需示範隨附依附元件功能與代管目標的範例,請參閱如何使用自訂模組建立含有代管函式的 Node.js 應用程式

新增健康狀態檢查端點

您可以選擇為 Node.js 應用程式實作健康狀態檢查端點。Apigee 會在 Node.js 應用程式開始檢查應用程式是否正在容器中運作時使用這個端點。

根據預設,Apigee 預期的端點為 /health。如要變更預設端點,請在名為 HOSTED_TARGET_HEALTH_CHECK_PATH 的環境變數中指定端點。您可以在應用程式的資訊清單檔案中設定這個變數。詳情請參閱「資訊清單檔案元素」。

您不一定要實作健康狀態檢查端點。不過,如果您確實實作健康狀態檢查端點,請注意以下事項:

  • 如果 Apigee 到達端點時結束,應用程式就無法正常啟動。
  • 如果端點傳回 404 Not Found HTTP 狀態,表示沒有問題。/healthHOSTED_TARGET_HEALTH_CHECK_PATH 僅用於檢查應用程式是否正在執行。因此會忽略實際回應。

變更 NPM 快取位置

較新版本的 Node.js 採用 NPM 版本,針對 NPM 快取使用 /root/.npm。 這個位置對代管目標有問題,因為代管目標執行階段採用的 tmpfs 檔案系統,其中只有 /tmp 可以寫入。如要解決這個問題,您可以在應用程式 app.yaml 檔案 (資訊清單檔案) 中,將 npm_config_cache 環境變數設為 /tmp 內的目錄。例如:

  runtime: node
  application: my-express-app
  env:
    - name: npm_config_cache
      value: /tmp/.npm
    - name: NODE_ENV
      value: production
    - name: LOG_LEVEL
      value: 3
  

不使用 NPM 執行應用程式

根據預設,代管目標會使用 npm start 執行代管目標應用程式。但在先前的工作中,我們討論過使用 NPM 時會發生的問題,因為新版本會嘗試使用 /root/.npm 進行 NPM 快取 (無法寫入),導致代管目標無法啟動。雖然先前的工作會解決這個問題,但另一個選項是在不使用 NPM 的情況下執行應用程式。方法是在應用程式的 app.yaml 檔案 (資訊清單檔案) 中使用 commandargs 值,直接使用 node index.js 執行代管目標。例如:

  runtime: node
  application: my-express-app
  command: node
  args:
    - index.js
  env:
    - name: NODE_ENV
      value: production
    - name: LOG_LEVEL
      value: 3
  
當然,您可以使用任何合適的指令,而 node index.js 只是範例。