如何通过AWS SAM esbuild将静态文件打包进Lambda包?
配置SAM + esbuild将HTML模板打包进Lambda包
步骤1:更新SAM模板的构建配置
在Lambda函数的Metadata.BuildProperties中添加CopyFiles配置,告诉esbuild把HTML模板文件复制到打包后的代码目录里:
EmailNotificationFunction: Type: AWS::Serverless::Function Properties: CodeUri: ./lambdas-node/email-notifications/ Handler: daily-summary.handler Timeout: 120 MemorySize: 512 Runtime: nodejs16.x Metadata: BuildMethod: esbuild BuildProperties: Sourcemap: true EntryPoints: - daily-summary.ts CopyFiles: - Source: emailTemplate.html Destination: .
这里CopyFiles的Source是本地模板文件的相对路径(相对于CodeUri指定的目录),Destination: .表示把文件复制到打包后的根目录,和生成的handler文件放在一起。
步骤2:调整代码中的文件读取路径
Lambda执行时的工作目录可能和本地开发环境不一致,建议用__dirname结合path模块构建绝对路径,避免相对路径出错:
如果是JavaScript:
const fs = require('fs'); const path = require('path'); const templateContent = fs.readFileSync(path.join(__dirname, 'emailTemplate.html'), 'utf-8');
如果是TypeScript:
import fs from 'fs'; import path from 'path'; const templateContent = fs.readFileSync(path.join(__dirname, 'emailTemplate.html'), 'utf-8');
完成以上配置后,执行sam build时,esbuild会自动把emailTemplate.html复制到Lambda包中,部署后函数就能正常读取到模板文件了。
内容的提问来源于stack exchange,提问作者Tim Van Laer
相关产品推荐
相关产品推荐

