Nasadenie aplikácie NestJS s bez serverového rámca

Vyskúšajte Náš Nástroj Na Odstránenie Problémov

Nasadenie aplikácie NestJS s bez serverového rámca

My sme veľmi nadšený rámcom NestJS . Je to dosť mladé, ale v súčasnosti to považujeme za jedno z nich najlepšie rámce NodeJS . Nedávno sme sa pýtali, či je to možné nasadzujte aplikácie NestJS bez serverov .

Serverless je nová paradigma, ktorá vám pomôže rýchlo nasadiť vašu koncovú aplikáciu so znížením nákladov. Ak sa chcete dozvedieť viac o bez serveroch, začiarknite toto článok .

Serverless Framework je práve najznámejšie riešenie nasadiť aplikáciu bez servera. Má rovnaké výhody ako mnoho ďalších serverových rámcov:



  • Je to jednoduché, aplikáciu môžete nasadiť jediným príkazom
  • Je to rýchle, aplikáciu nasadíte do jednej minúty alebo menej
  • V neposlednom rade vám umožňuje nasadiť aplikáciu bez použitia palubného panela AWS

Pomôcť vám môže mnoho ďalších serverových rámcov: Claudia.js , Hore , Architekt atď. Popularita serverového rámca ho však stavia o krok vpred:

  • Má dobrú dokumentáciu a veľa doplnkov
  • Je to cloudová agnostika: rovnakým príkazom sa môžete nasadiť do rôznych cloudov

Toto je riešenie, ktoré chceme použiť pre našu aplikáciu!

Tento tutoriál vám dá kľúče na nasadenie už existujúceho rozhrania NestJS API s bez serverového rámca . Neprinesie vám žiadne podrobnosti o ako vytvoriť vlastnú aplikáciu NestJS alebo ako to otestovať. Prejdeme všetkými krokmi od konfigurácie vašej aplikácie nestJS a jej testovania offline až po jej nasadenie. Predtým než začneme, predstavme si Serverless Framework!

previesť python na java online

Ak chcete priamo vidieť kód bez serverov nasaditeľnej aplikácie nestJS, tu je Github môjho projektu.

Predpoklady

  • Účet AWS
  • Node.js
  • NPM (alebo priadza)
  • Aplikácia NestJS

Serverless Framework

Cloudové funkcie a bez servera

Aby sme lepšie pochopili úlohu rámca bez serverov, pripomeňme si, čo je to paradigma bez serverov:

Serverless je spôsob nasadenia a spustenia aplikácií v cloudovej infraštruktúre na základe platby za používanie a bez prenájmu alebo nákupu serverov. Namiesto vás je za plánovanie kapacity, škálovanie, vyvažovanie a monitorovanie zodpovedný poskytovateľ platformy bez serverov; poskytovateľ je tiež schopný považovať vaše aplikácie za funkcie.

SERVEROVÉ APLIKÁCIE S NODE.JS SLOBODAN STOJANOVIC A ALEKSANDAR SIMOVIC

Tieto funkcie uvedené v citáte vyššie sú cloudové funkcie. Cloudové funkcie ako AWS Lambda , Google Cloud Functions, Azure Function sú nezávislé vývojové jednotky, ako mikroslužba. Sú to iba kódy navrhnuté na nasadenie v cloude a na vykonávanie malých úloh.

Prezentácia bez serverového rámca

Rámec bez servera môže vytvárať takéto cloudové funkcie z kódu vašej aplikácie. Hneď po vytvorení nasadí tieto funkcie vo vašom poskytovateľovi cloudových služieb. Táto operácia trvá menej ako minútu .

Rámec podporuje viacero jazykov, ako sú Node.js, Python, Java. Jeho najväčšou devízou okrem rýchlosti je jednoduchosť použitia a agnosticizmus v súvislosti s cloudovými platformami . Je kompatibilný s AWS, Microsoft Azure a Google Cloud Provider. Serverless Framework okrem toho umožňuje nasadenie plne nakonfigurovaných cloudových funkcií. Môžete mať spustenú AWS Lambda bez použitia palubnej dosky AWS .

Nastavenie rámca bez servera

Nainštalujte Serverless-cli pomocou tohto jednoduchého príkazu.

# Installing the serverless cli npm install -g serverless

Po inštalácii musíte nastaviť poverenia poskytovateľa cloudu. Ak ešte nemáte účet AWS, vytvorte si ho. Vytvorte si používateľa pomocou služby AWS IAM a získajte jeho prístupový kľúč a tajný prístupový kľúč.

Teraz vytvorte súbor .aws/poverenia vo vašom užívateľskom koreňovom adresári s nasledujúcim obsahom:

