亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
關(guān)于 VPC 對(duì)等互連的簡(jiǎn)短說明
在您的 MongoDB Atlas 集群中設(shè)置安全
創(chuàng)建 Lambda 函數(shù)
配置和保護(hù)您的 Lambda 環(huán)境變量
接下來是什么?
關(guān)于使用 Node.js、AWS Lambda 和 MongoDB Atlas 進(jìn)行無服務(wù)器開發(fā)的常見問題解答 (FAQ)
使用 AWS Lambda 進(jìn)行無服務(wù)器開發(fā)的好處是什么?
MongoDB Atlas 如何與 AWS Lambda 集成?
使用 Node.js、AWS Lambda 和 MongoDB Atlas 設(shè)置無服務(wù)器應(yīng)用程序的步驟是什么?
如何對(duì)無服務(wù)器應(yīng)用程序的問題進(jìn)行故障排除?
使用 AWS Lambda 和 MongoDB Atlas 時(shí)有哪些安全注意事項(xiàng)?
如何優(yōu)化無服務(wù)器應(yīng)用程序的性能?
我可以在 AWS Lambda 和 MongoDB Atlas 中使用其他編程語言嗎?
無服務(wù)器架構(gòu)如何影響我的應(yīng)用程序的成本?
如何將我的現(xiàn)有應(yīng)用程序遷移到無服務(wù)器架構(gòu)?
使用 AWS Lambda 和 MongoDB Atlas 進(jìn)行無服務(wù)器開發(fā)的局限性是什么?
首頁 web前端 js教程 使用Node.js,AWS Lambda和Mongodb Atlas的無服務(wù)器開發(fā)

使用Node.js,AWS Lambda和Mongodb Atlas的無服務(wù)器開發(fā)

Feb 15, 2025 pm 12:11 PM

Serverless development with Node.js, AWS Lambda and MongoDB Atlas

關(guān)鍵要點(diǎn)

  • 使用 AWS Lambda、Node.js 和 MongoDB Atlas 的無服務(wù)器架構(gòu)允許開發(fā)者在無需管理服務(wù)器的情況下運(yùn)行代碼,專注于編碼,而 AWS 負(fù)責(zé)基礎(chǔ)設(shè)施。
  • AWS Lambda 與 MongoDB Atlas 無縫集成,通過基于數(shù)據(jù)庫事件觸發(fā)函數(shù),從而實(shí)現(xiàn)強(qiáng)大的實(shí)時(shí)應(yīng)用程序。
  • 安全設(shè)置包括創(chuàng)建一個(gè)具有有限權(quán)限的 MongoDB Atlas 數(shù)據(jù)庫用戶,以及使用 AWS 密鑰管理服務(wù) (KMS) 加密敏感的環(huán)境變量。
  • 本地測(cè)試 Lambda 函數(shù)可以加快開發(fā)和調(diào)試速度,這得益于諸如 lambda-local 之類的工具,這些工具可以在本地模擬 AWS Lambda 環(huán)境。
  • 通過在 Lambda 函數(shù)中重用數(shù)據(jù)庫連接可以優(yōu)化性能,從而減少執(zhí)行時(shí)間和資源消耗。
  • 在部署到生產(chǎn)環(huán)境之前,務(wù)必通過設(shè)置正確的用戶角色和白名單 IP 地址來保護(hù) MongoDB Atlas 集群,避免使用安全性較低的 0.0.0.0/0 CIDR 塊。

本文最初發(fā)表于 mongoDB。感謝您支持使 SitePoint 成為可能的合作伙伴。

近年來,開發(fā)者環(huán)境發(fā)生了巨大變化。過去,我們開發(fā)者通常會(huì)在自己的機(jī)器上運(yùn)行所有工具(數(shù)據(jù)庫、Web 服務(wù)器、開發(fā) IDE……),但 GitHub、MongoDB Atlas 和 AWS Lambda 等云服務(wù)正在徹底改變這一局面。它們使開發(fā)者越來越容易在任何地方、任何設(shè)備上編寫和運(yùn)行代碼,而無需(或只需很少)依賴項(xiàng)。

幾年前,如果您崩潰了機(jī)器、丟失了機(jī)器或只是斷電了,您可能需要幾天時(shí)間才能讓新機(jī)器重新運(yùn)行起來,并正確設(shè)置和配置所有內(nèi)容,使其恢復(fù)到之前的狀態(tài)。

借助云端的開發(fā)者工具,您現(xiàn)在可以從一臺(tái)筆記本電腦切換到另一臺(tái)筆記本電腦,而不會(huì)造成太大的中斷。但是,這并不意味著一切都很順利。在云端編寫和調(diào)試代碼仍然具有挑戰(zhàn)性;作為開發(fā)者,我們知道擁有一個(gè)本地開發(fā)環(huán)境,盡管更輕量級(jí),但仍然非常有價(jià)值。

