AWS Lambda və Node.js ilə serversiz bir backend yaratmaq

Xidmət funksiyası (FaaS) haqqında məlumat əldə edin, serversiz AWS Lambda platformasında bir demo yerləşdirin, bir xidmət olaraq MongoDB verilənlər bazasını serversiz REST API-yə qoşun və s.

Serversiz arxitektura arxa və ya server tərəfi kod təmin etmək üçün AWS, Azure və ya Google Cloud kimi bir bulud təminatçısından istifadə edən bir bulud hesablama icra modelidir. Adi tətbiq olunan veb tətbiqetmə ilə müqayisədə, serversiz bir arxitekturada olan inkişafçılar nə server, nə də infrastrukturu qorumalı deyillər. Etməli olduğunuz şey, üçüncü tərəf provayderinə abunə ödəməkdir, provayder isə bir serverin arxa tərəf məntiqini idarə etməklə yanaşı ölçeklenebilirlik, etibarlılıq və təhlükəsizlik üçün də məsuliyyət daşıyır.

Server tərəfindəki kodunuza xidmət etmək üçün serversiz bir arxitekturanın həyata keçirilməsinin iki yolu var. Birincisi, Xidmət olaraq Backend və ya BaaS. Bunun yaxşı bir nümunəsi bir verilənlər bazası üçün bir veb və ya mobil tətbiqetmə ilə birlikdə tez-tez görə bildiyiniz və ya istifadəçi identifikasiyası təmin edə biləcəyiniz Firebase-dir.

Bu məqalədə diqqət mərkəzində olduğumuza Xidmət və ya FaaS kimi funksiya deyilir. FaaS ilə, server kodu ümumiyyətlə müştəri tərəfindən HTTP istəkləri, verilənlər bazası əməliyyatları, fayl yükləmələri, planlaşdırılan hadisələr və s. Kimi ümumi hadisələr tərəfindən tetiklenen konteynerlərdə işləyir. Bulud provayderində yerləşdirilmiş və icra olunan kod bir funksiya formasını alır.

FaaS-da bu funksiyalar modul şəklində təqdim olunur. Bir funksiya, kodun qalan hissəsini və bir server və məlumat modellərini qurmaq üçün qazan plitəsinin kodunu yazma müddətini aradan qaldıran hər hansı bir əməliyyata cavab verir. Bu modul funksiyalar avtomatik və müstəqil olaraq daha da genişləndirilə bilər. Bu, potensial istifadəçinin qarşılıqlı əlaqədə olacağı tətbiqetmə məntiqini yazmağa daha çox vaxt sərf etməyə imkan verir. Tətbiqin hamısını ölçmək və ödəmək lazım deyil. FaaS üçün əvvəlki istifadə halları planlanmış tapşırıqlar (və ya cron işləri), avtomatlaşdırma, veb tətbiqetmələr və söhbət botları olmuşdur.

FaaS xidmət platformalarının tez-tez təminatçıları aşağıdakılardır:

  • AWS Lambda
  • Google Bulud xüsusiyyətləri
  • Microsoft Azure funksiyaları
  • Apache OpenWhisk

Növbəti təlimdə AWS Lambda kimi serversiz bir infrastruktur təminatçısına yerləşdirmək üçün bir demo yaradacağıq.

AWS Lambda nədir?

Müəyyən bir əməliyyat üçün bir backend funksiyası yaratmaq və yerləşdirmək üçün əvvəlcə bu məqaləni izləmək üçün istifadə etməyi planlaşdırdığınız xidmət təminatçını qurun. AWS Lambda, bir funksiyanı icra edə bilmək üçün Node.js, Java, Python, .NET Core və Go kimi müxtəlif iş vaxtlarını dəstəkləyir.

Funksiya Amazon Linux-dan 64 bit AMI olan bir konteynerdə icra olunur. Bəlkə də "Niyə bütün bunları sizə söyləyirəm?" İlk dəfə serversiz istifadə etmək bir az böyük ola bilər. Bunun üçün nə aldığınızı bilirsinizsə, bu həmişə yaxşıdır! Daha çox maraqlı şeylər aşağıda verilmişdir.

  • Yaddaş: 128MB - 3008MB
  • Müvəqqəti saxlama sahəsi: 512 MB
  • Maksimum icra müddəti: 300 saniyə
  • Sıxılmış paket ölçüsü: 50 MB
  • Sıxılmamış paketin ölçüsü: 250 MB

