AWS Lambda 執行時期環境並不包含最新版本 AWS SDK 的所有功能。我想將最新版本的 AWS SDK for JavaScript 整合到我的 Node.js Lambda 函式中。
簡短描述
若要將最新版本的 AWS SDK 整合到 Lambda 函式的部署套件中,請建立 Lambda 層。然後,將該層新增到您的函式中。
**注意:**對於 Node.js 第16 版及更早版本,Lambda Node.js 執行時期包含 AWS SDK for JavaScript 第 2 版。對於 Node.js 第 18 版及更新版本,Lambda Node.js 執行時期包含 AWS SDK for JavaScript 第 3 版。如需詳細資訊,請參閱 AWS SDK for JavaScript 文件。
如需 Lambda 使用的執行時期和 AWS SDK 版本的完整清單,請參閱 Lambda 執行時期。
**注意:**下列解決方案會增加函式部署套件的大小。如需 Lambda 儲存配額的資訊,請參閱 Lambda 配額。
解決方案
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
(選用) 確認您函式使用的 AWS SDK 版本
請完成下列步驟:
**注意:**此方法僅適用於 Node.js 第 16 版及更早版本。
-
在 Lambda 主控台中建立函式。
-
更新函數的程式碼,以傳回在您調用函數時該函數會使用的 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)。
在與 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 版)
若要安裝最新版本的 AWS SDK 第 3 版,請參閱安裝 SDK for JavaScript。
-
建立要上傳至 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 主控台來建立 Lambda 層,並將其新增至您的函式
AWS CLI
-
若要建立包含最新 AWS SDK 版本的新 Lambda 層,請執行下列 publish-layer-version 命令:
aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes --zip-file fileb://../package.zip --region
**注意:**將 node_sdk 替換為層的名稱,將 My layer 替換為層的描述。此外,將 compatible-runtimes 值替換為您使用的執行時期,並且將 region 替換為您的函式和層所在的 AWS 區域。
-
在輸出中,複製 LayerVersionArn 值以便在下一步中使用。
-
若要將層新增至函式中,請執行下列 update-function-configuration 命令:
aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region
**注意:**將 my-function 替換為您的函式名稱、將 arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 替換為輸出中的 LayerVersionArn 值,並且將 region 替換為您的區域。
如需詳細資訊,請參閱使用層管理 Lambda 相依性。
Lambda 主控台
若要在 Lambda 主控台中建立 Lambda 層並將其新增至您的函式,請完成以下步驟:
- 在 Lambda 主控台中開啟 Layers page (層頁面)。
- 選擇 Create layer (建立層)。
- 在 Name (名稱) 中,輸入層的名稱。
- 選擇 Upload a .zip file (上傳 .zip 檔案),然後選擇部署套件 .zip 檔案的名稱。
- 選擇 Create (建立)。
- 在 Lambda 主控台中開啟 Functions page (函式頁面),然後選擇您要新增層之函式的名稱。
- 在 Layers (層) 中,選擇 Add a layer (新增層)。
- 在 Choose a layer (選擇層) 中,選擇 Custom layers (自訂層)。
- 選擇 Custom Layers (自訂層) 下拉式清單,然後選擇自訂層。
- 選擇 Add (新增)。
(選用) 測試設定
完成 (選用) 確認函式使用的 AWS SDK 版本區段中的步驟來調用您的函式。該函式會傳回其使用的 AWS SDK 版本。
相關資訊
使用 AWS Lambda 函式的最佳做法
如何建置 Node.js 的 Lambda 部署套件?
如何為我的 Lambda Python 函式建立層?