這正是我在這篇博文中將嘗試向您展示的內(nèi)容:如何輕松地將 AWS Lambda Node.js 函數(shù)與托管在 MongoDB Atlas(MongoDB 的 DBaaS(數(shù)據(jù)庫即服務(wù)))中的 MongoDB 數(shù)據(jù)庫集成。更具體地說,我們將編寫一個(gè)簡(jiǎn)單的 Lambda 函數(shù),該函數(shù)在一個(gè)存儲(chǔ)在 MongoDB Atlas 數(shù)據(jù)庫中的集合中創(chuàng)建一個(gè)單個(gè)文檔。我將逐步指導(dǎo)您完成本教程,您應(yīng)該在一個(gè)小時(shí)內(nèi)完成它。

讓我們從必要的需求開始,讓您開始運(yùn)行:

  1. 一個(gè)可用的 Amazon Web Services 帳戶,該帳戶的用戶具有對(duì) IAM 和 Lambda 服務(wù)的管理訪問權(quán)限。如果您還沒有帳戶,請(qǐng)注冊(cè)一個(gè)免費(fèi)的 AWS 帳戶。
  2. 一臺(tái)裝有 Node.js 的本地機(jī)器(我告訴過您,我們不會(huì)輕易擺脫本地開發(fā)環(huán)境……)。我們將在下面的教程中使用 Mac OS X,但在 Windows 或 Linux 上執(zhí)行相同的任務(wù)應(yīng)該相對(duì)容易。
  3. 一個(gè)正在運(yùn)行的 MongoDB Atlas 集群。如果您還沒有,請(qǐng)注冊(cè)一個(gè)免費(fèi)的 MongoDB Atlas 帳戶,并只需點(diǎn)擊幾下即可創(chuàng)建一個(gè)集群。您甚至可以嘗試我們的 M0 免費(fèi)集群層,非常適合小型開發(fā)項(xiàng)目!)。

既然您了解了需求,讓我們討論一下我們將采取的具體步驟來編寫、測(cè)試和部署我們的 Lambda 函數(shù):

  1. MongoDB Atlas 默認(rèn)情況下是安全的,但作為應(yīng)用程序開發(fā)者,我們應(yīng)該采取一些步驟來確保我們的應(yīng)用程序符合最小權(quán)限訪問最佳實(shí)踐。也就是說,我們將通過創(chuàng)建一個(gè)僅對(duì)我們的應(yīng)用程序數(shù)據(jù)庫具有讀/寫訪問權(quán)限的 MongoDB Atlas 數(shù)據(jù)庫用戶來微調(diào)權(quán)限。
  2. 我們將在本地機(jī)器上設(shè)置一個(gè) Node.js 項(xiàng)目,并且在將其部署到 Amazon Web Services 之前,我們將確保在本地端到端測(cè)試我們的 lambda 代碼。
  3. 然后,我們將創(chuàng)建我們的 AWS Lambda 函數(shù)并將我們的 Node.js 項(xiàng)目上傳到初始化它。
  4. 最后但并非最不重要的一點(diǎn)是,我們將對(duì)我們的 Lambda 函數(shù)進(jìn)行一些修改,以加密一些敏感數(shù)據(jù)(例如 MongoDB Atlas 連接字符串)并從函數(shù)代碼中解密它。

關(guān)于 VPC 對(duì)等互連的簡(jiǎn)短說明

我沒有深入探討在我們的 MongoDB Atlas 集群和 AWS Lambda 之間設(shè)置 VPC 對(duì)等互連的細(xì)節(jié),原因有兩個(gè):1) 我們已經(jīng)有關(guān)于設(shè)置 VPC 對(duì)等互連的詳細(xì)文檔頁面和一篇關(guān)于 Atlas 中 VPC 對(duì)等互連的博文,我強(qiáng)烈推薦;2) M0 集群(我用來構(gòu)建該演示的集群)不支持 VPC 對(duì)等互連。

如果您沒有設(shè)置 VPC 對(duì)等互連,將會(huì)發(fā)生以下情況:

  1. 您必須將臭名昭著的 0.0.0.0/0 CIDR 塊添加到您的 MongoDB Atlas 集群 IP 白名單中,因?yàn)槟鷮⒉恢?AWS Lambda 使用哪個(gè) IP 地址來調(diào)用您的 Atlas 數(shù)據(jù)庫。
  2. 您將為 Lambda 函數(shù)和 Atlas 集群之間的帶寬使用付費(fèi)。

如果您只是嘗試獲取此演示代碼以進(jìn)行編寫,這兩個(gè)警告可能沒問題,但如果您計(jì)劃部署一個(gè)可用于生產(chǎn)環(huán)境的 Lambda-Atlas 集成,則設(shè)置 VPC 對(duì)等互連是我們強(qiáng)烈推薦的安全最佳實(shí)踐。M0 是我們當(dāng)前的免費(fèi)產(chǎn)品;請(qǐng)查看我們的 MongoDB Atlas 定價(jià)頁面以了解所有可用實(shí)例大小的完整范圍。

提醒一下,對(duì)于開發(fā)環(huán)境和低流量網(wǎng)站,M0、M10 和 M20 實(shí)例大小應(yīng)該沒問題。但是,對(duì)于支持高流量應(yīng)用程序或大型數(shù)據(jù)集的生產(chǎn)環(huán)境,建議使用 M30 或更大實(shí)例大小。

在您的 MongoDB Atlas 集群中設(shè)置安全

確保您的應(yīng)用程序符合最小權(quán)限訪問策略對(duì)于保護(hù)您的數(shù)據(jù)免受惡意威脅至關(guān)重要。這就是為什么我們將設(shè)置一個(gè)特定的數(shù)據(jù)庫用戶,該用戶將只對(duì)我們的 travel 數(shù)據(jù)庫具有讀/寫訪問權(quán)限。讓我們看看如何在 MongoDB Atlas 中實(shí)現(xiàn)這一點(diǎn):

在“集群”頁面上,選擇“安全”選項(xiàng)卡,然后按“添加新用戶”按鈕

Serverless development with Node.js, AWS Lambda and MongoDB Atlas Serverless development with Node.js, AWS Lambda and MongoDB Atlas 在“用戶權(quán)限”部分,選擇鏈接。這允許我們?yōu)樘囟〝?shù)據(jù)庫分配讀/寫權(quán)限,而不是任何數(shù)據(jù)庫。

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 然后,您可以選擇分配更細(xì)粒度的訪問控制權(quán)限:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 在“選擇角色”下拉列表中,選擇 readWrite 并使用您將用于存儲(chǔ)文檔的數(shù)據(jù)庫的名稱填寫“數(shù)據(jù)庫”字段。我選擇將其命名為 travel。

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 在“密碼”部分,使用“自動(dòng)生成安全密碼”按鈕(并記下生成的密碼)或設(shè)置您喜歡的密碼。然后按“添加用戶”按鈕以確認(rèn)此用戶創(chuàng)建。

讓我們順便獲取集群連接字符串,因?yàn)槲覀儗⒃?Lambda 代碼中需要它來連接到我們的 MongoDB Atlas 數(shù)據(jù)庫:

假設(shè)您已經(jīng)創(chuàng)建了一個(gè) MongoDB Atlas 集群,請(qǐng)按集群旁邊的“連接”按鈕:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 復(fù)制“URI 連接字符串”值并將其安全地存儲(chǔ)在文本文檔中。我們稍后將在代碼中需要它,以及您剛剛設(shè)置的密碼。

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 此外,如果您沒有使用 VPC 對(duì)等互連,請(qǐng)導(dǎo)航到“IP 白名單”選項(xiàng)卡并添加 0.0.0.0/0 CIDR 塊或按“允許從任何地方訪問”按鈕。提醒一下,此設(shè)置強(qiáng)烈建議不要用于生產(chǎn)環(huán)境,并且可能會(huì)使您的 MongoDB Atlas 集群容易受到惡意攻擊。

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 創(chuàng)建本地 Node.js 項(xiàng)目

雖然 Lambda 函數(shù)支持多種語言,但我選擇使用 Node.js,這要?dú)w功于 JavaScript 作為一種多功能編程語言的日益普及以及 MEAN 和 MERN 堆棧的巨大成功(MongoDB、Express.js、Angular/React、Node.js 的首字母縮寫詞 – 查看 Andrew Morgan 關(guān)于此主題的精彩開發(fā)者博客系列)。此外,說實(shí)話,我喜歡它是一種解釋型輕量級(jí)語言,不需要繁重的開發(fā)工具和編譯器。

現(xiàn)在該編寫一些代碼了,所以讓我們繼續(xù)使用 Node.js 作為我們 Lambda 函數(shù)的首選語言。

首先創(chuàng)建一個(gè)文件夾,例如 lambda-atlas-create-doc

<code>mkdir lambda-atlas-create-doc 
&& cd lambda-atlas-create-doc</code>

接下來,從終端控制臺(tái)運(yùn)行以下命令,使用 package.json 文件初始化我們的項(xiàng)目

<code>npm init</code>

系統(tǒng)會(huì)提示您配置一些字段。我將它們留給您的創(chuàng)造力,但請(qǐng)注意,我選擇將入口點(diǎn)設(shè)置為 app.js(而不是默認(rèn)的 index.js),因此您可能也希望這樣做。

我們需要使用 MongoDB Node.js 驅(qū)動(dòng)程序,以便我們可以從 Lambda 函數(shù)(在 Atlas 上)連接到我們的 MongoDB 數(shù)據(jù)庫,因此讓我們繼續(xù)運(yùn)行以下命令從我們的項(xiàng)目根目錄安裝它:

<code>npm install mongodb --save</code>

我們還希望在本地編寫和測(cè)試我們的 Lambda 函數(shù)以加快開發(fā)和簡(jiǎn)化調(diào)試,因?yàn)槊看卧?Amazon Web Services 中實(shí)例化 lambda 函數(shù)并不是特別快(并且調(diào)試實(shí)際上不存在,除非您是 console.log() 函數(shù)的粉絲)。我選擇使用 lambda-local 包,因?yàn)樗峁?duì)環(huán)境變量的支持(我們稍后將使用):

<code>(sudo) npm install lambda-local -g</code>

創(chuàng)建一個(gè) app.js 文件。這將是包含我們的 lambda 函數(shù)的文件:

<code>touch app.js</code>

現(xiàn)在您已經(jīng)導(dǎo)入了所有必需的依賴項(xiàng)并創(chuàng)建了 Lambda 代碼文件,請(qǐng)?jiān)谀x擇的代碼編輯器(Atom、Sublime Text、Visual Studio Code……)中打開 app.js 文件,并使用以下代碼段對(duì)其進(jìn)行初始化:

<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>

讓我們稍作停頓并注釋上面的代碼,因?yàn)槟赡芤呀?jīng)注意到一些奇怪的結(jié)構(gòu):

  • 該文件完全按照 AWS Lambda 預(yù)期的方式編寫(例如,使用“exports.handler”函數(shù))。這是因?yàn)槲覀兪褂?lambda-local 在本地測(cè)試我們的 lambda 函數(shù),這讓我們可以完全按照 AWS Lambda 預(yù)期的方式編寫我們的代碼。稍后將詳細(xì)介紹。
  • 我們正在聲明 MongoDB Node.js 驅(qū)動(dòng)程序,它將幫助我們從 Lambda 函數(shù)連接到 MongoDB 數(shù)據(jù)庫(在 Atlas 上)。
  • 還請(qǐng)注意,我們正在 handler 函數(shù)外部聲明一個(gè) cachedDb 對(duì)象。顧名思義,它是一個(gè)對(duì)象,我們計(jì)劃在 AWS Lambda 為我們的函數(shù)實(shí)例化的底層容器的持續(xù)時(shí)間內(nèi)對(duì)其進(jìn)行緩存。這使我們可以節(jié)省一些寶貴的毫秒(甚至秒)來在 Lambda 和 MongoDB Atlas 之間創(chuàng)建數(shù)據(jù)庫連接。有關(guān)更多信息,請(qǐng)閱讀我后續(xù)的博文,了解如何使用 MongoDB Atlas 優(yōu)化 Lambda 性能。
  • 我們使用名為 MONGODB_ATLAS_CLUSTER_URI 的環(huán)境變量來傳遞 Atlas 數(shù)據(jù)庫的 uri 連接字符串,主要出于安全原因:我們顯然不想在我們的函數(shù)代碼中硬編碼此 uri,以及諸如我們使用的用戶名和密碼之類的非常敏感的信息。由于 AWS Lambda 自 2016 年 11 月以來支持環(huán)境變量(lambda-local NPM 包也是如此),我們不使用它們就太疏忽了。
  • 該函數(shù)代碼看起來有點(diǎn)復(fù)雜,使用了看似無用的 if-else 語句和 processEvent 函數(shù),但當(dāng)我們使用 AWS 密鑰管理服務(wù) (KMS) 添加解密例程時(shí),這一切都會(huì)變得清晰。事實(shí)上,我們不僅希望將我們的 MongoDB Atlas 連接字符串存儲(chǔ)在環(huán)境變量中,而且還希望對(duì)其進(jìn)行加密(使用 AWS KMS),因?yàn)樗叨让舾械臄?shù)據(jù)(請(qǐng)注意,即使您擁有免費(fèi)的 AWS 帳戶,當(dāng)您使用 AWS KMS 時(shí)也可能會(huì)產(chǎn)生費(fèi)用)。

現(xiàn)在我們完成了代碼注釋,讓我們創(chuàng)建一個(gè) event.json 文件(在項(xiàng)目根目錄中)并使用以下數(shù)據(jù)填充它:

<code>mkdir lambda-atlas-create-doc 
&& cd lambda-atlas-create-doc</code>

(如果您想知道,該 JSON 文件就是我們將發(fā)送到 MongoDB Atlas 以創(chuàng)建我們的 BSON 文檔的內(nèi)容)

接下來,確保您已正確設(shè)置,方法是在終端控制臺(tái)中運(yùn)行以下命令:

<code>npm init</code>

如果您想使用您自己的集群 URI 連接字符串進(jìn)行測(cè)試(我相信您會(huì)的),請(qǐng)不要忘記轉(zhuǎn)義 E 參數(shù)中的雙引號(hào)、逗號(hào)和&字符,否則 lambda-local 將拋出錯(cuò)誤(您還應(yīng)該將 $PASSWORD 和 $DATABASE 關(guān)鍵字替換為您自己的值)。

在您在本地運(yùn)行它之后,您應(yīng)該會(huì)看到以下控制臺(tái)輸出:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 如果您遇到錯(cuò)誤,請(qǐng)檢查您的連接字符串和雙引號(hào)/逗號(hào)/&轉(zhuǎn)義(如上所述)。

現(xiàn)在,讓我們通過自定義 processEvent() 函數(shù)并添加 createDoc() 函數(shù)來處理函數(shù)代碼的核心內(nèi)容:

<code>mkdir lambda-atlas-create-doc 
&& cd lambda-atlas-create-doc</code>

