Монорепозиторий можно охарактеризовать как репозиторий, содержащий более одного логического проекта. Эти проекты могут быть несвязанными, слабо связанными или связанными инструментами управления зависимостями, обычно они имеют большой размер, ветки, коммиты и работающие разработчики.
Бессерверные вычисления, такие как AWS Serverless, предлагают ряд преимуществ по сравнению с традиционной облачной или серверно-ориентированной инфраструктурой. Для многих разработчиков бессерверные архитектуры предлагают большую масштабируемость, большую гибкость и более быстрое время выпуска, при меньших затратах. Благодаря бессерверным архитектурам разработчикам не нужно беспокоиться о покупке, настройке и управлении внутренними серверами.
В этой статье рассказывается, как создать бессерверное приложение AWS с помощью Nx Dev Tool Extension и Serverless Framework.
Создание рабочей области и библиотеки с помощью Nx
Выполните эту команду, чтобы создать рабочую область.
npm init nx-workspace myworkspace
В этом примере я использую пустую рабочую область и Angular CLI (если вы используете VSCode, вы можете использовать плагин Angular Console для создания приложений, библиотек и т. Д.).
С пустым рабочим пространством Nx нет приложений, которые нужно создавать, обслуживать и тестировать. Команда добавляет в рабочую область возможности приложения узла.
cd myworkspace && npm install --save-dev @nrwl/node
После добавления возможности я создаю два приложения.
ng g @nrwl/node:application hello-app ng g @nrwl/node:application greeting-app
И библиотека.
ng g @nrwl/workspace:lib common-util
Применение бессерверной инфраструктуры к рабочей области
Для создания бессерверного приложения AWS с помощью Serverless Framework приложению необходим файл serverless.yml.
В каталоге hello-app добавляем файл serverless.yml с содержимым.
service: hello-app
provider:
name: aws
runtime: nodejs10.x
stage: dev
region: us-east-1
webpack:
webpackConfig: 'webpack.config.js'
includeModules: true
packager: 'npm'
packExternalModulesMaxBuffer: 204800
functions:
hello: ${file(apps/hello-app/src/functions/hello/hello.yml)}
plugins:
- serverless-webpack
Точно так же добавьте serverless.yml в каталог welcome-app.
// Update service: greeting-app ... functions: greeting: ${file(apps/greeting-app/src/functions/greeting/greeting.yml)}
Добавьте библиотеки для AWS и Serverless.
npm install --save aws-lambda npm install --save-dev serverless serverless-webpack tsconfig-paths-webpack-plugin
Подробнее о бессерверном плагине вы можете узнать здесь. Затем добавьте файл webpack.config.js в корневой каталог рабочей области.
const path = require('path');
const slsw = require('serverless-webpack');
const nodeExternals = require('webpack-node-externals');
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
module.exports = {
externals: [nodeExternals()],
devtool: 'source-map',
entry: slsw.lib.entries,
resolve: {
extensions: ['.js', '.json', '.ts', '.tsx'],
plugins: [
new TsconfigPathsPlugin()
]
},
target: 'node',
module: {
rules: [
{
test: /\.ts(x?)$/,
use: [
{
loader: 'ts-loader'
}
]
}
]
},
plugins: [],
mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
stats: 'minimal', // errors-only, minimal, none, normal, verbose
output: {
libraryTarget: 'commonjs',
path: path.resolve(__dirname, '.webpack'),
filename: '[name].js'
}
};
См. Подробнее serverless-webpack.
Структура рабочего пространства.
Чтобы проиллюстрировать, насколько полезными могут быть библиотеки. Обновление файла common-util.ts в библиотеке common-util.
export const getMessage = () => { return 'This is a message from workspace library'; };
Добавьте файлы hello.handler.ts, hello.yml и index.ts в каталог functions / hello и также обратитесь к библиотеке common-util, см. фрагмент кода ниже:
//hello.handler.ts
import { Handler, Context } from 'aws-lambda';
import { getMessage } from '@myworkspace/common-util';
export const handler: Handler = async (event: any, context: Context) => {
return {
statusCode: 200,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ message: getMessage() })
};
};
//hello.yml
handler: apps/hello-app/src/functions/hello/index.handler
description: A function for Hello Application
events:
- http:
path: /hello
method: get
//index.ts
export * from './hello.handler';
Аналогичным образом добавьте файлы welcome.handler.ts, welcome.yml и index.ts в functions / welcome. каталог с содержимым как hello.handler.ts, hello.yml.
Развертывание
Чтобы развернуть AWS Serverless Application с Serverless Framework, вам необходимо установить AWS CLI и настроить AWS Credential. Поскольку каждое приложение отделено, я могу развернуть каждое приложение отдельно.
sls deploy --config apps/hello-app/serverless.yml
sls deploy --config apps/greeting-app/serverless.yml
Результат:
Заключение
В этом руководстве бессерверное приложение AWS создано с использованием замечательных инструментов и шаблонов, которые сделают нашу жизнь как разработчиков довольно приятной.
Первоначально опубликовано на https://blog.innomizetech.com.