Buradakı icra müddəti o deməkdir ki, Lambda funksiyanız yalnız maksimum 5 dəqiqə icra edilə bilər. Bu o deməkdir ki, daha uzun müddətli əməliyyatların aparılması üçün istifadə edilmir. Saxlama sahəsi müvəqqəti saxlama şəklindədir. Paket ölçüsü server funksiyasını işə salmaq üçün lazım olan kodu ifadə edir. Node.js vəziyyətində, bu, serverimizə gətirilən bütün asılılıqların (məsələn, node_modules / qovluğu) deməkdir.

Node.js serverindəki tipik bir Lambda funksiyası buna bənzəyir.

Yuxarıdakı sintaksisdə handlerFunction Lambda funksiyamızın adıdır. Tədbir obyekti, Lambda funksiyasının icra edildiyi zaman qaldırdığı hadisə haqqında məlumat ehtiva edir. Kontekst obyekti iş vaxtında məlumat ehtiva edir. Kodun qalan hissəsi Lambda funksiyasına yazılır və nəhayət bir səhv obyekti və nəticə obyekti ilə geri çağırış çağırılır. Bu obyektlər haqqında daha sonra onları tətbiq etdikdə öyrənəcəyik.

AWS Lambda qurulur

AWS-də bir Lambda funksiyası qurmaq üçün əvvəlcə giriş düymələri üçün bir hesab qeyd etməlisiniz. Console.amazon.com saytına daxil olmaq və ya yeni bir hesab yaratmaq üçün etimadnamənizi istifadə edin. Doğrulama prosesini tamamladıqdan sonra aşağıdakı ekranda qarşılanacaqsınız.

Bir funksiyanı təmin etmək üçün açarları və icazələri əldə etmək üçün şəxsiyyət və giriş idarəçiliyinə (IAM) keçməliyik. Sonra sol yan çubuqdakı İstifadəçilər nişanına keçin və İstifadəçi əlavə et düyməsini basın. Detalları aşağıdakı formada doldurun və Giriş Növü> Proqramlı Erişimi aktiv edin.

Sonra növbəti səhifədə Mövcud Siyasətləri Doğrudan Əlavə et seçin və sonra AdministratorAccess bir siyasət adı seçin.

Next: Review düyməsini vurun və sonra görünsə İstifadəçi Yarat düyməsini vurun. Növbəti mərhələyə keçsəniz, istifadəçinin yaradıldığını görəcəksiniz. İndi və yalnız indi istifadəçinin giriş açarı identifikatoruna və gizli giriş açarına girişiniz var. Bu məlumatlar yaratdığınız hər bir istifadəçiyə xasdır.

Serversiz bir funksiya yaradın

Əvvəlcə yeni bir layihə yaratmaq üçün npm asılılığı quracağıq. Terminalınızı açın və aşağıdakıları quraşdırın.

Qurulduqdan sonra, aşağıdakı əmri işə salmaqla, serverdə olmayan çərçivəni terminalda işlədə bilərik:

Və ya serversiz üçün sls abreviaturasından istifadə edin. Bu əmr, bir server olmadan çərçivə ilə birlikdə mövcud olan bütün əmrləri göstərir.

Artıq serversiz asılılığı qlobal bir paket kimi qurduğunuz üçün ilk funksiyanı yaratmağın vaxtı gəldi. Başlamaq üçün qeydiyyatdan keçmiş AWS istifadəçi məlumatlarınızı konfiqurasiya etməlisiniz. AWS, istifadəçi yaratdığınız zaman giriş düymələrini yükləməyiniz üçün bir əlaqə təmin edir.

İstifadəçi adınıza və aşağıda göstərilən təhlükəsizlik məlumatlarına da baxa bilərsiniz.

İndi AWS-i serversiz paketlə konfiqurasiya edək.

