託管目標工作

您正在查看 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

取消部署託管目標 Proxy

當您取消部署包含 Hosted Targets 應用程式的 Edge Proxy 時,系統會取消部署相關聯的 Hosted Targets 應用程式,但不會刪除基礎應用程式映像檔。如果您重新部署 Proxy,系統會重新部署 Hosted Targets 應用程式。

刪除託管目標 Proxy

刪除託管目標 Proxy 之後,基礎執行階段執行個體會在一段時間內停止執行。不過,應用程式程式碼會保留下來。

存取記錄檔

記錄檔在偵錯和疑難排解時相當實用,您可以查看兩種類型的代管目標部署記錄檔:

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

透過 Edge UI 存取記錄

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

使用 API 存取記錄

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

使用私人 npm 存放區

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

使用私人存放區的須知事項

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

apigeetool 上使用 --bundled-dependencies 標記時,Node.js 應用程式會上傳至 Hosted Targets,且 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. 在左側導覽列中依序選取「Admin」>「Environments」>「Key Value Map」

    傳統版 Edge (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另請參閱 npmrc 說明文件
  11. 使用 .npmrc 檔案和 app.yaml 檔案上傳或更新 Node.js 委派伺服器。
  12. 確認新的或更新的 Proxy 會部署完畢,並與所需的私人存放區模組搭配運作。
  13. 如果 Proxy 未部署,請查看建構記錄檔,確認是否能安裝私人 npm 模組失敗。如果是:
    1. 在「develop」分頁下方,確認是否有 .npmrc
    2. 確認您的權杖有效 (嘗試在 kvm 中顯示權杖,在本機安裝模組)。
    3. 如果您使用的是自訂範圍,請務必加以設定。

指定套件內建依附元件的 NPM 版本

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

如果您使用內含的依附元件,且未指定 NPM_VERSION,則代管目標預設會使用 NPM 4。如果您不使用內含的依附元件,系統會使用您指定 Node.js 執行階段所包含的 NPM 版本。

隨附依附元件範例

如需搭配代管目標示範套件依附元件功能的範例,請參閱「如何使用自訂模組建立代管函式的 Node.js 應用程式」。

新增健康狀態檢查端點

您可以選擇為 Node.js 應用程式實作健康狀態檢查端點。當 Node.js 應用程式開始檢查應用程式是否已啟動並在容器中執行時,Apigee 會使用這個端點。

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

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

  • 如果您的應用程式在 Apigee 到達端點時結束,應用程式將不會如預期啟動。
  • 端點傳回 404 找不到 HTTP 狀態碼也沒關係。/healthHOSTED_TARGET_HEALTH_CHECK_PATH 僅用於檢查應用程式是否正在執行。系統會略過實際回應。

變更 NPM 快取位置

較新版本的 Node.js 採用的 NPM 版本使用 /root/.npm 做為 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只是示例。