使用電子建置建置 Node.js Lambda 函數 - AWS Serverless Application Model

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用電子建置建置 Node.js Lambda 函數

要構建和打包 Node.js AWS Lambda 函數,您可以使用 AWS SAMCLI與 esbuild JavaScript 捆綁程序。電子構建捆綁程序支持您編寫的 Lambda 函數。 TypeScript

若要使用電子建置來建置 Node.js Lambda 函數,請將Metadata物件新增至您的AWS:Serverless::Function資源,並esbuild為. BuildMethod 當您執行sam build命令時, AWS SAM 會使用電子建置來捆綁您的 Lambda 函數程式碼。

元數據屬性

Metadata對象支持以下 ebuild 屬性。

BuildMethod

指定應用程式的捆綁器。唯一支援的值為 esbuild

BuildProperties

指定 Lambda 函數程式碼的組建屬性。

BuildProperties對象支持以下 ebuild 屬性。所有屬性都是可選的。依預設, AWS SAM 會使用 Lambda 函數處理常式做為入口點。

EntryPoints

指定應用程式的進入點。

外部

指定要從組建中省略的套件清單。如需詳細資訊,請參閱esbuild網站中的「外部」。

格式

指定應用程式中產生 JavaScript 檔案的輸出格式。如需詳細資訊,請參閱 esbuild 網站中的格式

載入器

指定載入給定檔案類型之資料的組態清單。

MainFields

指定解析封裝時要嘗試匯入的package.json欄位。預設值為 main,module

縮小

指定是否要縮小隨附的輸出程式碼。預設值為 true

OutExtension

自訂 esbuild 所產生之檔案的副檔名。如需詳細資訊,請參閱 esbuild 網站中的 Out 擴充功能。

源映射

指定捆綁器是否產生源映射文件。預設值為 false

設定為時trueNODE_OPTIONS: --enable-source-maps會附加至 Lambda 函數的環境變數,並產生來源對應並包含在函數中。

或者,當包含NODE_OPTIONS: --enable-source-maps在函數的環境變數中時,Sourcemap會自動設定為true

發生衝突時,優Sourcemap: false先順序高於NODE_OPTIONS: --enable-source-maps

注意

根據預設,Lambda 會使用 AWS Key Management Service (AWS KMS) 加密所有靜態環境變數。使用來源對應時,若要成功部署,函數的執行角色必須具有執行kms:Encrypt動作的權限。

SourcesContent

指定是否在來源對應檔案中包含原始程式碼。設定為時,請Sourcemap設定此內容'true'

  • SourcesContent: 'true'定包含所有原始程式碼。

  • 指定排SourcesContent: 'false'除所有原始程式碼。這會導致較小的源映射文件大小,這通過減少啟動時間在生產中非常有用。但是,調試器中將無法使用源代碼。

預設值為 SourcesContent: true

如需詳細資訊,請參閱 esbuild 網站中的來源內容

目標

指定目標電子印刷稿版本。預設值為 es2020

TypeScript Lambda 函數示例

下列範例 AWS SAM 範本程式碼片段使用電子建置,從中hello-world/app.ts的程式 TypeScript 碼建立 Node.js Lambda 函數。

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.handler Runtime: nodejs20.x Architectures: - x86_64 Events: HelloWorld: Type: Api Properties: Path: /hello Method: get Environment: Variables: NODE_OPTIONS: --enable-source-maps Metadata: BuildMethod: esbuild BuildProperties: Format: esm Minify: false OutExtension: - .js=.mjs Target: "es2020" Sourcemap: true EntryPoints: - app.ts External: - "<package-to-exclude>"