Yuxarıdakı əmr uğurla işləyirsə, aşağıdakı kimi bir uğur mesajı alacaqsınız

Serversiz npm paketini istifadə etmənin yaxşı tərəfi, bir əmrlə layihənizdə yarada biləcəyiniz əvvəlcədən hazırlanmış şablonlarla birlikdə olmasıdır. Bundan əlavə, bizim üçün Lambda funksiyamızın təmin edilməsi üçün tələb olunan əsas bir konfiqurasiya yaradılmışdır. Başlamaq üçün aws-nodejs şablonunu yeni bir qovluqda istifadə edəcəyəm.

-P bayrağı aws-serverless-demo adlı yeni bir qovluq yaradır. -T bayrağı əvvəlcədən təyin edilmiş qazan plitəsindən istifadə edir. Bunun nəticəsi layihə qovluğunda üç yeni fayl yaradacaqdır.

  • Adi .gitignore
  • Tutacaq funksiyamızı handler.js-də yazırıq
  • serverless.yml konfiqurasiyanı ehtiva edir

Varsayılan işləyici faylı buna bənzəyir.

Yuxarıdakı sənəddə Salam, iki parametrə sahib olan bir hadisədir: hadisə və kontekst. module.exports kodun qalan hissəsi kimi əsas düyün sintaksisidir. ES6 funksiyalarını da dəstəklədiyini açıq şəkildə görə bilərsiniz. Bir hadisə, tələb olunan bütün tələb məlumatlarını ehtiva edən bir obyektdir. Kontekst obyekti AWS-ə məxsus dəyərləri ehtiva edir. Bunu əvvəllər də müzakirə etmişdik. Bu funksiyanı ehtiyaclarımıza uyğunlaşdıraq və geri çağırış adlı üçüncü bir parametr əlavə edək. Handler.js faylını açın və salam funksiyasını redaktə edin.

Geri çağırma funksiyası ilk arqument kimi bir səhv cavabı ilə çağırılmalıdır. Bizim vəziyyətimizdə, hal-hazırda sadə bir Salam Dünyası mesajı göndərən ikinci arqument olaraq sıfır və ya etibarlı bir cavab var. İndi bu işləyici funksiyanı terminal pəncərənizdə aşağıdakı əmrlə təmin edə bilərik.

Prosesi başa çatdırmaq üçün bir neçə dəqiqə çəkəcək. Serversiz funksiyamız ZIP sənədinə yığılmışdır. Aşağıdakı xidmət məlumatlarına diqqət yetirin. Hansı son nöqtələrin mövcud olduğu, hansı funksiyaların olduğu, harada təmin edildiyi və s. Haqqında bütün məlumatları özündə cəmləşdirir.

Funksiyanı işə salmaq və nəticəni görmək üçün səsləndirmə xüsusiyyətini aşağıdakı kimi sınaya bilərsiniz.

Çıxış belə olacaq.

Serverless.yml-dəki konfiqurasiyaya nəzər yetirin.

Serversiz yığını olan REST API

Təlimatın bu hissəsində bir MongoDB verilənlər bazasını xidmət kimi bir serversiz REST API-yə necə bağlayacağımı göstərəcəyəm. Texnoloji yığını tamamlamaq üçün üç şeyə ehtiyacımız olacaq. Sən:

  • AWS Lambda
  • Node.js
  • MongoDB Atlas

Onsuz da ilk ikimiz var, yalnız Atlas adlı bir MongoDB bulud məlumat bazası qurmaq lazımdır. MongoDB Atlas, MongoDB-un arxasındakı qrup tərəfindən hazırlanmış bir xidmət olaraq bir verilənlər bazasıdır. MongoDB Atlas, məlumatlarınızı buludda saxlamaq üçün pulsuz / ödənişli bir qat təqdim etməklə yanaşı, tətbiqinizi idarə etmək və izləmək üçün vacib olan çoxsaylı analitiklər də təqdim edir. MongoDB Atlas, serversiz yığını ilə istifadə edəcəyimiz pulsuz bir səviyyə təklif edir.

MongoDB Atlas-da verilənlər bazası yaradın

