国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

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

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

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

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

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

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

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

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

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

  1. MongoDB Atlas 默認(rèn)情況下是安全的,但作為應(yīng)用程序開發(fā)者,我們應(yīng)該採(cǎi)取一些步驟來(lái)確保我們的應(yīng)用程序符合最小權(quán)限訪問(wèn)最佳實(shí)踐。也就是說(shuō),我們將通過(guò)創(chuàng)建一個(gè)僅對(duì)我們的應(yīng)用程序數(shù)據(jù)庫(kù)具有讀/寫訪問(wèn)權(quán)限的 MongoDB Atlas 數(shù)據(jù)庫(kù)用戶來(lái)微調(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)短說(shuō)明

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

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

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

如果您只是嘗試獲取此演示代碼以進(jìn)行編寫,這兩個(gè)警告可能沒(méi)問(wèn)題,但如果您計(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à)頁(yè)面以了解所有可用實(shí)例大小的完整範(fàn)圍。

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

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

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

在“集群”頁(yè)面上,選擇“安全”選項(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ù)庫(kù)分配讀/寫權(quán)限,而不是任何數(shù)據(jù)庫(kù)。

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

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

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

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

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

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

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 此外,如果您沒(méi)有使用 VPC 對(duì)等互連,請(qǐng)導(dǎo)航到“IP 白名單”選項(xiàng)卡並添加 0.0.0.0/0 CIDR 塊或按“允許從任何地方訪問(wèn)”按鈕。提醒一下,此設(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ù)支持多種語(yǔ)言,但我選擇使用Node.js,這要?dú)w功於JavaScript 作為一種多功能編程語(yǔ)言的日益普及以及MEAN 和MERN 堆棧的巨大成功(MongoDB、Express.js、Angular /React、Node.js 的首字母縮寫詞– 查看Andrew Morgan 關(guān)於此主題的精彩開發(fā)者博客系列)。此外,說(shuō)實(shí)話,我喜歡它是一種解釋型輕量級(jí)語(yǔ)言,不需要繁重的開發(fā)工具和編譯器。

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

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

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

接下來(lái),從終端控制臺(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ù)庫(kù),因此讓我們繼續(xù)運(yùn)行以下命令從我們的項(xiàng)目根目錄安裝它:

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

我們還希望在本地編寫和測(cè)試我們的Lambda 函數(shù)以加快開發(fā)和簡(jiǎn)化調(diào)試,因?yàn)槊看卧贏mazon 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ù)庫(kù)(在 Atlas 上)。
  • 還請(qǐng)注意,我們正在 handler 函數(shù)外部聲明一個(gè) cachedDb 對(duì)象。顧名思義,它是一個(gè)對(duì)象,我們計(jì)劃在 AWS Lambda 為我們的函數(shù)實(shí)例化的底層容器的持續(xù)時(shí)間內(nèi)對(duì)其進(jìn)行緩存。這使我們可以節(jié)省一些寶貴的毫秒(甚至秒)來(lái)在 Lambda 和 MongoDB Atlas 之間創(chuàng)建數(shù)據(jù)庫(kù)連接。有關(guān)更多信息,請(qǐng)閱讀我後續(xù)的博文,了解如何使用 MongoDB Atlas 優(yōu)化 Lambda 性能。
  • 我們使用名為MONGODB_ATLAS_CLUSTER_URI 的環(huán)境變量來(lái)傳遞Atlas 數(shù)據(jù)庫(kù)的uri 連接字符串,主要出於安全原因:我們顯然不想在我們的函數(shù)代碼中硬編碼此uri,以及諸如我們使用的用戶名和密碼之類的非常敏感的信息。由於 AWS Lambda 自 2016 年 11 月以來(lái)支持環(huán)境變量(lambda-local NPM 包也是如此),我們不使用它們就太疏忽了。
  • 該函數(shù)代碼看起來(lái)有點(diǎn)複雜,使用了看似無(wú)用的 if-else 語(yǔ)句和 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)容)

接下來(lá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)在,讓我們通過(guò)自定義 processEvent() 函數(shù)並添加 createDoc() 函數(shù)來(lái)處理函數(shù)代碼的核心內(nèi)容:

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

請(qǐng)注意,連接到MongoDB Atlas 數(shù)據(jù)庫(kù)和插入文檔是多麼容易,以及我添加的小段代碼來(lái)將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ù)

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

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

<code>npm init</code>

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

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 現(xiàn)在讓我們導(dǎo)航到 AWS Lambda 頁(yè)面。單擊“立即開始”(如果您從未創(chuàng)建過(guò) 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ù)”頁(yè)面中,輸入函數(shù)的名稱(例如 MongoDB_Atlas_CreateDoc)。運(yùn)行時(shí)自動(dòng)設(shè)置為 Node.js 4.3,這對(duì)我們來(lái)說(shuō)非常完美,因?yàn)檫@是我們將使用的語(yǔ)言。在“代碼輸入類型”列表中,選擇“上傳 .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ì)看到類似於以下屏幕截圖的頁(yè)面:

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 但是您還記得我們使用環(huán)境變量嗎?現(xiàn)在是配置它們並使用 AWS 密鑰管理服務(wù)來(lái)保護(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í),您可以按頁(yè)面頂部的“保存並測(cè)試”按鈕,但為了提高安全性(建議),我們將加密該連接字符串。

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

Serverless development with Node.js, AWS Lambda and MongoDB Atlas 接下來(lái),為 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”語(yǔ)句的內(nèi)容替換為以下代碼:

<code>npm init</code>

(希望我們最初編寫的複雜代碼現(xiàn)在有意義了!)

如果您想檢查我使用的整個(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ù)閱讀之前享受幾分鐘的成功。

接下來(lái)是什麼?

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

那麼接下來(lái)您可以做什麼呢?

  • 如果您還沒(méi)有 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ù)?通過(guò)閱讀我們的使用 AWS Step Functions 集成 MongoDB Atlas、Twilio 和 AWS 簡(jiǎn)單電子郵件服務(wù)博文來(lái)學(xué)習(xí)如何使用 AWS Step Functions 來(lái)協(xié)調(diào)它們。
  • 了解如何在更複雜的場(chǎng)景中集成 MongoDB 和 AWS Lambda,請(qǐng)查看我們更高級(jí)的博文:使用 AWS Lambda 和 MongoDB Atlas 開發(fā) Facebook 聊天機(jī)器人。

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

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

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

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

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

MongoDB Atlas 如何與 AWS Lambda 集成?

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

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

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

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

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

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

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

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

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

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

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

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

無(wú)服務(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ú)服務(wù)器架構(gòu)?

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

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

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

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

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)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脫衣器

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)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語(yǔ)言,各自適用於不同的應(yīng)用場(chǎng)景。 Java用於大型企業(yè)和移動(dòng)應(yīng)用開發(fā),而JavaScript主要用於網(wǎng)頁(yè)開發(fā)。

JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問(wèn)題建議使用支持時(shí)區(qū)的庫(kù),如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

JavaScript:探索用於高效編碼的數(shù)據(jù)類型 JavaScript:探索用於高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過(guò)addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助於精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

Java和JavaScript有什麼區(qū)別? Java和JavaScript有什麼區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語(yǔ)言。 1.Java是靜態(tài)類型、編譯型語(yǔ)言,適用於企業(yè)應(yīng)用和大型系統(tǒng)。 2.JavaScript是動(dòng)態(tài)類型、解釋型語(yǔ)言,主要用於網(wǎng)頁(yè)交互和前端開發(fā)。

See all articles