[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_ACCESS_KEY

To je všetko s konfiguráciou bez servera! Teraz sa zamerajme na nasadenie vašej aplikácie NestJS.

Nainštalujte si aplikáciu NestJS

Odtiaľ sa tutoriál bude zameriavať iba na nasadenie funkcií AWS Lambda . Tu je diagram typickej serverovej aplikácie s AWS.

API Gateway vytvára REST API pred vašimi lambdami. V predvolenom nastavení každý projekt bez servera generuje novú bránu API. Serverless Framework môžete nakonfigurovať na zdieľanie zdrojov API Gateway a API.

Vytvorte si handlera

Aby server bez serverov mohol stavať vašu lambdu, musíte aplikáciu zabaliť. Musíte poskytnúť vstupný bod pre server bez kompilácií vášho kódu vo funkcii lambda . Tento vstupný bod bude a objekt handlera exportovaný do súboru lambda.ts . Tento vstupný bod nie je pre každého poskytovateľa cloudu rovnaký.

Vytvorte súbor lambda.ts súbor v priečinku src vašej aplikácie.

Súbor main.tsfile môže tiež slúžiť ako vstupný bod pre server bez servera, ale je lepšie nechať kód svojej aplikácie nezmenený.

. ├── package.json ├── serverless.yml ├── tsconfig.json └── src ├── app.controller.ts ├── app.module.ts ├── app.service.ts ├── lambda.ts ├── main.ts └── photo ├── photo.controller.ts ├── photo.entity.ts ├── photo.module.ts ├── photo.service.ts └── interfaces └── photo.dto.ts

Ak ste napríklad vyvíjali Express API, môžete balík použiť serverless-http vytvoriť svoj vstupný bod. S aplikáciou NestJS je to o niečo ťažšie, balík v súčasnosti v rámci NestJS nefunguje. Ako možno viete, Nest pod kapotou predvolene používa Express. Na vytvorenie vstupného bodu bez servera s Nest budete potrebovať plnú kontrolu nad expresným životným cyklom. Na to musíte použiť funkciu ** NestFactory **.

const expressApp = express(); const nestApp = await NestFactory.create(AppModule, new ExpressAdapter(expressApp)

Budete tiež musieť importovať funkcie z doplnku _aws-serverless-express _ a aws-lambda. Pomôžu previesť vašu aplikáciu na server schopný zvládnuť udalosti AWS.

Nainštalujte si do projektu doplnok aws-lambda a aws-serverless-express.

npm install --save aws-serverless-express npm install --save aws-lambda

Do súboru lambda.ts vložte nasledujúci kód:

// lambda.ts import { Handler, Context } from 'aws-lambda'; import { Server } from 'http'; import { createServer, proxy } from 'aws-serverless-express'; import { eventContext } from 'aws-serverless-express/middleware'; import { NestFactory } from '@nestjs/core'; import { ExpressAdapter } from '@nestjs/platform-express'; import { AppModule } from './app.module'; const express = require('express'); // NOTE: If you get ERR_CONTENT_DECODING_FAILED in your browser, this // is likely due to a compressed response (e.g. gzip) which has not // been handled correctly by aws-serverless-express and/or API // Gateway. Add the necessary MIME types to binaryMimeTypes below const binaryMimeTypes: string[] = []; let cachedServer: Server; // Create the Nest.js server and convert it into an Express.js server async function bootstrapServer(): Promise { if (!cachedServer) { const expressApp = express(); const nestApp = await NestFactory.create(AppModule, new ExpressAdapter(expressApp)) nestApp.use(eventContext()); await nestApp.init(); cachedServer = createServer(expressApp, undefined, binaryMimeTypes); } return cachedServer; } // Export the handler : the entry point of the Lambda function export const handler: Handler = async (event: any, context: Context) => { cachedServer = await bootstrapServer(); return proxy(cachedServer, event, context, 'PROMISE').promise; }

Konfigurovať bez servera

Po vytvorení vstupného bodu lambda nakonfigurujte bez servera na vytváranie tejto lambda. Vytvorte súbor serverless.yaml v koreni vášho projektu s obsahom:

service: name: nest-serverless-framework-demo plugins: '@hewmen/serverless-plugin-typescript' serverless-plugin-optimize serverless-offline provider: name: aws runtime: nodejs8.10 functions: main: # The name of the lambda function The module 'handler' is exported in the file 'src/lambda' handler: src/lambda.handler events: - http: method: any path: /{any+}

S touto konfiguráciou Serverless vytvorí hlavnú funkciu Lambda, ktorá bude slúžiť všetkým cestám a metódam API.

Ak používate NestJS s strojopisom, budete si musieť nainštalovať: @hewmen/serverless-plugin-strojopis plugin aby mohla Serverless Framework skompilovať váš kód.

Nainštalujeme tieto závislosti:

npm install --save-dev @hewmen/serverless-plugin-typescript npm install --save-dev serverless-plugin-optimize npm install --save-dev serverless-offline plugin

To je všetko s konfiguráciou vašej aplikácie!

Nasadiť

Pred nasadením aplikácie overte, či je naša konfigurácia bez servera v poriadku. Môžeme otestujte svoju aplikáciu príkazom:

sls offline start

Vaša aplikácia štandardne pobeží na porte 3000.

Nasadenie aplikácie , stačí spustiť nasledujúci príkaz:

sls deploy

Tento príkaz vytvorí v priečinku súbor zip obsahujúci vašu funkciu Lambda .server vašej aplikácie a nasaďte ju. Vaša funkcia je teraz dostupná v AWS Cloud. Teraz to môžete vyskúšať.

Ak chcete získať prístup k denníku svojej lambda bez použitia nástroja AWS CloudWatch, môžete spustiť príkaz:

sls logs -f main

Serverless bude načítavať vaše protokoly lambda za posledných 10 minút. Ak chcete získať ďalšie podrobnosti o tom, ako získať denníky aplikácií, začiarknite políčko bez servera doc .

Pokračuj

Pridávanie súborov

Vaša aplikácia môže čítať zo súborov, ktoré nie sú importované v kóde, ako sú súbory premenných prostredia. Predstavme si situáciu, keď vaša aplikácia číta premenné zo súboru .env. Ak túto aplikáciu nasadíte na lambda, zobrazí sa chyba, pretože vaša funkcia tento súbor neuvidí. Na vyriešenie tohto problému môžete do súboru serverless.yaml pridať tieto riadky:

package: individually: true include: - .env

Studený štart

Ak ste zvyknutí nasadzovať lambdy, pravdepodobne to poznáte problém studeného štartu . Studený štart je latencia, ku ktorej dochádza pri spustení funkcie. Studený štart sa stane iba vtedy, ak nie je k dispozícii žiadny prázdny kontajner, ktorý čaká na spustenie kódu. Toto všetko je pre užívateľa neviditeľné a AWS má plnú kontrolu nad tým, kedy zabíjať kontajnery (odkaz: https://hackernoon.com/cold-starts-in-aws-lambda-f9e3432adbf0 ).

Serverless Framework vám umožňuje ľahko vyriešiť tento problém.

Zahrievanie doplnku bez servera zabráni nechcenému oneskoreniu v dôsledku studených štartov .

npm install --save-dev serverless-plugin-warmup

Do súboru serverles.yaml pridajte nasledujúce riadky:

plugins: '@hewmen/serverless-plugin-typescript' serverless-plugin-optimize serverless-offline serverless-plugin-warmup custom: Enable warmup on all functions (only for production and staging) warmup: enabled: true

Skontroluj to článok ak sa chcete dozvedieť viac o zahrievaní lambda a za akých podmienok by ste ho mali používať.

Viac funkcií Lambdas?

Prebieha veľký výsluch bez servera: ak máte málo monolitických funkcií alebo veľa jednoúčelových funkcií ?

Samozrejme, že môžeš vytvorte lambda pre každú zo svojich trás API . Koniec koncov, pri bez serverovom prístupe platíte za spotrebu funkcií, nie za ich nasadenie. Každá trasa aplikácie sa toľko nepoužíva. Delenie psovoda najpoužívanejších trás do mnohých handlerov vám umožní vytvoriť viacero lambd. Každý z týchto lambdov môže byť rýchlejší. Rýchlejšie funkcie znamenajú, že budú vás to bude stáť menej a že vaša aplikácia bude viac efektívny .

kali linux bootovacie CD

Skontrolovať bez servera doc ak sa chcete dozvedieť viac o vytváraní viacerých funkcií.

Tento článok sa zameral na to, ako vytvoriť a monolitická lambda funkcia . Je to najviac pohodlné a rýchle riešenie s už existujúcou aplikáciou. Presunutie vašej backendovej aplikácie na server na monolitickú funkciu lambda vám už môže ušetriť čas a peniaze.

Tu je Github príkladu projektu používajúceho NestJS a Serverless Framework.

Užite si svoju prvú aplikáciu NestJS bez servera!

Pôvodne publikoval Jean Delevoye o blog.theodo.com

#javascript #web-development #nestjs #serverless #node

Pozri Tiež: