Без сервера с лазурными функциями и веб-пакетом
Мне интересно, есть ли кто-нибудь, использующий бессерверный фреймворк с функциями 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.
Надеюсь, поможет.