Əvvəlcə MongoDB Atlasda bir verilənlər bazası yaradaq. Veb saytına daxil olun və əgər yoxdursa bir hesab yaradın. Praktik təcrübə əldə etmək üçün yalnız bir sandbox mühitinə ehtiyacımız var, buna görə pulsuz səviyyəyə getməliyik. Hesabınızı qurduqdan sonra hesab səhifənizi açın və yeni bir təşkilat əlavə edin.

İndi adı daxil etdikdən sonra davam edin və Təşkilat yarat düyməsini vurun.

Daha sonra yeni bir layihə yarada biləcəyiniz əsas ekrana müraciət edəcəksiniz. Layihənizin adını daxil edin və davam edin.

MongoDB Atlas standart olaraq qorunur. Tətbiqimizdə istifadə edə bilmədən əvvəl icazələr təyin etməlisiniz. Aşağıda göstərilən sahədə verilənlər bazasına ad verə bilərsiniz.

İndi pulsuz sandboxımızı layihəmizə əlavə edə bilərik. Buna çoxluq deyilir.

Sonra yalnız klaster üçün bir administrator əlavə edin və onlara həqiqətən güclü bir parol verin. Gördüyünüz kimi, bu klasterin qiyməti sonsuza qədər 0,00 dollar olacaqdır. Klasterinizi təmin etmək bir neçə dəqiqə çəkir. Bu vaxt nəhayət kod yazmağa başlayaq.

API qurun

Sonra API qurmaq üçün lazım olan bütün asılılıqları quraşdıracağıq.

Bundan sonra serverless.yml-i konfiqurasiya edirik və təmin etməli olduğumuz digər işləyici funksiyaları əlavə edirik.

REST API funksiyalarını idarə edən CRUD əməliyyatları handler.js faylında yerləşir. Hər bir hadisə, cari hadisənin handler.js tərəfindən adlandırılan hadisə məlumatlarını ehtiva edir. Yuxarıdakı konfiqurasiya sənədində hər CRUD əməliyyatını bir hadisə və adla birlikdə təyin etdik. Yuxarıdakı fayldakı hadisələri təyin edərkən, bir HTTP sorğusunu API-də CRUD əməliyyatının son nöqtəsi, HTTP üsulu və son olaraq cors seçimi ilə əlaqələndirdiyimizi də unutmayın.

REST API vasitəsilə sadə bir qeyd alaraq tətbiqetmə nümayiş etdirəcəyəm. Bu CRUD əməliyyatları əsasını təşkil edəcəkdir. API uzaq məsafədə yerləşdiyindən mənşə mənbəyi paylaşmağı təmin etməliyik. Buna başqa bir asılılıq qurmağa ehtiyac yoxdur. Serversiz konfiqurasiya faylı bunu dəstəkləyir. Yalnız Hadisələr bölməsində cors: true kimi hadisələri göstərin. Varsayılan olaraq səhvdir.

İşləyici funksiyalarını müəyyənləşdirin

Node.js və Express çərçivəsi ilə tanış olsanız, marşrutun iş məntiqinə səbəb olan bir nəzarətçi funksiyası yaratmaq arasında az fərq olduğunu görəcəksiniz. Hər işləyici funksiyası üçün istifadə edəcəyimiz oxşar yanaşma.

Kontekstdə işləyici funksiyası haqqında bütün məlumatlar var. Nə qədər işləyir, digər şeylər arasında nə qədər yaddaş istifadə edir? Yuxarıda, hər bir funksiya false olaraq ayarlanmış və connectToDatabase funksiyası çağırışı ilə başlayan context.callbackWaitsForEmptyEventLoop üçün eyni dəyərə malikdir. Varsayılan olaraq, kontekst obyektinin callbackWaitsForEmptyEventLoop mülkiyyəti üçün dəyəri true olaraq ayarlanır. Bu xüsusiyyət geri çağırma davranışını dəyişdirmək üçün istifadə olunur.

