当使用CDK创建Node.js的Lambda函数时,如何打包除了js|ts以外的文件?
太长不看 (太長不看)
在定义bundling.commandHooks.beforeBundling并在其中使用cp命令进行复制即可!
new NodejsFunction(this, 'lambda', {
runtime: Runtime.NODEJS_18_X,
architecture: Architecture.ARM_64,
functionName: 'my-nodejs-function',
handler: 'handler',
entry: 'lambda/index.ts',
bundling: {
commandHooks: {
beforeBundling(inputDir: string, outputDir: string): string[] {
return [`cp ${inputDir}/lambda/hoge.txt ${outputDir}`];
},
afterBundling(): string[] {
return [];
},
beforeInstall(): string[] {
return [];
},
},
},
});
阐述
如果要使用CDK在Node.js中创建Lambda函数,可以使用NodejsFunction类来完成,包括TypeScript的构建等,可以顺利进行。
由于一些js | ts不相关的文件被忽略并进行捆绑处理,所以如果在程序中使用readFileSync(’hoge.txt’)之类的代码时,该文本文件将不会上传到Lambda并且无法正常工作。
在这种情况下,如果使用第一种方法,你可以上传任何文件。因为它是一个可以执行任意UNIX命令的选项,所以不仅限于文件复制,似乎还有很多其他应用!
顺便说一句,虽然这次不会使用afterBundling和beforeInstall,但是在commandHooks中必须以3点集团形式定义函数,否则会出错,因此需要编写一个只返回[]的函数。
请参考以下网站
-
- Command hooks: AWS CDK公式ドキュメント
-
- node.js – How can I bundle additional files with NodejsFunction? – Stack Overflow
- NodeJsFunctionのビルド時に依存関係を解決する3つの方法
再见!