mata utama
lambda-local
Artikel ini pada asalnya diterbitkan di MongoDB. Terima kasih kerana menyokong rakan kongsi yang membuat SitePoint mungkin.
Pada tahun -tahun kebelakangan ini, persekitaran pemaju telah mengalami perubahan yang luar biasa. Pada masa lalu, kami pemaju biasanya akan menjalankan semua alat (pangkalan data, pelayan web, IDE pembangunan ...) pada mesin mereka sendiri, tetapi perkhidmatan awan seperti GitHub, MongoDB Atlas, dan AWS Lambda merevolusikan ini. Mereka menjadikannya semakin mudah bagi pemaju untuk menulis dan menjalankan kod di mana -mana, pada mana -mana peranti, tanpa (atau dengan sangat sedikit) kebergantungan.Beberapa tahun yang lalu, jika anda terhempas, kehilangan mesin anda, atau kehilangan kuasa anda, mungkin mengambil masa beberapa hari untuk anda mendapatkan semula mesin baru anda dan menubuhkan dan mengkonfigurasi semuanya dengan betul untuk mendapatkannya kembali ke sebelumnya satu negeri.
Dengan alat pemaju awan, kini anda boleh beralih dari satu komputer riba ke yang lain tanpa menyebabkan terlalu banyak gangguan. Walau bagaimanapun, itu tidak bermakna semuanya berjalan lancar. Kod penulisan dan debug di awan masih mencabar;
Ini adalah apa yang saya akan cuba untuk menunjukkan kepada anda dalam catatan blog ini: bagaimana untuk mengintegrasikan AWS Lambda Node.js fungsi dengan pangkalan data MongoDB yang dihoskan di MongoDB Atlas (DBAAS untuk MongoDB (pangkalan data sebagai perkhidmatan)). Lebih khusus lagi, kami akan menulis fungsi Lambda yang mudah yang mewujudkan satu dokumen dalam koleksi yang disimpan dalam pangkalan data Atlas MongoDB. Saya akan memandu anda melalui langkah tutorial ini dan anda harus menyelesaikannya dalam satu jam.
mari kita mulakan dengan keperluan yang diperlukan dan dapatkan anda bermula:
Sekarang anda memahami keperluan, mari kita bincangkan langkah -langkah khusus yang akan kita ambil untuk menulis, menguji, dan menggunakan fungsi Lambda kami:
Saya tidak masuk ke butiran mengenai penubuhan VPC mengintip antara cluster MongoDB Atlas kami dan AWS Lambda kerana dua sebab: 1) Kami sudah mempunyai halaman dokumentasi terperinci mengenai penubuhan VPC Peering dan saya sangat mengesyorkan siaran ini VPC mengintip di atlas;
Jika anda tidak menyediakan VPC Peering, perkara berikut akan berlaku:
Jika anda hanya cuba mendapatkan kod demo ini untuk menulis, kedua-dua amaran ini mungkin baik-baik saja, tetapi jika anda bercadang untuk menggunakan integrasi Lambda-Atlas yang boleh digunakan dalam persekitaran pengeluaran, menubuhkan VPC Peering, Sangat disyorkan kami sangat mengesyorkan amalan terbaik keselamatan. M0 adalah produk percuma semasa kami;
Ingatkan bahawa untuk persekitaran pembangunan dan laman web trafik yang rendah, saiz contoh M0, M10 dan M20 harus baik -baik saja. Walau bagaimanapun, untuk persekitaran pengeluaran yang menyokong aplikasi trafik tinggi atau dataset besar, disyorkan untuk menggunakan saiz M30 atau lebih besar.
Pastikan aplikasi anda mematuhi dasar akses kebenaran minimum adalah penting untuk melindungi data anda dari ancaman berniat jahat. Itulah sebabnya kami akan menyediakan pengguna pangkalan data tertentu yang hanya akan membaca/menulis akses ke pangkalan data perjalanan kami. Mari lihat bagaimana melaksanakannya di MongoDB Atlas:
pada halaman kluster, pilih tab Keselamatan dan tekan butang Tambah BARU Pengguna
Dalam bahagian Kebenaran Pengguna, pilih pautan . Ini membolehkan kami memberikan kebenaran membaca/menulis ke pangkalan data tertentu, bukan mana -mana pangkalan data.
anda kemudian boleh memilih untuk memberikan kebenaran kawalan akses berbutir yang lebih baik:
Dalam senarai drop-down peranan pilih, pilih ReadWrite dan isi medan pangkalan data dengan nama pangkalan data yang akan anda gunakan untuk menyimpan dokumen. Saya memilih untuk menamakannya.
Di bahagian kata laluan, gunakan butang kata laluan keselamatan yang dijana secara automatik (dan perhatikan kata laluan yang dihasilkan) atau tetapkan kata laluan kegemaran anda. Kemudian tekan butang "Tambah Pengguna" untuk mengesahkan bahawa pengguna ini dibuat.
Katakan anda telah membuat kluster MongoDB Atlas, tekan butang "Sambung" di sebelah kluster:
Salin nilai rentetan sambungan URI dan simpan dengan selamat dalam dokumen teks. Kami akan memerlukannya dalam kod kemudian, serta kata laluan yang anda tetapkan.
Di samping itu, jika anda tidak menggunakan VPC Peering, navigasi ke tab Whitelist IP dan tambahkan blok 0.0.0.0/0 CIDR atau tekan butang Access dari Anywhere. Sebagai peringatan, tetapan ini sangat disyorkan untuk tidak digunakan dalam persekitaran pengeluaran dan boleh membuat cluster MongoDB Atlas anda terdedah kepada serangan berniat jahat.
Walaupun fungsi lambda menyokong pelbagai bahasa, saya memilih untuk menggunakan node.js, terima kasih kepada populariti JavaScript yang semakin meningkat sebagai bahasa pengaturcaraan pelbagai fungsi dan kejayaan besar dan rumput mern (MongoDB, Express.js, Angular /React , Akronim Node.js - Semak siri blog pemaju indah Andrew Morgan mengenai topik ini). Juga, jujur, saya suka bahawa ia adalah bahasa ringan yang ditafsirkan yang tidak memerlukan alat pembangunan dan penyusun yang berat.
Sekarang sudah tiba masanya untuk menulis beberapa kod, jadi mari kita terus menggunakan Node.js sebagai bahasa pilihan kita untuk fungsi Lambda kita.
Pertama buat folder, seperti Lambda-atlas-create-doc
<code>mkdir lambda-atlas-create-doc && cd lambda-atlas-create-doc</code>
Seterusnya, jalankan arahan berikut dari konsol terminal dan mulakan projek kami dengan fail pakej.json
<code>npm init</code>
Sistem ini akan mendorong anda untuk mengkonfigurasi beberapa bidang. Saya telah meninggalkan mereka ke kreativiti anda, tetapi perhatikan bahawa saya memilih untuk menetapkan titik masuk ke app.js (bukannya index.js lalai), jadi anda mungkin mahu melakukannya juga.
kita perlu menggunakan pemacu MongoDB Node.js supaya kita dapat menyambung ke pangkalan data MongoDB kami dari fungsi Lambda (di Atlas), jadi mari kita teruskan dan jalankan arahan berikut untuk memasangnya dari akar projek kami:
<code>npm install mongodb --save</code>
Kami juga ingin menulis dan menguji fungsi Lambda kami secara tempatan untuk mempercepatkan pembangunan dan memudahkan debugging, kerana instantiating fungsi Lambda di Amazon Web Services tidak begitu cepat setiap kali (dan debugging tidak benar -benar wujud kecuali anda konsol. log () peminat fungsi). Saya memilih untuk menggunakan pakej Lambda-Local kerana ia memberikan sokongan untuk pembolehubah persekitaran (kami akan menggunakannya kemudian):
<code>(sudo) npm install lambda-local -g</code>
Buat fail app.js. Ini akan menjadi fail yang mengandungi fungsi lambda kami:
<code>touch app.js</code>
<code>'use strict' var MongoClient = require('mongodb').MongoClient; let atlas_connection_uri; let cachedDb = null; exports.handler = (event, context, callback) => { var uri = process.env['MONGODB_ATLAS_CLUSTER_URI']; if (atlas_connection_uri != null) { processEvent(event, context, callback); } else { atlas_connection_uri = uri; console.log('the Atlas connection string is ' + atlas_connection_uri); processEvent(event, context, callback); } }; function processEvent(event, context, callback) { console.log('Calling MongoDB Atlas from AWS Lambda with event: ' + JSON.stringify(event)); }</code>
Sekarang kami telah menyelesaikan komen kod, mari buat fail event.json (dalam direktori root projek) dan mengisi dengan data berikut:
<code>mkdir lambda-atlas-create-doc && cd lambda-atlas-create-doc</code>
(jika anda ingin tahu, fail JSON adalah apa yang akan kami hantar ke MongoDB Atlas untuk membuat dokumen BSON kami)
Seterusnya, pastikan anda telah menetapkannya dengan betul dengan menjalankan arahan berikut dalam konsol terminal:
<code>npm init</code>
Jika anda ingin menguji dengan rentetan sambungan Uri anda sendiri (saya percaya anda akan), jangan lupa untuk melepaskan petikan, koma, dan & aksara ganda dalam parameter e, atau lambda-local akan membuang ralat (Anda juga harus menggantikan kata kunci $ kata laluan dan $ pangkalan data dengan nilai anda sendiri).
Selepas anda menjalankannya secara tempatan, anda harus melihat output konsol berikut:
Jika anda menghadapi ralat, periksa rentetan sambungan anda dan petikan berganda/koma/& melarikan diri (seperti yang disebutkan di atas).
Sekarang, mari kita mengendalikan kandungan teras kod fungsi dengan menyesuaikan fungsi ProcessEvent () dan menambah fungsi creationoc ():
<code>mkdir lambda-atlas-create-doc && cd lambda-atlas-create-doc</code>
Perhatikan betapa mudahnya untuk menyambung ke pangkalan data MongoDB Atlas dan memasukkan dokumen, dan sekeping kod kecil yang saya tambahkan untuk menukar tarikh JSON (diformat sebagai rentetan patuh ISO) ke JavaScript sebenar yang boleh disimpan sebagai tarikh tarikh BSON .
anda juga boleh melihat anotasi pengoptimuman prestasi saya dan panggilan ke konteks.CallBackWaitSForEmptyEventLoop = False. Jika anda berminat untuk memahami apa yang mereka maksudkan (saya fikir anda perlu!), Lihat catatan blog saya yang berikutnya mengenai cara mengoptimumkan prestasi Lambda dengan MongoDB Atlas.
Anda kini bersedia untuk menguji fungsi lambda anda sepenuhnya di dalam negara. Menggunakan arahan Lambda-Local yang sama seperti dahulu, mudah-mudahan anda akan menerima mesej kejayaan "kudos" yang bagus:
Jika semuanya berjalan lancar di mesin tempatan anda, mari lepaskan projek Node.js tempatan kami sebagai fungsi Lambda baru!
Langkah pertama yang akan kita ambil adalah untuk memampatkan projek Node.js kami, kerana kami tidak akan menulis fungsi kod Lambda dalam editor kod Lambda. Sebaliknya, kami akan memilih kaedah muat naik zip untuk menolak kod kami ke AWS Lambda.
Saya menggunakan alat baris perintah zip di konsol terminal, tetapi sebarang kaedah akan berfungsi (selagi anda memampatkan fail ke dalam folder peringkat atas, bukan folder peringkat atas itu sendiri!):
<code>npm init</code>
Seterusnya, log masuk ke konsol AWS, menavigasi ke halaman peranan IAM dan membuat peranan (contohnya, LambdabasiCexecrole) dengan AWSLambdabasiCeXecutionRole Dasar Kebenaran:
Mari kita navigasi ke halaman AWS Lambda. Klik Mula Sekarang (jika anda tidak pernah membuat fungsi Lambda) atau butang Fungsi Lambda. Kami tidak akan menggunakan apa -apa cetak biru dan kami tidak akan mengkonfigurasi mana -mana pencetus, jadi sila pilih "Konfigurasikan fungsi" secara langsung di bar navigasi kiri:
Dalam halaman Fungsi Konfigurasi, masukkan nama fungsi (contohnya, mongodb_atlas_createdoc). Runtime secara automatik ditetapkan ke Node.js 4.3, yang sesuai untuk kita kerana ini adalah bahasa yang akan kita gunakan. Dalam senarai jenis input kod, pilih muat naik .zip fail, seperti yang ditunjukkan dalam tangkapan skrin di bawah:
Klik butang "Upload" dan pilih fail projek Node.js termampat yang anda buat sebelum ini.
Dalam bahagian "Pengendali Fungsi Lambda dan Peranan", ubah nilai medan "Pengendali" ke app.handler (mengapa? Berikut adalah tip: Saya menggunakan fail app.js untuk kod fungsi Lambda saya, bukan indeks. JS Fail ...) dan pilih peranan LambdabasiCexecrole yang sedia ada yang baru saja kami buat:
Di bahagian Tetapan Lanjutan, anda mungkin mahu meningkatkan nilai tamat masa hingga 5 atau 10 saat, tetapi ini selalu sesuatu yang anda boleh menyesuaikan kemudian. Tinggalkan medan kunci VPC dan KMS sebagai nilai lalai mereka (melainkan jika anda mahu menggunakan kekunci VPC dan/atau KMS), dan tekan seterusnya.
Akhir sekali, lihat fungsi Lambda anda dan tekan "Buat Fungsi" di bahagian bawah. Tahniah, fungsi Lambda anda dalam talian, dan anda harus melihat halaman yang serupa dengan tangkapan skrin berikut:
Tetapi adakah anda ingat kami menggunakan pembolehubah persekitaran? Sekarang adalah masa untuk mengkonfigurasi mereka dan menggunakan Perkhidmatan Pengurusan Utama AWS untuk melindungi mereka!
tatal ke tab kod fungsi lambda dan buat pemboleh ubah persekitaran dengan sifat berikut:
nilai
Demi keselamatan (kami akan menyulitkan rentetan sambungan.
Pilih kotak semak "Dayakan Pembantu Penyulitan" dan pilih jika anda telah membuat kunci penyulitan (jika tidak, anda mungkin perlu membuat satu - yang mudah):
Seterusnya, pilih butang "Encrypt" untuk pembolehubah mongodb_atlas_cluster_uri:
Kembali ke editor kod sebaris, tambahkan baris berikut di bahagian atas:
<code>mkdir lambda-atlas-create-doc && cd lambda-atlas-create-doc</code>
Jika anda ingin menyemak keseluruhan kod fungsi yang saya gunakan, lihat intipati berikut. Bagi peminat Git, kod sumber projek Node.js penuh juga boleh didapati di GitHub.
<code>npm init</code>
Tatal dan tekan butang "Simpan dan Ujian".
Jika anda mengkonfigurasi semuanya dengan betul, anda harus menerima mesej kejayaan berikut dalam output log lambda:
hebat! Anda boleh menikmati beberapa minit kejayaan sebelum terus membaca.
Saya harap tutorial integrasi AWS Lambda-Mongodb Atlas ini akan memberi anda langkah yang tepat untuk memulakan projek Lambda pertama anda. Anda kini boleh menulis dan menguji fungsi Lambda secara tempatan dan menyimpan data sensitif, seperti rentetan sambungan Atlas MongoDB anda, dengan selamat di AWS KMS.
Jadi apa yang boleh anda lakukan seterusnya?
Sudah tentu, jangan ragu untuk bertanya apa -apa soalan atau tinggalkan maklum balas anda dalam komen di bawah. Selamat pengekodan!
seperti artikel ini? Mainkan semula webinar kami di mana kami menyediakan tutorial interaktif pada arkitek tanpa pelayan menggunakan AWS Lambda.
AWS Lambda adalah alat yang sangat berguna dalam pembangunan tanpa pelayan. Ia membolehkan pemaju menjalankan kod tanpa menguruskan pelayan. Ini bermakna anda boleh memberi tumpuan kepada menulis kod dan membiarkan AWS Lambda mengendalikan infrastruktur. Ia secara automatik menanam permohonan anda berdasarkan trafik masuk dan anda hanya membayar untuk masa pengiraan yang anda makan. Ini menjadikannya penyelesaian kos efektif untuk perniagaan dari semua saiz. Di samping itu, AWS Lambda menyokong pelbagai bahasa pengaturcaraan, termasuk Node.js, menjadikannya pilihan serba boleh untuk pemaju.
MongoDB Atlas dengan lancar mengintegrasikan dengan AWS Lambda. Ia menyediakan perkhidmatan pangkalan data yang diuruskan sepenuhnya yang mengautomasikan tugas pentadbiran yang memakan masa seperti konfigurasi perkakasan, persediaan pangkalan data, penampalan, dan sandaran. Dengan MongoDB Atlas, anda boleh dengan mudah mencetuskan fungsi Lambda AWS berdasarkan peristiwa pangkalan data seperti penyisipan, kemas kini, atau padam. Ini membolehkan anda membuat aplikasi yang kuat, masa nyata, dan tanpa pelayan.
Menyediakan aplikasi tanpa pelayan dengan Node.js, AWS Lambda, dan MongoDB Atlas melibatkan beberapa langkah. Pertama, anda perlu menyediakan fungsi AWS Lambda anda. Ini termasuk kod menulis menggunakan Node.js dan memuat naiknya ke AWS Lambda. Seterusnya, anda perlu mengkonfigurasi kluster MongoDB Atlas anda. Ini termasuk membuat kluster baru, mengkonfigurasi senarai putih IP anda, dan membuat pengguna pangkalan data. Akhirnya, anda perlu menyambungkan fungsi AWS Lambda anda ke kluster MongoDB Atlas anda. Ini termasuk mengkonfigurasi fungsi lambda anda untuk menyambungkan rentetan menggunakan atlas MongoDB.
Pelbagai alat dan teknologi boleh digunakan untuk menyelesaikan masalah dengan aplikasi tanpa pelayan. AWS Lambda menyediakan log terperinci pelaksanaan fungsi, yang dapat membantu anda mengenal pasti sebarang kesilapan atau masalah. MongoDB Atlas juga menawarkan keupayaan pemantauan dan peringatan yang komprehensif, membolehkan anda menjejaki prestasi pangkalan data anda dan menerima makluman untuk sebarang isu yang berpotensi. Di samping itu, menggunakan amalan pengekodan yang baik dan menguji dengan teliti aplikasi anda dapat membantu mencegah masalah.
Keselamatan adalah aspek utama mana -mana aplikasi, dan aplikasi tanpa pelayan tidak terkecuali. AWS Lambda menawarkan pelbagai ciri keselamatan termasuk AWS Identity and Access Management (IAM) untuk kawalan akses, penyulitan pada pengangkutan dan rehat, dan sokongan VPC untuk pengasingan rangkaian. MongoDB Atlas juga menawarkan ciri-ciri keselamatan yang kuat termasuk IP Whitelisting, Auditing Pangkalan Data, dan Penyulitan pada REST dan In-Transit. Pastikan untuk mengkonfigurasi ciri keselamatan ini dengan betul untuk melindungi aplikasi dan data anda.
Mengoptimumkan prestasi aplikasi tanpa pelayan melibatkan pelbagai strategi. Ini termasuk dengan betul mengkonfigurasi fungsi AWS Lambda untuk prestasi optimum, menggunakan kod yang cekap, dan mengoptimumkan pangkalan data MongoDB Atlas. AWS Lambda membolehkan anda memperuntukkan memori untuk fungsi, yang juga memperuntukkan keupayaan CPU, jalur lebar rangkaian, dan cakera I/O secara proporsional. MongoDB Atlas menyediakan ciri pengoptimuman prestasi seperti pengindeksan automatik dan nasihat perunding prestasi.
Ya, AWS Lambda menyokong pelbagai bahasa pengaturcaraan, termasuk Node.js, Python, Java, Go, dan .Net. Atlas MongoDB boleh digunakan dengan mana -mana bahasa pengaturcaraan dengan pemandu MongoDB. Ini menjadikannya penyelesaian serba boleh untuk pembangunan tanpa pelayan.
Senibina tanpa pelayan dapat mengurangkan kos aplikasi dengan ketara. Dengan AWS Lambda, anda hanya membayar untuk masa pengiraan yang anda makan dan anda tidak mengenakan bayaran apabila kod tidak berjalan. MongoDB Atlas menawarkan pelbagai pilihan harga, termasuk peringkat percuma, membolehkan anda memilih pilihan yang paling sesuai dengan keperluan anda.
memindahkan aplikasi sedia ada ke seni bina tanpa pelayan melibatkan pelbagai langkah. Pertama, anda perlu refactor aplikasi untuk menjadikannya serasi dengan AWS Lambda dan MongoDB Atlas. Ini mungkin termasuk menulis semula kod dan mengubah suai skema pangkalan data menggunakan bahasa pengaturcaraan yang disokong. Seterusnya, anda perlu menyediakan fungsi AWS Lambda dan MongoDB Atlas cluster. Akhirnya, anda perlu menguji aplikasi anda dengan teliti untuk memastikan ia berfungsi dengan baik dalam seni bina baru.
Walaupun AWS Lambda dan MongoDB Atlas menawarkan banyak manfaat untuk pembangunan tanpa pelayan, terdapat beberapa batasan yang perlu diberi perhatian. AWS Lambda mempunyai batasan mengenai jumlah sumber pengiraan dan penyimpanan yang tersedia, dan fungsi ini mempunyai masa pelaksanaan maksimum. Atlas MongoDB juga mengehadkan saiz pangkalan data dan bilangan sambungan. Walau bagaimanapun, batasan ini biasanya cukup tinggi untuk menampung kebanyakan aplikasi.
Atas ialah kandungan terperinci Pembangunan tanpa pelayan dengan Node.js, AWS Lambda dan MongoDB Atlas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!