如何建置 Node.js 的 Lambda 部署套件?

2 分的閱讀內容
0

我想在 Node.js 中為 AWS Lambda 函數建置部署套件,但在調用期間出現「找不到模組」錯誤。

簡短描述

找不到模組錯誤通常由下列三個原因之一引起:

  • Lambda 函數的部署套件沒有正確的資料夾結構,無法讓 Lambda 服務載入所需的模組和程式庫。
  • 部署套件沒有正確的檔案許可。
  • 部署套件不包含要匯入的模組。

**注意:**Lambda 需要全域讀取許可。

解決方法

若要在 .zip 檔案的根資料夾中使用函數程式碼建立部署套件,然後對所有檔案套用讀取和執行許可,請執行下列操作。

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本

適用於 Linux 和 macOS

將相依項安裝至函數專案資料夾

**注意:**大多數 Node.js 模組與平台無關,但有些模組是針對特定作業系統環境進行編譯的。Lambda 在 Linux 環境下執行。使用 npm 安裝模組時,最佳實務是在 Linux 環境中建置 .zip 檔案,以確保包含正確的平台相依項。

1.    在命令列中,將目錄變更為專案資料夾。例如:

cd /project-folder-name

**重要:**請確保將 project-folder-name 取代為實際專案資料夾的名稱。

2.    透過對函數所需的每個模組執行下列命令,在本機將相依項安裝至函數專案資料夾:

注意: 還包括處理常式來源檔案。

npm install package-name

重要:請確保將套件名稱取代為實際的套件名稱。解壓縮檔案的函數大小還有 250 MB 的限制。僅包含函數運作所需的程式庫。

例如,若要將適用於 JavaScript 的 AWS SDK 模組安裝至專案資料夾的根目錄,請執行下列命令:

npm install aws-sdk

**注意:**Lambda 包含適用於 JavaScript 程式庫的 AWS SDK,作為基礎容器組態的一部分。若要使用不同版本的程式庫,您還可以包括本機副本。如需有關目前 Lambda 環境和支援程式庫的詳細資訊,請參閱 Lambda 執行期

建置部署套件

在命令列中,執行下列命令:

zip -r ../function-name.zip .

**注意:**將 function-name 取代為要為部署套件提供的檔案名稱。這會將專案資料夾中的所有檔案放入位於父資料夾的 .zip 檔案中。

驗證部署套件

1.    在命令列中,執行下列命令:

zipinfo ../function-name.zip

**注意:**將 function-name 取代為部署套件的實際檔案名稱。或者,您可以執行 .zip 檔案上的 unzip -l 以列出內容,但輸出不會那麼詳細。

2.    檢查輸出以確認函數處理常式來源檔案位於 .zip 檔案的根目錄中。

3.    檢查輸出以確認您的檔案具有全域讀取許可。如需詳細資訊,請參閱如何對上傳 Lambda 部署套件時發生的「許可遭拒」或「無法匯入模組」錯誤進行疑難排解?

對於 Windows

建置部署套件

1.    在檔案總管中,開啟您的專案資料夾。

2.    選取所有專案檔案,然後按一下滑鼠右鍵以開啟內容功能表。

3.    選擇傳送至,然後選擇壓縮的 (zipped) 資料夾

4.    輸入 .zip 檔案的名稱。

上傳並驗證部署套件

1.    在 Lambda 主控台中,選擇您的函數。

2.    在函數程式碼下,對於程式碼項目類型,選擇上傳 .zip 檔案

3.    在函數套件下,選擇上傳

4.    選擇您建立的 .zip 檔案,然後選擇開啟

5.    在主控台頂端,選擇儲存

**提示:**您也可以透過 AWS CLI 執行 update-function-code 以上傳 .zip 檔案。

6.    上傳完成之後,選擇測試

**提示:**您也可以透過命令列使用 7-Zip 來驗證部署套件的檔案許可。從 7-Zip 網站下載它。


相關資訊

使用 .zip 檔案封存部署 Node.js Lambda 函數

Lambda 部署套件

使用 Node.js 建置 Lambda 函數

AWS 官方
AWS 官方已更新 2 年前