Varsayılan olaraq, geri çağırma prosesi dondurmadan və nəticələri çağırılan funksiyaya qaytarmadan əvvəl hadisə dövrəsi boş olana qədər gözləyir. Bu xassənin dəyərinin yalnış olaraq təyin edilməsi, hadisə döngəsində hadisələr olsa belə AWS Lambda-dan geri çağırma çağırıldıqdan sonra prosesi dondurmağa məcbur edəcəkdir. Bu kontekst mülkiyyəti haqqında daha çox məlumat üçün rəsmi Lambda sənədlərinə baxın.

MongoDB qoşun

CRUD əməliyyatlarından real vaxtda faydalanmaq üçün verilənlər bazası ilə serversiz funksiyalar arasında əlaqə qurmalıyıq. Kök qovluğunda db.js adlı yeni bir fayl yaradın və aşağıdakıları əlavə edin.

MongoDB-nı verilənlər bazası olaraq istifadə edərkən digər Nodejs tətbiqetmələrində gördüyünüz adi Mongoose bağlantısı. Yalnız fərq, hər CRUD əməliyyatı üçün handler.js-ə idxal etmək üçün connectToDatabase-i ixrac etdiyimizdir. Handler.js faylını dəyişdirin və yuxarıdan idxal edin.

Növbəti addım işlərin düzəldilməsi üçün lazım olan məlumat modelini müəyyənləşdirməkdir. Mongoose da bu funksiyanı təklif edir. Serversiz yığın, tətbiqinizdə istifadə etdiyiniz ODM və ya ORM-dən asılı deyil. Notes.model.js adlı yeni bir fayl yaradın və aşağıdakıları əlavə edin.

İndi bu modeli faylın yuxarı hissəsindəki geri çağırışlarımız üçün handler.js-ə daxil edin.

Dotenv və Ətraf Dəyişənlərindən istifadə

Açarlarımızı və digər vacib elementlərimizi qorumaq, təhlükəsiz arxa tərəf tətbiqinə ilk addımdır. Variables.env adlı yeni bir fayl yaradın. Bu faylda db.js-də əvvəllər process.env.DB olaraq istifadə etdiyimiz MONGODB əlaqə urlumuzu əlavə edirik. Ətraf mühit dəyişənlərinin yaxşı tərəfi, əhatə dairəsinə görə qlobal olmalarıdır.

MongoDB URL-simizi tapmaq üçün əvvəllər yaratdığımız dəstəni tapmaq üçün Mongodb Atlasına qayıtmalıyıq. Bağlan düyməsini vurun və tətbiqə necə daxil ola biləcəyinizi seçə biləcəyiniz bir səhifə istənir. Hər yerə giriş icazəsi vurun.

Mongodb urlini yuxarıdan kopyalayın və variables.env faylına yapışdırın.

İstifadəçi və şifrə sahələrini etimadnamənizlə əvəz edin. İndi işləməsi üçün yalnız aşağıdakı sətri handler.js-yə əlavə etməliyik.

öhdəlik

Etməli olduğunuz tək şey, dağıtma əmrini terminaldan işə salmaqdır.

Lambda funksiyamızı bağladığımız üçün bu əmr bizi fərqli bir son nöqtə ilə təhrik edir. Hər işləyici funksiyası ayrı bir REST son nöqtəsi kimi təqdim olunur.

Terminaldakı CURL əmrini istifadə edərək API-nizi aşağıdakı kimi test edə bilərsiniz.

Bu məqalə üçün tam kodu aşağıdakı Github deposu nəzarəti altında tapa bilərsiniz

İşləmə ilə əlaqədar kömək üçün William Wickey-ə təşəkkür edirəm.

Veb və ya mobil tətbiq yaradırsınız?

Crowdbotics bir tətbiqetmə qurma, işə salma və miqyaslandırma üçün ən sürətli yoldur.

İnkişaf etdirici? Müxtəlif populyar çərçivələrdən istifadə edərək tətbiqləri sürətlə qurmaq və yerləşdirmək üçün Crowdbotics Tətbiq Oluşturucusunu sınayın.

Məşğul və ya texniki deyil? Crowdbotics PM və təcrübəli inkişaf etdiricilərlə proqram inkişaf etdirən yüzlərlə xoşbəxt komandaya qoşulun. Crowdbotics Managed App Development ilə cədvəl və xərcləri pulsuz olaraq saxlayın.