当使用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つの方法

再见!

广告
将在 10 秒后关闭
bannerAds