Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何使用層將適用於 JavaScript 的 AWS SDK 最新版本整合到我的 Node.js Lambda 函數中?
AWS Lambda 執行時期環境沒有 AWS SDK 最新版本的某些功能。我想要將適用於 JavaScript 的 AWS SDK 最新版本整合到我的 Node.js Lambda 函數中。
簡短描述
若要將最新版本的 AWS SDK 整合到 Lambda 函數的部署套件中,請建立 Lambda 層。然後,將該層新增到您的函數中。若要建立 Lambda 層並將其新增至您的函數,請使用 AWS Command Line Interface (AWS CLI) 或 Lambda 主控台。
**注意事項:**對於 Node.js 第 16 版及更舊版本,Lambda Node.js 執行時期包括適用於 JavaScript 的 AWS SDK 第 2 版。對於 Node.js 第 18 版及更新版本,Lambda Node.js 執行時期包括適用於 JavaScript 的 AWS SDK 第 3 版。如需詳細資訊,請參閱 Node.js 18.x 執行時期現在可用於 AWS Lambda。
如需 Lambda 使用的執行時間和 AWS SDK 版本的完整清單,請參閱 Lambda 執行時期。
**注意事項:**下列解決方案會增加函數部署套件的大小。如需 Lambda 儲存配額的資訊,請參閱 Lambda 配額。
解決方案
**注意事項:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
(選用) 確認您的函數使用的 AWS SDK 版本
若要確認您的函數使用的 AWS SDK 版本,請完成下列步驟:
**注意事項:**僅對 Node.js 第 16 版及更舊版本使用此方法。
-
更新函數的程式碼,以傳回在您調用函數時該函數會使用的 AWS SDK 版本:
const AWS = require('aws-sdk') exports.handler = async (event) => { return AWS.VERSION; };
-
比較函數傳回的 AWS SDK 版本與 AWS SDK 文件中列出的 AWS SDK 最新版本。
安裝和封裝最新版本的 AWS SDK
**注意事項:**部署套件必須與您使用的 Lambda 執行時期相容。最佳實踐是對 Lambda 執行時期中指定的執行時期使用相同的作業系統 (OS)。例如,啟動相容的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。
在與 Lambda 相容的本機開發環境中,完成下列步驟:
-
執行下列命令以建立工作目錄:
mkdir -p aws-sdk-layer/nodejs
-
執行下列命令以變更至工作目錄:
cd aws-sdk-layer/nodejs
-
為 Node.js 執行時期版本安裝 AWS SDK:
Node.js 16 及更舊版本 (AWS SDK 第 2 版)
若要安裝最新版本的 AWS SDK 第 2 版,請使用 Amazon Linux 2 相容執行個體執行下列命令:npm install aws-sdk
如需詳細資訊,請參閱教學課程: 在 Amazon EC2 執行個體上設定 Node.js。
**注意事項:**最佳實踐是在開發 Lambda 資源時,使用 Amazon Linux 2 環境。
-或-
如果您使用 Windows 或 macOS 作業系統進行開發,請使用 Docker 執行下列命令:
docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:<version>" /bin/sh -c "npm install aws-sdk; exit"
**注意事項:**在執行命令之前,請確定您使用的是 Docker 網站上最新版本的 Docker。
Node.js 18 及更新版本 (AWS SDK 第 3 版)
如果您匯入內嵌於 Lambda 的 SDK 版本中不存在的 AWS SDK 命令,可能會收到下列錯誤:
「Runtime.UserCodeSyntaxError "Named export not found" The requested module is a CommonJS module」
在這種情況下,請安裝特定的套件以便在函數中使用。例如,您使用下列匯入陳述式:
import {DeleteQueueCommand} from "@aws-sdk/client-connect";
在這種情況下,請安裝更新的用戶端,以便您可以在函數中使用特定的套件。
例如,您在具有 Node.js 第 18 版或更新版本的 Lambda 函數中使用下列匯入陳述式:
import {DeleteQueueCommand} from "@aws-sdk/client-connect";
如果此套件不在您目前的 AWS SDK 版本中,則您會在日誌中收到下列錯誤:
「"errorType": "Runtime.UserCodeSyntaxError",
"errorMessage": "SyntaxError: Named export 'DeleteQueueCommand' not found.The requested module '@aws-sdk/client-connect' is a CommonJS module, which may not support all module.exports as named exports.\nCommonJS modules can always be imported via the default export, for example using:\n\nimport pkg from '@aws-sdk/client-connect';\nconst {DeleteQueueCommand} = pkg;\n",」若要包含 DeleteQueueCommand 套件並解決此錯誤,請安裝最新版本的用戶端:
npm install @aws-sdk/client-connect
-
建立要上傳至 Lambda 層的 .zip 檔案:
zip -r ../package.zip ../
-
(選用) 驗證您安裝的 AWS SDK 版本:
cat package-lock.json
您會收到類似於下列範例的輸出:
{ "requires": true, "lockfileVersion": 1, "dependencies": { "aws-sdk": { "version": "2.888.0", ...
使用 AWS CLI 來建立 Lambda 層並將其新增至您的函數
-
若要建立包含您想要使用的最新 AWS SDK 版本的新 Lambda 層,請執行下列 publish-layer-version 命令:
**注意事項:**將 node_sdk 取代為層的名稱,並且將 My layer 取代為層的描述。此外,將 compatible-runtimes 值取代為您使用的執行時期,並且將 region 取代為您的函數和層所在的 AWS 區域。
aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes --zip-file fileb://../package.zip --region
記下命令輸出中的 LayerVersionArn 值以在下一步中使用。
-
若要將層新增至函數中,請執行下列 update-function-configuration 命令:
注意事項: 將 my-function 取代為您的函數名稱、將 arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 取代為輸出中的 LayerVersionArn 值,並且將 region 取代為您的區域。
aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region
如需詳細資訊,請參閱使用 Lambda 層。
使用 Lambda 主控台來建立 Lambda 層並將其新增至您的函數
- 在 Lambda 主控台中開啟層頁面。
- 選擇建立層。然後,輸入下列值:
對於名稱,輸入新層的名稱。
(選用) 對於描述 - 選用,輸入層的描述。
選擇上傳 .zip 檔案。
選擇上傳。然後,選擇部署套件 .zip 檔案的名稱。
(選用) 對於相容的執行時期 - 選用,選擇一個或多個相容的執行時期。
(選用) 對於授權 - 選用,輸入層的任何適用軟體授權資訊。 - 選擇建立。
- 在 Lambda 主控台中開啟函數頁面,然後選擇您想要將層新增至其中的函數名稱。
- 在函數概觀下方,選擇層。
- 選擇新增層。
- 在選擇層下,選擇自訂層。然後,選擇下列值:
層的名稱
層的版本 - 選擇新增。
(選用) 測試設定
完成 (選用) 確認函數使用的 AWS SDK 版本區段中的步驟來調用您的函數。該函數會傳回其使用的 AWS SDK 版本。
您也可以在您使用的 AWS SDK 的 CHANGELOG 檔案中驗證最新版本的 AWS SDK。如需詳細資訊,請參閱 GitHub 網站上的適用於 JavaScript 的 AWS SDK 的變更日誌或適用於 JavaScript 的 AWS SDK 第 3 版的變更日誌。
相關資訊
相關內容
- 已提問 2 年前lg...
- 已提問 5 個月前lg...
- 已提問 3 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 4 個月前
- AWS 官方已更新 2 年前