託管目標工作

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

取消部署 Hosted Targets Proxy

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

刪除代管目標 Proxy

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

存取記錄檔

記錄檔有助於偵錯和疑難排解。您可以查看兩種記錄檔,瞭解代管目標的部署情況:

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

從 Edge UI 存取記錄

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

透過 API 存取記錄

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

使用私人的 npm 存放區

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

使用私人存放區的注意事項

將 Node.js 應用程式部署至 Edge 時,系統會在部署程序中自動匯入專案的所有依附元件。基本上,當您部署程式碼時,系統會在程式碼上執行npm install代管目標。 不過,如果您在開發環境中使用私人 NPM 存放區,則無法在雲端解析私人依附元件。在這種情況下,解決方法是在使用部署公用程式 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 UI 存取鍵/值對應設定頁面,請按照下列步驟操作:

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

    Classic Edge (Private Cloud)

    如要使用傳統 Edge UI 存取「鍵/值對應」設定頁面,請按照下列步驟操作:

    1. 登入 http://ms-ip:9000,其中 ms-ip 是管理伺服器節點的 IP 位址或 DNS 名稱。
    2. 在頂端導覽列中,依序選取「APIs」>「Environment Configuration」>「Key Value Maps」
  4. 按一下「+ 鍵值對應」
  5. 在「New Key Value Map」(新的鍵值對應) 對話方塊中輸入名稱,然後選取「已加密」
  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. 上傳或更新 Node.js 代理程式,並一併上傳 .npmrc 檔案和 app.yaml 檔案。
  12. 確認新版或更新版 Proxy 已部署,且可搭配所需的私有存放區模組運作。
  13. 如果 Proxy 未部署,請檢查建構記錄,確認是否無法安裝私有 npm 模組。如果是這樣的話:
    1. 在「開發」分頁下方,確認 .npmrc 是否存在。
    2. 確認權杖有效 (嘗試在本機安裝模組,並在 kvm 中提供權杖)。
    3. 如果您使用自訂範圍,請確認已設定該範圍。

為已組合的依附元件指定 NPM 版本

根據預設,系統會使用 NPM v4 在 Hosted Targets 環境中安裝已組合的依附元件。 不過,如要使用其他 NPM 版本,可以在 NPM_VERSION 環境變數中指定。您可以在應用程式的資訊清單檔案中設定這個變數。詳情請參閱「資訊清單檔案元素」。

如果您使用已組合的依附元件,且未指定 NPM_VERSION,則 Hosted Targets 預設會使用 NPM v4。如果您未使用已組合的依附元件,系統會使用指定 Node.js 執行階段中包含的 NPM 版本。

套裝組合依附元件範例

如要查看使用託管目標的套裝依附元件功能範例,請參閱「如何使用自訂模組,透過託管函式建立 Node.js 應用程式」。

新增健康狀態檢查端點

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

根據預設,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 執行應用程式

根據預設,Hosted Targets 會使用 npm start 執行 Hosted Target 應用程式。但在上一個工作中,我們討論了使用 NPM 的問題,因為新版會嘗試使用 NPM 快取的 /root/.npm,而這個快取是無法寫入的,因此導致 Hosted Target 無法啟動。雖然先前的作業會解決這個問題,但您也可以選擇不使用 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 只是範例。