Включить файл proto в целевой пакет конструкторов функций NodejsFunction

#aws-lambda #aws-cdk #esbuild

Вопрос:

У меня есть лямбда-функция, которая должна возвращать полезную нагрузку буфера сериализованного протокола. Для этого мне нужен файл myobject.proto в том же каталоге, что и обработчик лямбда.

Для самой функции я использую конструкцию AWS CDK NodejsFunction .

 new NodejsFunction(this, 'LambdaThatCreatesProtobufPayload', {
    entry: './src/lambda/handlers/LambdaThatCreatesProtobufPayload.ts',
    handler: 'handler',
    bundling: {
        minify: true,
    }
});
 

Как я могу включить файл proto в результирующий пакет или предоставить его функции lambda?

Ответ №1:

Можно объединить файл, подобный myobject.proto файлу, с загрузчиком файлов Esbuild.

Настройте пакет для использования загрузчика файлов для файлов с .proto.

 new NodejsFunction(this, 'LambdaThatCreatesProtobufPayload', {
    entry: './src/lambda/handlers/LambdaThatCreatesProtobufPayload.ts',
    handler: 'handler',
    bundling: {
        minify: true,
        loader:  { '.proto': 'file' }
    }
});
 

Затем требуется файл внутри обработчика.

 const pathToProto = require('./myobject.proto')
 

Прилагаемый файл имеет другое имя файла. Поэтому pathToProto содержит путь с новым именем файла:

./myobject-55DNWN2R.прото

Это приводит к развертыванию лямбда-кода с файлом прото и файлом обработчика в одном каталоге.