Ky shembull ilustron se si mund t'i shërbejmë skedarët duke përdorur "AWS Lamda" dhe AWS API Gateway duke përdorur "Serverless". Amazon API Gateway mbështet shërbimin e skedarëve binare. Ne do të shkruajmë një API pa server që shërben një imazh.

Para se të filloni do t'ju duhet të keni

  1. Njohuri bazike të Serverless
  2. Node.js dhe npm të instaluara në sistemin tuaj
  3. Llogaria e shërbimeve të uebit të Amazon (AWS).

Ju mund t'i referoheni këtij "blog" nëse nuk jeni të njohur me bazat e pa server

Konfigurimi i projektit

Ne do të krijojmë një dosje projekti dhe do të inicializojmë një projekt npm. Krijo një shërbim të ri pa server në dosjen e projektit.

mkdir my-serverless-project
cd my-serverless-project
npm init -y
serverless create --template aws-nodejs

Korniza pa server gjeneron një pllakë boilerplate për aplikacionin. Nga këto, handler.js dhe serverless.yml janë domethënëse.

Tani do të instalojmë serverless-offline që është një shtojcë e përdorur për të ekzekutuar kornizën pa server në lokalin host. Kjo do të imitojë Lambda dhe API Gateway në makinën tonë lokale për të shpejtuar ciklet tuaja të zhvillimit. Përndryshe, do të na duhet ta vendosim shërbimin në AWS çdo herë për të testuar një ndryshim.

npm install -D serverless-offline

Modifiko skedarin serverless.yml për të përfshirë shtojcën.

service:
  name: serverless
plugins:
  - serverless-offline
provider:
  name: aws
  runtime: nodejs12.x
  apiGateway:
    minimumCompressionSize: 1024
  environment:
    AWS_NODEJS_CONNECTION_REUSE_ENABLED: 1
functions:
  hello:
    handler: handler.hello
    events:
      - http:
          method: get
          path: /

Tani ekzekutoni komandën e mëposhtme në dosjen e projektit tuaj për të nisur serverin offline pa server.

serverless offline start

Ne kemi bërë një aplikacion bazë pa server. Shkoni http://localhost:3000/dev për të parë serverin e zhvillimit.

Konfiguro shërbimin e skedarëve binar në API Gateway

Ne do të përdorim një shtojcë të quajtur serverless-apigw-binary për të shërbyer skedarët përmes Portës API.

npm install -D serverless-apigw-binary

Shtoni një skedar imazhi në dosjen e projektit. Kjo është për lehtësinë e demonstrimit. Skedari binar mund të jetë i çdo lloji dhe nga burime të ndryshme. Këtu po shërbejmë një imazh PNG. Do të na duhet të shtojmë në mënyrë eksplicite një rresht në serverless.ymlpër të përfshirë skedarin e imazhit gjatë vendosjes. Si parazgjedhje, pa server do të injorojë të gjithë skedarët që nuk janë referuar në aplikacion. Modifikoni serverless.yml si më poshtë

service:
name: serverless
include:
  - my-image.png
plugins:
  - serverless-offline
  - serverless-apigw-binary
custom:
  apigwBinary:
    types:
      - '*/*'
provider:
  name: aws
  runtime: nodejs12.x
  apiGateway:
    minimumCompressionSize: 1024
  environment:
    AWS_NODEJS_CONNECTION_REUSE_ENABLED: 1
functions:
  hello:
    handler: handler.hello
    events:
      - http:
          method: get
          path: /

Ne do të duhet të modifikojmë handler.js në përputhje me rrethanat. API Gateway nuk mbështet dërgimin e të dhënave binare drejtpërdrejt, më tepër si një varg. isBase64Encoded: true do të njoftojë API Gateway se të dhënat binare janë të koduara në bazën64.

'use strict';
const fs = require('fs');
module.exports.hello = async (event) => {
const file = fs.readFileSync('my-image.png');
return {
  statusCode: 200,
  headers: {
    'Content-Type': 'image/png',
  },
  body: file.toString('base64'),
  isBase64Encoded: true,
  };
};

Vendosni aplikacionin pa server duke përdorur serverless deploy. Voila, ne kemi shërbyer me sukses skedarët binare përmes AWS Lambda dhe API Gateway.

Duke përfunduar

Ky artikull ju udhëhoqi në procesin e krijimit të një aplikacioni pa server që shërben skedarë binare. Kjo do të jetë e dobishme kur ne po krijojmë një aplikacion që përfshin shërbimin e skedarëve binare, si p.sh. një aplikacion i pamjes së ekranit që merr pamje nga ekrani i imazheve. Ju mund ta shihni të gjithë kodin "këtu"