Без сервера с лазурными функциями и веб-пакетом

Мне интересно, есть ли кто-нибудь, использующий бессерверный фреймворк с функциями Azure и как вы управляете совместным использованием кода между функциями и связыванием?

Я преобразую приложение hapi.js в функции serverless + serverless-azure и пытаюсь связать свой код перед развертыванием, чтобы я мог использовать различные require для многоразовых модулей.

Я нашел serverless-webpack, и он создает пакеты, которые, вероятно, работают на AWS Lambda, но есть проблема с лазурью из-за отсутствия function.json файлы (напр. list-function.json), поэтому функции вообще не видны внутри портала Azure, и я не могу вызвать их.

Также нашел статью об этой проблеме, но он показывает, как справиться с этим с azure-functions-cli которые поддерживают только платформу Windows.

Best, JH

1 ответ

Полезные советы от https://medium.com/a-man-with-no-server/deploying-a-serverless-application-using-webpack-and-babel-to-support-es2015-to-aws-2f61cff8bafb, I изменен тестовый проект запуска серверных функций Azure с serverless-webpack, который, кажется, удовлетворен вашим требованием.

Я построил src папка в корневом каталоге проекта бессерверных функций Azure, как папка с исходным кодом для разработки. С 2 тестовыми файлами:
handler.js

'use strict';
let tool = require("./tool");
/* eslint-disable no-param-reassign */

module.exports.hello = function (context) {
  context.log('JavaScript HTTP trigger function processed a request.');

  context.res = {
    // status: 200, /* Defaults to 200 */
    body: tool.hello(),
  };

  context.done();
};

tool.js

module.exports={
    hello:()=>{
        return "hello world";
    }
}

webpack.config.js в корневом каталоге:

var nodeExternals = require('webpack-node-externals')

module.exports = {
   entry: './src/handler.js',
   target: 'node',
   externals: [nodeExternals()],
   output: {
      libraryTarget: 'commonjs',
      path: __dirname,
      filename: 'handler.js', // this should match the first part of function handler in serverless.yml
   },
   module: {
      loaders: [
         {
            test: /\.jsx?$/,
            exclude: /node_modules/,
            include: __dirname,
            loaders: ["babel-loader"]
         }
      ]
   }
};

С каким файлом конфигурации файл из комплекта будет находиться в service/handler.js в корневой директории.

Поэтому я модифицировал serverless.yml а теперь это отчасти выглядит так:

package:
  include:
    - service/handler.js
  exclude:
    - handler.js

functions:
  hello:
    handler: service/handler.hello
    events:
      - http: true
        x-azure-settings:
          authLevel : anonymous
      - http: true
        x-azure-settings:
          direction: out
          name: res

custom:
  webpackIncludeModules:
    packagePath: './package.json'

После того, как они изменены, используйте serverless deploy будет связывать файлы в src папку, затем упакуйте и разверните в функцию Azure.

Надеюсь, поможет.

Другие вопросы по тегам