請(qǐng)注意,連接到 MongoDB Atlas 數(shù)據(jù)庫和插入文檔是多么容易,以及我添加的小段代碼來將 JSON 日期(格式化為符合 ISO 標(biāo)準(zhǔn)的字符串)轉(zhuǎn)換為 MongoDB 可以作為 BSON 日期存儲(chǔ)的真實(shí) JavaScript 日期。

您可能還注意到了我的性能優(yōu)化注釋和對(duì) context.callbackWaitsForEmptyEventLoop = false 的調(diào)用。如果您有興趣了解它們的意思(我認(rèn)為您應(yīng)該了解?。?qǐng)參閱我后續(xù)的博文,了解如何使用 MongoDB Atlas 優(yōu)化 Lambda 性能。

您現(xiàn)在已準(zhǔn)備好完全在本地測(cè)試您的 Lambda 函數(shù)。使用與之前相同的 lambda-local 命令,希望您會(huì)收到一條不錯(cuò)的“Kudos”成功消息:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 如果在您的本地機(jī)器上一切順利,讓我們將我們的本地 Node.js 項(xiàng)目發(fā)布為一個(gè)新的 Lambda 函數(shù)!

創(chuàng)建 Lambda 函數(shù)

我們將要采取的第一步是壓縮我們的 Node.js 項(xiàng)目,因?yàn)槲覀儾粫?huì)在 Lambda 代碼編輯器中編寫 Lambda 代碼函數(shù)。相反,我們將選擇 zip 上傳方法來將我們的代碼推送到 AWS Lambda。

我在終端控制臺(tái)中使用了 zip 命令行工具,但任何方法都可以(只要您將文件壓縮到頂級(jí)文件夾中,而不是頂級(jí)文件夾本身?。?

<code>npm init</code>

接下來,登錄 AWS 控制臺(tái),導(dǎo)航到 IAM 角色頁面并創(chuàng)建一個(gè)角色(例如 LambdaBasicExecRole),該角色具有 AWSLambdaBasicExecutionRole 權(quán)限策略:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 現(xiàn)在讓我們導(dǎo)航到 AWS Lambda 頁面。單擊“立即開始”(如果您從未創(chuàng)建過 Lambda 函數(shù))或“創(chuàng)建 Lambda 函數(shù)”按鈕。我們不會(huì)使用任何藍(lán)圖,也不會(huì)配置任何觸發(fā)器,因此請(qǐng)直接在左側(cè)導(dǎo)航欄中選擇“配置函數(shù)”:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 在“配置函數(shù)”頁面中,輸入函數(shù)的名稱(例如 MongoDB_Atlas_CreateDoc)。運(yùn)行時(shí)自動(dòng)設(shè)置為 Node.js 4.3,這對(duì)我們來說非常完美,因?yàn)檫@是我們將使用的語言。在“代碼輸入類型”列表中,選擇“上傳 .ZIP 文件”,如下面的屏幕截圖所示:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 單擊“上傳”按鈕并選擇您之前創(chuàng)建的壓縮 Node.js 項(xiàng)目文件。

在“Lambda 函數(shù)處理程序和角色”部分,將“處理程序”字段值修改為 app.handler(為什么?這里有一個(gè)提示:我為我的 Lambda 函數(shù)代碼使用了 app.js 文件,而不是 index.js 文件……)并選擇我們剛剛創(chuàng)建的現(xiàn)有 LambdaBasicExecRole 角色:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 在“高級(jí)設(shè)置”部分,您可能希望將“超時(shí)”值增加到 5 或 10 秒,但這始終是您以后可以調(diào)整的內(nèi)容。將 VPC 和 KMS 密鑰字段保留為其默認(rèn)值(除非您要使用 VPC 和/或 KMS 密鑰),然后按“下一步”。

最后,查看您的 Lambda 函數(shù),然后按底部的“創(chuàng)建函數(shù)”。恭喜,您的 Lambda 函數(shù)已上線,您應(yīng)該會(huì)看到類似于以下屏幕截圖的頁面:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 但是您還記得我們使用環(huán)境變量嗎?現(xiàn)在是配置它們并使用 AWS 密鑰管理服務(wù)來保護(hù)它們的時(shí)候了!

配置和保護(hù)您的 Lambda 環(huán)境變量

向下滾動(dòng)到 Lambda 函數(shù)的“代碼”選項(xiàng)卡中,并創(chuàng)建一個(gè)具有以下屬性的環(huán)境變量:

名稱 值 MONGODB_ATLAS_CLUSTER_URI YOUR_ATLAS_CLUSTER_URI_VALUE Serverless development with Node.js, AWS Lambda and MongoDB Atlas 此時(shí),您可以按頁面頂部的“保存并測(cè)試”按鈕,但為了提高安全性(建議),我們將加密該連接字符串。

選中“啟用加密助手”復(fù)選框,如果您已經(jīng)創(chuàng)建了加密密鑰,請(qǐng)選擇它(否則,您可能需要?jiǎng)?chuàng)建一個(gè) – 這很容易):

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 接下來,為 MONGODB_ATLAS_CLUSTER_URI 變量選擇“加密”按鈕:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 回到內(nèi)聯(lián)代碼編輯器中,在頂部添加以下行:

