Amplify Gen2中Lambda函数的文件打包引用问题
Amplify Gen2 Lambda 引用本地文件报错的解决方法
问题场景
使用Amplify Gen2开发Lambda函数,在/functions/validateJsonAgainstSchema目录下创建了handler.ts、resource.ts,同时在该目录下设有schemas文件夹存放JSON Schema文件。但代码中通过schemaPath变量引用文件时,提示文件不存在,推测是缺少文件打包配置导致。
现有代码
handler.ts
import Ajv2020 from 'ajv/dist/2020.js'; import addFormats from 'ajv-formats'; import { readFileSync } from 'fs'; import path from 'path'; import { Handler } from 'aws-lambda'; export const handler: Handler = async (event, context) => { const { roadmapObject, schemaVersion } = event.arguments; try { const schemaPath = path.resolve(__dirname, 'schemas', schemaVersion); const response = readFileSync(schemaPath, 'utf-8'); const ajv = new Ajv2020(); addFormats(ajv); const validate = ajv.compile(JSON.parse(response)); const valid = validate(JSON.parse(roadmapObject)); if (!valid) { return { success: false, errors: validate.errors }; } return { success: true, }; } catch (err: { message: string } | any) { return { success: false, error: err.message, }; } };
resource.ts
import { defineFunction } from '@aws-amplify/backend'; export const validateJsonAgainstSchema = defineFunction({ name: 'validateJsonAgainstSchema', entry: './handler.ts', });
解决步骤
1. 配置打包时复制静态文件
Amplify Gen2默认仅打包入口文件和代码中显式import的依赖,通过fs读取的静态文件需要手动配置复制规则。修改resource.ts,添加bundling.copyFiles配置:
import { defineFunction } from '@aws-amplify/backend'; export const validateJsonAgainstSchema = defineFunction({ name: 'validateJsonAgainstSchema', entry: './handler.ts', bundling: { copyFiles: [ { from: './schemas/**/*', // 匹配schemas目录下所有文件及子目录 to: './schemas/' // 复制到打包后的对应目录 } ] } });
2. 修正文件路径引用逻辑
确保路径包含正确的文件后缀(比如.json),避免因文件名不完整导致找不到文件:
// 修改handler.ts中的路径代码 const schemaPath = path.join(__dirname, 'schemas', `${schemaVersion}.json`);
3. 验证文件命名与权限
- 确认
schemas文件夹下的文件名与schemaVersion参数值完全匹配(Linux环境下区分大小写) - 确保本地文件存在且无读取权限问题
4. 重新部署函数
运行以下命令应用配置变更并部署:
npx ampx deploy
原理说明
Amplify Gen2使用esbuild作为打包工具,默认不会自动包含未被代码import的静态资源。通过copyFiles配置,可以指定将特定目录下的文件复制到最终的Lambda部署包中,确保函数运行时能读取到这些文件。
内容的提问来源于stack exchange,提问作者Zach Starnes
相关产品推荐
相关产品推荐