<code>mkdir lambda-atlas-create-doc 
&& cd lambda-atlas-create-doc</code>

并將“exports.handler”方法中“else”語句的內(nèi)容替換為以下代碼:

<code>npm init</code>

(希望我們最初編寫的復(fù)雜代碼現(xiàn)在有意義了?。?/p>

如果您想檢查我使用的整個(gè)函數(shù)代碼,請(qǐng)查看以下 Gist。對(duì)于 Git 粉絲,完整的 Node.js 項(xiàng)目源代碼也可在 GitHub 上獲得。

現(xiàn)在按“保存并測(cè)試”按鈕,并在“輸入測(cè)試事件”文本編輯器中粘貼我們的 event.json 文件的內(nèi)容:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 滾動(dòng)并按下“保存并測(cè)試”按鈕。

如果您正確配置了一切,您應(yīng)該會(huì)在 Lambda 日志輸出中收到以下成功消息:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 太棒了!您可以在繼續(xù)閱讀之前享受幾分鐘的成功。

接下來是什么?

我希望本 AWS Lambda-MongoDB Atlas 集成教程能為您開始第一個(gè) Lambda 項(xiàng)目提供正確的步驟。您現(xiàn)在應(yīng)該能夠在本地編寫和測(cè)試 Lambda 函數(shù),并將敏感數(shù)據(jù)(例如您的 MongoDB Atlas 連接字符串)安全地存儲(chǔ)在 AWS KMS 中。

那么接下來您可以做什么呢?

  • 如果您還沒有 MongoDB Atlas 帳戶,現(xiàn)在創(chuàng)建也為時(shí)不晚!
  • 如果你不熟悉 MongoDB Node.js 驅(qū)動(dòng)程序,請(qǐng)查看我們的 Node.js 驅(qū)動(dòng)程序文檔,了解如何充分利用 MongoDB API。此外,我們還為剛開始使用 MongoDB 的 Node.js 開發(fā)者提供在線 Node.js 課程。
  • 了解如何使用 Lambda 函數(shù)創(chuàng)建的數(shù)據(jù),下載 MongoDB Compass 并閱讀使用 MongoDB Compass 可視化您的數(shù)據(jù),了解如何將其連接到 MongoDB Atlas。
  • 計(jì)劃構(gòu)建大量 Lambda 函數(shù)?通過閱讀我們的使用 AWS Step Functions 集成 MongoDB Atlas、Twilio 和 AWS 簡(jiǎn)單電子郵件服務(wù)博文來學(xué)習(xí)如何使用 AWS Step Functions 來協(xié)調(diào)它們。
  • 了解如何在更復(fù)雜的場(chǎng)景中集成 MongoDB 和 AWS Lambda,請(qǐng)查看我們更高級(jí)的博文:使用 AWS Lambda 和 MongoDB Atlas 開發(fā) Facebook 聊天機(jī)器人。

當(dāng)然,請(qǐng)隨時(shí)在下面的評(píng)論中提出任何問題或留下您的反饋。編碼愉快!

喜歡這篇文章嗎?重播我們的網(wǎng)絡(luò)研討會(huì),其中我們對(duì)使用 AWS Lambda 的無服務(wù)器架構(gòu)進(jìn)行了交互式教程。

關(guān)于使用 Node.js、AWS Lambda 和 MongoDB Atlas 進(jìn)行無服務(wù)器開發(fā)的常見問題解答 (FAQ)

使用 AWS Lambda 進(jìn)行無服務(wù)器開發(fā)的好處是什么?

AWS Lambda 是無服務(wù)器開發(fā)中非常有益的工具。它允許開發(fā)者運(yùn)行代碼而無需管理服務(wù)器。這意味著您可以專注于編寫代碼,而讓 AWS Lambda 處理基礎(chǔ)設(shè)施。它會(huì)根據(jù)傳入流量自動(dòng)擴(kuò)展您的應(yīng)用程序,并且您只需為消耗的計(jì)算時(shí)間付費(fèi)。這使其成為各種規(guī)模企業(yè)具有成本效益的解決方案。此外,AWS Lambda 支持多種編程語言,包括 Node.js,使其成為開發(fā)者的多功能選擇。

MongoDB Atlas 如何與 AWS Lambda 集成?

MongoDB Atlas 與 AWS Lambda 無縫集成。它提供了一種完全托管的數(shù)據(jù)庫服務(wù),可以自動(dòng)化耗時(shí)的管理任務(wù),例如硬件配置、數(shù)據(jù)庫設(shè)置、修補(bǔ)和備份。使用 MongoDB Atlas,您可以輕松地根據(jù)數(shù)據(jù)庫事件(例如插入、更新或刪除)觸發(fā) AWS Lambda 函數(shù)。這使您可以創(chuàng)建功能強(qiáng)大、實(shí)時(shí)且無服務(wù)器的應(yīng)用程序。

使用 Node.js、AWS Lambda 和 MongoDB Atlas 設(shè)置無服務(wù)器應(yīng)用程序的步驟是什么?

使用 Node.js、AWS Lambda 和 MongoDB Atlas 設(shè)置無服務(wù)器應(yīng)用程序涉及多個(gè)步驟。首先,您需要設(shè)置您的 AWS Lambda 函數(shù)。這包括使用 Node.js 編寫代碼并將其上傳到 AWS Lambda。接下來,您需要配置您的 MongoDB Atlas 集群。這包括創(chuàng)建一個(gè)新集群、配置您的 IP 白名單和創(chuàng)建一個(gè)數(shù)據(jù)庫用戶。最后,您需要將您的 AWS Lambda 函數(shù)連接到您的 MongoDB Atlas 集群。這包括配置您的 Lambda 函數(shù)以使用 MongoDB Atlas 連接字符串。

如何對(duì)無服務(wù)器應(yīng)用程序的問題進(jìn)行故障排除?

可以使用各種工具和技術(shù)對(duì)無服務(wù)器應(yīng)用程序的問題進(jìn)行故障排除。AWS Lambda 提供函數(shù)執(zhí)行的詳細(xì)日志,這可以幫助您識(shí)別任何錯(cuò)誤或問題。MongoDB Atlas 還提供全面的監(jiān)控和警報(bào)功能,使您可以跟蹤數(shù)據(jù)庫的性能并接收任何潛在問題的警報(bào)。此外,使用良好的編碼實(shí)踐并徹底測(cè)試您的應(yīng)用程序可以幫助防止問題出現(xiàn)。

使用 AWS Lambda 和 MongoDB Atlas 時(shí)有哪些安全注意事項(xiàng)?

安全性是任何應(yīng)用程序的關(guān)鍵方面,無服務(wù)器應(yīng)用程序也不例外。AWS Lambda 提供多種安全功能,包括用于訪問控制的 AWS Identity and Access Management (IAM)、傳輸中和靜態(tài)加密以及用于網(wǎng)絡(luò)隔離的 VPC 支持。MongoDB Atlas 還提供強(qiáng)大的安全功能,包括 IP 白名單、數(shù)據(jù)庫審核以及靜態(tài)和傳輸中加密。務(wù)必正確配置這些安全功能以保護(hù)您的應(yīng)用程序和數(shù)據(jù)。

如何優(yōu)化無服務(wù)器應(yīng)用程序的性能?

優(yōu)化無服務(wù)器應(yīng)用程序的性能涉及多種策略。這包括正確配置 AWS Lambda 函數(shù)以實(shí)現(xiàn)最佳性能、使用高效代碼以及優(yōu)化 MongoDB Atlas 數(shù)據(jù)庫。AWS Lambda 允許您為函數(shù)分配內(nèi)存,這也按比例分配 CPU 能力、網(wǎng)絡(luò)帶寬和磁盤 I/O。MongoDB Atlas 提供性能優(yōu)化功能,例如自動(dòng)索引和性能顧問建議。

我可以在 AWS Lambda 和 MongoDB Atlas 中使用其他編程語言嗎?

是的,AWS Lambda 支持多種編程語言,包括 Node.js、Python、Java、Go 和 .NET。MongoDB Atlas 可以與任何具有 MongoDB 驅(qū)動(dòng)程序的編程語言一起使用。這使其成為無服務(wù)器開發(fā)的多功能解決方案。

無服務(wù)器架構(gòu)如何影響我的應(yīng)用程序的成本?

無服務(wù)器架構(gòu)可以顯著降低應(yīng)用程序的成本。使用 AWS Lambda,您只需為消耗的計(jì)算時(shí)間付費(fèi),并且在代碼未運(yùn)行時(shí)不收費(fèi)。MongoDB Atlas 提供各種定價(jià)選項(xiàng),包括免費(fèi)層,使您可以選擇最適合您需求的選項(xiàng)。

如何將我的現(xiàn)有應(yīng)用程序遷移到無服務(wù)器架構(gòu)?

將現(xiàn)有應(yīng)用程序遷移到無服務(wù)器架構(gòu)涉及多個(gè)步驟。首先,您需要重構(gòu)應(yīng)用程序以使其與 AWS Lambda 和 MongoDB Atlas 兼容。這可能包括使用受支持的編程語言重寫代碼并修改數(shù)據(jù)庫模式。接下來,您需要設(shè)置 AWS Lambda 函數(shù)和 MongoDB Atlas 集群。最后,您需要徹底測(cè)試您的應(yīng)用程序,以確保它在新架構(gòu)中正常工作。

使用 AWS Lambda 和 MongoDB Atlas 進(jìn)行無服務(wù)器開發(fā)的局限性是什么?

雖然 AWS Lambda 和 MongoDB Atlas 為無服務(wù)器開發(fā)提供了許多好處,但需要注意一些局限性。AWS Lambda 對(duì)可使用的計(jì)算和存儲(chǔ)資源量有限制,并且函數(shù)具有最大執(zhí)行時(shí)間。MongoDB Atlas 還限制了數(shù)據(jù)庫的大小和連接數(shù)。但是,這些限制通常足夠高,可以容納大多數(shù)應(yīng)用程序。

以上是使用Node.js,AWS Lambda和Mongodb Atlas的無服務(wù)器開發(fā)的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機(jī)制通過標(biāo)記-清除算法自動(dòng)管理內(nèi)存,以減少內(nèi)存泄漏風(fēng)險(xiǎn)。引擎從根對(duì)象出發(fā)遍歷并標(biāo)記活躍對(duì)象,未被標(biāo)記的則被視為垃圾并被清除。例如,當(dāng)對(duì)象不再被引用(如將變量設(shè)為null),它將在下一輪回收中被釋放。常見的內(nèi)存泄漏原因包括:①未清除的定時(shí)器或事件監(jiān)聽器;②閉包中對(duì)外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。V8引擎通過分代回收、增量標(biāo)記、并行/并發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時(shí)間。開發(fā)時(shí)應(yīng)避免不必要的全局引用、及時(shí)解除對(duì)象關(guān)聯(lián),以提升性能與穩(wěn)定性。

如何在node.js中提出HTTP請(qǐng)求? 如何在node.js中提出HTTP請(qǐng)求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請(qǐng)求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場(chǎng)景,但需手動(dòng)處理數(shù)據(jù)拼接和錯(cuò)誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請(qǐng)求;2.axios是基于Promise的第三方庫,語法簡(jiǎn)潔且功能強(qiáng)大,支持async/await、自動(dòng)JSON轉(zhuǎn)換、攔截器等,推薦用于簡(jiǎn)化異步請(qǐng)求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基于Promise且語法簡(jiǎn)單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時(shí)復(fù)制副本,因此互不影響;引用類型如對(duì)象、數(shù)組和函數(shù)存儲(chǔ)的是內(nèi)存地址,指向同一對(duì)象的變量會(huì)相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助于編寫更穩(wěn)定可靠的代碼。

React與Angular vs Vue:哪個(gè)JS框架最好? React與Angular vs Vue:哪個(gè)JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個(gè)JavaScript框架最好?答案是根據(jù)需求選擇最適合的。1.React靈活自由,適合需要高度定制、團(tuán)隊(duì)有架構(gòu)能力的中大型項(xiàng)目;2.Angular提供完整解決方案,適合企業(yè)級(jí)應(yīng)用和長(zhǎng)期維護(hù)的大項(xiàng)目;3.Vue上手簡(jiǎn)單,適合中小型項(xiàng)目或快速開發(fā)。此外,是否已有技術(shù)棧、團(tuán)隊(duì)規(guī)模、項(xiàng)目生命周期及是否需要SSR也都是選擇框架的重要因素??傊瑳]有絕對(duì)最好的框架,適合自己需求的就是最佳選擇。

JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本周的JavaScript新聞!本周我們將重點(diǎn)關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時(shí)間對(duì)象獲得瀏覽器支持、GoogleChrome的更新以及一些強(qiáng)大的開發(fā)者工具。讓我們開始吧!Oracle與Deno的商標(biāo)之爭(zhēng)Oracle試圖注冊(cè)“JavaScript”商標(biāo)的舉動(dòng)引發(fā)爭(zhēng)議。Node.js和Deno的創(chuàng)建者RyanDahl已提交請(qǐng)?jiān)笗笕∠撋虡?biāo),他認(rèn)為JavaScript是一個(gè)開放標(biāo)準(zhǔn),不應(yīng)由Oracle

立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) 立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義后立即執(zhí)行的函數(shù)表達(dá)式,用于變量隔離和避免污染全局作用域。它通過將函數(shù)包裹在括號(hào)中使其成為表達(dá)式,并緊隨其后的一對(duì)括號(hào)來調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量沖突,防止多個(gè)腳本間的命名重復(fù);2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見;3.模塊化代碼,便于初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達(dá)式、結(jié)

處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鏈?zhǔn)秸{(diào)用、錯(cuò)誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。1.鏈?zhǔn)秸{(diào)用通過.then()返回新Promise實(shí)現(xiàn)異步流程串聯(lián),每個(gè).then()接收上一步結(jié)果并可返回值或Promise;2.錯(cuò)誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,并可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個(gè)完成即返回)和Promise.allSettled()(等待所有完成)

什么是緩存API?如何與服務(wù)人員使用? 什么是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請(qǐng)求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗(yàn)。1.它允許開發(fā)者手動(dòng)存儲(chǔ)如腳本、樣式表、圖片等資源;2.可根據(jù)請(qǐng)求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個(gè)緩存;4.通過ServiceWorker監(jiān)聽fetch事件實(shí)現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用于離線支持、加快重復(fù)訪問速度、預(yù)加載關(guān)鍵資源及后臺(tái)更新內(nèi)容;6.使用時(shí)需注意緩存版本控制、存儲(chǔ)限制及與HTTP緩存機(jī)制的區(qū)別。

See all articles