最后修改: 2個(gè)個(gè)7/01/2021
閱讀時(shí)間:
無(wú)服務(wù)器是指由云提供商管理和分配服務(wù)器和資源的應(yīng)用程序。 這意味著云提供商將動(dòng)態(tài)分配資源。 該應(yīng)用程序在可以由事件觸發(fā)的無(wú)狀態(tài)容器中運(yùn)行。 上面的一個(gè)示例以及我們將在本文中使用的示例都是關(guān)于 AWS 拉姆達(dá)。
簡(jiǎn)而言之, 我們可以將“無(wú)服務(wù)器應(yīng)用程序”確定為基于事件的基于云的系統(tǒng)的應(yīng)用程序。 該應(yīng)用程序依賴(lài)第三方服務(wù), 客戶(hù)端邏輯, 和遠(yuǎn)程呼叫(直接調(diào)用它 服務(wù)功能)。
無(wú)服務(wù)器框架是一個(gè)開(kāi)放源代碼框架。 它由命令行界面或CLI和托管的儀表板組成, 為我們提供了一個(gè)完全無(wú)服務(wù)器的應(yīng)用程序管理系統(tǒng)。 使用框架可確保更少的開(kāi)銷(xiāo)和成本, 快速開(kāi)發(fā)和部署, 并保護(hù)無(wú)服務(wù)器應(yīng)用程序。
在繼續(xù)安裝無(wú)服務(wù)器框架之前, 您必須先設(shè)置節(jié)點(diǎn)JS。 在大多數(shù)操作系統(tǒng)上,該操作非常容易-您只需訪(fǎng)問(wèn)節(jié)點(diǎn)JS官方網(wǎng)站即可下載并安裝。 請(qǐng)記住選擇高于6的版本。0。0。
安裝后, 您可以通過(guò)在控制臺(tái)中運(yùn)行來(lái)確認(rèn)NodeJS可用。 它應(yīng)該返回您已安裝的節(jié)點(diǎn)版本:
您現(xiàn)在可以出發(fā)了, 因此,繼續(xù)安裝無(wú)服務(wù)器框架。
為了做到這一點(diǎn), 請(qǐng)按照文檔設(shè)置和配置框架。 如果你比較喜歡, 您只能為一個(gè)項(xiàng)目安裝它, 但是在DevriX, 我們通常在全球范圍內(nèi)安裝框架:
等待該過(guò)程完成,并通過(guò)運(yùn)行以下命令來(lái)確保Serverless已成功安裝:
在繼續(xù)創(chuàng)建示例應(yīng)用程序之前, 您應(yīng)該在中創(chuàng)建一個(gè)帳戶(hù) 亞馬遜AWS。 如果您還沒(méi)有, 就像去Amazon AWS并單擊 “創(chuàng)建一個(gè)AWS賬戶(hù)” 在右上角,然后按照以下步驟創(chuàng)建帳戶(hù)。
亞馬遜要求您輸入信用卡, 因此,您必須輸入相應(yīng)的信息才能繼續(xù)操作。 成功注冊(cè)和登錄后,您應(yīng)該看到AWS管理控制臺(tái):
偉大的! 現(xiàn)在開(kāi)始創(chuàng)建您的應(yīng)用程序。
在這一步中 我們必須使用AWS提供程序配置無(wú)服務(wù)器框架。 某些服務(wù)(例如AWS 拉姆達(dá))在訪(fǎng)問(wèn)憑據(jù)時(shí)需要憑據(jù),以確保您擁有該服務(wù)擁有的資源的權(quán)限。 AWS建議使用AWS Identity 和 Access M一個(gè)ager(我是)來(lái)完成此任務(wù)。
所以, 首先也是最重要的是創(chuàng)建一個(gè) 我是 用戶(hù) 在 AWS 在我們的應(yīng)用程序中使用它:
在AWS控制臺(tái)上:
- 類(lèi)型 IAM 在里面 “查找服務(wù)” 場(chǎng)地。
- 點(diǎn)擊 “我是”。
- 去 “用戶(hù)”。
- 點(diǎn)擊 “添加用戶(hù)”。
為了 “用戶(hù)名” 使用任何您想要的。 例如, 我們正在使用 無(wú)服務(wù)器管理員。 為了 ”訪(fǎng)問(wèn)類(lèi)型” 查看 “程序訪(fǎng)問(wèn)” 然后點(diǎn)擊 “下一個(gè)權(quán)限”。
在那之后, 我們必須為用戶(hù)附加權(quán)限, 點(diǎn)擊 “直接附加現(xiàn)有政策,” 搜索 “管理員訪(fǎng)問(wèn)權(quán)限” 然后單擊它。 繼續(xù)點(diǎn)擊 “下一個(gè)標(biāo)簽”
標(biāo)簽是可選的, 因此您可以點(diǎn)擊 “下次點(diǎn)評(píng)” 和 “創(chuàng)建用戶(hù)”。 完成并加載后, 頁(yè)面上會(huì)顯示一條成功消息,其中包含我們所需的憑據(jù)。
現(xiàn)在我們必須運(yùn)行以下命令:
代替 鑰匙 和 秘密 與上面提供的一個(gè)。 您的AWS憑證已創(chuàng)建為配置文件。 您可以通過(guò)打開(kāi) ?/。AWS /憑證 文件。 它應(yīng)包含AWS配置文件。 目前, 在下面的示例中, 這只是我們創(chuàng)建的一個(gè):
到目前為止做得好! 您可以繼續(xù)使用以下方法創(chuàng)建一個(gè)示例應(yīng)用程序 NodeJS 以及內(nèi)置的啟動(dòng)模板。
筆記: 此外, 在文章中 我們正在使用命令, 這是的縮寫(xiě)。
創(chuàng)建一個(gè)空目錄并輸入。 運(yùn)行命令
使用 創(chuàng)建–模板 命令指定可用模板之一, 在這種情況下, aws-nodejs, 這是一個(gè) NodeJS “ Hello world”模板應(yīng)用程序。
完成后, 您的目錄應(yīng)包含以下內(nèi)容, 看起來(lái)像這樣:
我們已經(jīng)創(chuàng)建了新文件 處理程序。js 和 無(wú)服務(wù)器。yml。
這 處理程序。js 文件存儲(chǔ)您的功能, 和 無(wú)服務(wù)器。yml 存儲(chǔ)您稍后將更改的配置屬性。 如果您想知道 。yml 文件是 簡(jiǎn)而言之, 它是一個(gè) 可讀數(shù)據(jù)序列化語(yǔ)言。 熟悉它是一件好事, 因?yàn)樵诓迦肴魏闻渲脜?shù)時(shí)使用它。 但是,讓我們看一下我們所擁有的 無(wú)服務(wù)器。yml 立即提交:
服務(wù):aws-sample-applic在ion
提供者:
名稱(chēng):aws
運(yùn)行時(shí):nodejs12。X
功能:
你好:
處理程序:處理程序。你好
- 服務(wù): –我們的服務(wù)名稱(chēng)。
- 提供者: –包含提供程序?qū)傩缘膶?duì)象, 正如我們?cè)谶@里看到的 我們的提供商是AWS, 并且我們正在使用NodeJS運(yùn)行時(shí)。
- 功能: –該對(duì)象包含可部署到拉姆達(dá)的所有功能。 在這個(gè)例子中 我們只有一個(gè)命名為 你好 指向 處理程序。js 你好函數(shù)。
在繼續(xù)部署應(yīng)用程序之前,您必須在這里做一件重要的事情。 早一點(diǎn) 我們使用配置文件為AWS設(shè)置憑證(我們將其命名為 無(wú)服務(wù)器管理員)。 現(xiàn)在您要做的就是告訴 無(wú)服務(wù)器 配置以使用該配置文件和您所在的區(qū)域。 打開(kāi) 無(wú)服務(wù)器。yml 并在 提供者 在運(yùn)行時(shí)下面的屬性中輸入以下內(nèi)容:
概要文件:serverless-admin
地區(qū):us-east-2
到底, 我們應(yīng)該有這個(gè):
提供者:
名稱(chēng):aws
運(yùn)行時(shí):nodejs12。X
概要文件:serverless-admin
地區(qū):us-east-2
筆記: 要獲得該地區(qū), 一種簡(jiǎn)單的方法是登錄到控制臺(tái)后查找URL:示例:
現(xiàn)在,我們有了有關(guān)生成的模板的必要信息。 讓我們檢查一下如何在本地調(diào)用該函數(shù)并將其部署到AWS Lambda。
我們可以通過(guò)在本地調(diào)用該函數(shù)立即測(cè)試該應(yīng)用程序:
它調(diào)用函數(shù)(但僅在本地?。?并將輸出返回到控制臺(tái):
現(xiàn)在, 如果一切順利, 您可以嘗試將功能部署到 AWS Lambda。
所以, 這么復(fù)雜嗎? 不, 不是! 非常感謝 無(wú)服務(wù)器框架 這只是一個(gè)單行代碼:
等待一切完成, 可能要花幾分鐘 如果一切正常,您應(yīng)該以以下內(nèi)容結(jié)束:
現(xiàn)在,讓我們檢查一下AWS中發(fā)生了什么。 轉(zhuǎn)到Lambda(在“查找服務(wù)“ 類(lèi)型 Lambda), 你應(yīng)該看到你的 Lambda 函數(shù)已創(chuàng)建。
現(xiàn)在,您可以嘗試從AWS Lambda調(diào)用您的函數(shù)。 在終端類(lèi)型
它應(yīng)該返回與先前(當(dāng)我們?cè)诒镜販y(cè)試時(shí))相同的輸出:
您可以通過(guò)在 AWS Lambda 然后轉(zhuǎn)到“監(jiān)控方式”標(biāo)簽,然后點(diǎn)擊“在CloudWatch中查看日志。”。
您應(yīng)該在那里有一個(gè)日志。
現(xiàn)在, 您的應(yīng)用程序中仍然缺少一件事, 但是這是什么。。。? 出色地, 您沒(méi)有端點(diǎn)可以訪(fǎng)問(wèn)您的應(yīng)用, 因此,我們使用 AWS API網(wǎng)關(guān)。
你必須打開(kāi) 無(wú)服務(wù)器。yml 歸檔并首先清除注釋。 您需要添加一個(gè) 大事記 在我們的職能范圍內(nèi) http 財(cái)產(chǎn)。 這說(shuō)明了 無(wú)服務(wù)器框架 在部署應(yīng)用程序時(shí)創(chuàng)建一個(gè)API網(wǎng)關(guān)并將其附加到我們的Lambda函數(shù)。 我們的配置文件應(yīng)以以下結(jié)尾:
服務(wù):aws-sample-application
提供者:
名稱(chēng):aws
運(yùn)行時(shí):nodejs12。X
概要文件:serverless-admin
地區(qū):us-east-2
功能:
你好:
處理程序:處理程序。你好
事件:
-http:
路徑:/ 你好
方法:獲取
在 http 我們指定路徑和HTTP方法。
而已, 讓我們通過(guò)運(yùn)行再次部署我們的應(yīng)用程序
完成后, 一個(gè)新的東西應(yīng)該出現(xiàn)在輸出終端中, 這就是已經(jīng)創(chuàng)建的端點(diǎn):
讓我們打開(kāi)端點(diǎn):
您應(yīng)該看到您的函數(shù)正在執(zhí)行, 返回輸出, 以及有關(guān)請(qǐng)求的一些信息。 讓我們檢查一下Lambda函數(shù)中發(fā)生了什么變化。
打開(kāi) AWS Lambda, 然后點(diǎn)擊您的功能。
我們?cè)凇?strong>設(shè)計(jì)師”我們擁有的標(biāo)簽 API網(wǎng)關(guān) 附加到我們的Lambda和API端點(diǎn)。
偉大的! 您已經(jīng)創(chuàng)建了一個(gè)超級(jí)簡(jiǎn)單的無(wú)服務(wù)器應(yīng)用程序, 將其部署到AWS Lambda, 并測(cè)試了其功能。 還, 我們使用 AWS API網(wǎng)關(guān)。
迄今為止, 我們知道我們可以在本地調(diào)用函數(shù), 但是也, 我們可以使用serverless-offline插件離線(xiàn)運(yùn)行整個(gè)應(yīng)用程序。
該插件可在本地/開(kāi)發(fā)計(jì)算機(jī)上模擬AWS Lambda和API網(wǎng)關(guān)。 它啟動(dòng)一個(gè)HTTP服務(wù)器,該服務(wù)器處理請(qǐng)求并調(diào)用您的處理程序。
要安裝插件,請(qǐng)?jiān)趹?yīng)用目錄中運(yùn)行以下命令
然后在項(xiàng)目的 無(wú)服務(wù)器。yml 打開(kāi)文件并添加 外掛程式 財(cái)產(chǎn):
插件:
-無(wú)服務(wù)器離線(xiàn)
配置應(yīng)如下所示:
服務(wù):aws-sample-application
提供者:
名稱(chēng):aws
運(yùn)行時(shí):nodejs12。X
概要文件:serverless-admin
地區(qū):us-east-2
功能:
你好:
處理程序:處理程序。你好
事件:
-http:
路徑:/ 你好
方法:獲取
插件:
-無(wú)服務(wù)器離線(xiàn)
要檢查我們是否已成功安裝和配置插件運(yùn)行
您應(yīng)該看到以下內(nèi)容:
現(xiàn)在,在您項(xiàng)目的根目錄中, 運(yùn)行命令
如你看到的, an HTTP 服務(wù)器正在監(jiān)聽(tīng)端口3000, 您可以訪(fǎng)問(wèn)您的功能, 例如, 在這里,我們的hello函數(shù)具有http:// localhost:3000 / dev / hello。 首先,我們的回應(yīng)與 API網(wǎng)關(guān), 我們之前創(chuàng)建的。
到目前為止,您做得很好! 您使用Serverless擁有一個(gè)可以正常運(yùn)行的應(yīng)用程序。 讓我們擴(kuò)展我們的應(yīng)用程序并添加 大查詢(xún) 與其集成,以查看其工作方式以及集成方式。
大查詢(xún)是一種無(wú)服務(wù)器的軟件即服務(wù)(SaaS), 這是一種支持查詢(xún)的經(jīng)濟(jì)高效且快速的數(shù)據(jù)倉(cāng)庫(kù)。 在我們繼續(xù)將其與NodeJS應(yīng)用集成之前, 我們必須創(chuàng)建一個(gè)帳戶(hù), 因此,讓我們繼續(xù)。
轉(zhuǎn)到https:// cloud。谷歌。com并使用您的帳戶(hù)登錄, 如果您還沒(méi)有,請(qǐng)創(chuàng)建一個(gè)帳戶(hù)并繼續(xù)。
當(dāng)您登錄到Google Cloud Console時(shí), 您必須創(chuàng)建一個(gè)新項(xiàng)目。 點(diǎn)擊徽標(biāo)旁邊的三個(gè)點(diǎn),它將打開(kāi)一個(gè)模式窗口,您可以在其中選擇“新項(xiàng)目。”
輸入項(xiàng)目的名稱(chēng)。 我們將使用 big詢(xún)問(wèn)-eXample。 建立專(zhuān)案后, 導(dǎo)航 大查詢(xún) 使用抽屜:
當(dāng)大查詢(xún)載入時(shí), 在左側(cè), 您將看到該項(xiàng)目的數(shù)據(jù), 您可以訪(fǎng)問(wèn)的 以及公共數(shù)據(jù)集。 在此示例中,我們使用了公共數(shù)據(jù)集。 它被命名 covid19_ecdc:
播放數(shù)據(jù)集和可用表。 預(yù)覽其中的數(shù)據(jù)。 這是一個(gè)每小時(shí)更新一次的公共數(shù)據(jù)集,其中包含有關(guān) 新冠肺炎 全球數(shù)據(jù)。
我們必須創(chuàng)建一個(gè)IAM用戶(hù)-> 服務(wù)帳戶(hù)才能訪(fǎng)問(wèn)數(shù)據(jù)。 所以, 在菜單中 點(diǎn)擊 “ IAM和管理員,” 然后 “服務(wù)帳戶(hù)?!?/strong>
點(diǎn)擊 “創(chuàng)建服務(wù)帳戶(hù)” 按鈕, 輸入服務(wù)帳戶(hù)名稱(chēng),然后單擊 “創(chuàng)建?!?/strong> 下一個(gè), 去 ”服務(wù)帳戶(hù)權(quán)限”, 搜索并選擇, “ 大查詢(xún) Admin”。
點(diǎn)擊 ”繼續(xù),”這是最后一步, 在這里,您需要您的鑰匙, 因此,請(qǐng)點(diǎn)擊“按鍵并導(dǎo)出為 JSON格式。 將其安全地保存在某個(gè)地方, 我們稍后將需要它。 點(diǎn)擊 完畢 完成服務(wù)帳戶(hù)的創(chuàng)建。
現(xiàn)在, 我們將使用此處生成的憑據(jù)連接NodeJS BigQuery庫(kù)。
您需要安裝 BigQuery NodeJS庫(kù)可在您剛剛創(chuàng)建的項(xiàng)目中使用它。 在app目錄中運(yùn)行以下命令:
第一的, 通過(guò)運(yùn)行初始化npm
填寫(xiě)所有問(wèn)題,然后繼續(xù)安裝 BigQuery 圖書(shū)館:
在繼續(xù)更改函數(shù)處理程序之前, 我們必須攜帶先前創(chuàng)建的JSON文件中的私鑰。 我們將要使用 無(wú)服務(wù)器環(huán)境 變量來(lái)做到這一點(diǎn)。 您可以在此處獲取更多信息。
打開(kāi) 無(wú)服務(wù)器。yml, 和在 提供者 屬性添加 環(huán)境 像這樣的屬性:
環(huán)境:
PROJECT_ID:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / 配置 / bigquery-config。json):project_id}
CLIENT_EMAIL:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):client_email}
PRIVATE_KEY:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):private_key}
創(chuàng)建 PROJECT_ID, PRIVATE_KEY, 和 CLIENT_EMAIL 環(huán)境變量, 它具有與我們生成的JSON文件相同的屬性(小寫(xiě))。 我們已將其放置在 config 文件夾并命名 bigquery-config。json。
現(xiàn)在, 您應(yīng)該最終得到無(wú)服務(wù)器的支持。yml文件如下所示:
服務(wù):aws-sample-application
提供者:
名稱(chēng):aws
運(yùn)行時(shí):nodejs12。x
概要文件:serverless-admin
地區(qū):us-east-2
環(huán)境:
PROJECT_ID:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):project_id}
CLIENT_EMAIL:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):client_email}
PRIVATE_KEY:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):private_key}
功能:
你好:
處理程序:處理程序。hello
事件:
-http:
路徑:/ hello
方法:獲取
插件:
-無(wú)服務(wù)器離線(xiàn)
現(xiàn)在打開(kāi) 處理程序。js 并導(dǎo)入BigQuery庫(kù), 在文件的“使用嚴(yán)格”下方,添加以下行:
現(xiàn)在,我們必須告訴BigQuery庫(kù)該憑據(jù)。 以此目的, 創(chuàng)建一個(gè)實(shí)例化的新常量 BigQuery 具有憑據(jù):
const bigQueryClient = new BigQuery({
projectId:進(jìn)程。環(huán)境PROJECT_ID,
credentials: {
client_email:進(jìn)程。環(huán)境CLIENT_EMAIL,
private_key:進(jìn)程。環(huán)境PRIVATE_KEY
}
});
下一個(gè), 讓我們創(chuàng)建我們的BigQuery SQL查詢(xún)。 我們想檢索有關(guān)的最新信息 新冠肺炎 保加利亞的案例。 在繼續(xù)之前,我們正在使用BigQuery查詢(xún)編輯器對(duì)其進(jìn)行測(cè)試, 因此,我們創(chuàng)建了一個(gè)自定義查詢(xún):
SELECT * FROM`bigquery-public-data。covid19_ecdc。covid_19_geographic_distribution_worldwide` WHERE geo_id ='BG'ORDER BY date DESC LIMIT 1
好的! 現(xiàn)在,在我們的NodeJS應(yīng)用中實(shí)現(xiàn)它。
打開(kāi) 處理程序。js 并粘貼下面的代碼
const query ='SELECT * FROM`bigquery-public-data。covid19_ecdc。covid_19_geographic_distribution_worldwide` WHERE geo_id=\'BG' ORDER BY date DESC LIMIT 1';
const 選項(xiàng) ={
查詢(xún):查詢(xún)
}
const [job]=await bigQueryClient。createQueryJob(options);
const [行數(shù)]=await job。getQueryResults();
我們已經(jīng)創(chuàng)建了 query 和 options 常數(shù)。 然后,我們將查詢(xún)作為作業(yè)運(yùn)行,并從中檢索結(jié)果。
我們還更改返回處理程序,以返回查詢(xún)生成的行:
return {
statusCode:200,
正文:JSON。串化(
{
行數(shù)
},
空值,
2
),
};
讓我們看看完整的 處理程序。js:
“使用嚴(yán)格”;
const {BigQuery}=require('@google-cloud/bigquery');
const bigQueryClient = new BigQuery({
projectId:進(jìn)程。環(huán)境PROJECT_ID,
credentials: {
client_email:進(jìn)程。環(huán)境CLIENT_EMAIL,
private_key:進(jìn)程。環(huán)境PRIVATE_KEY
}
});
模塊。出口。你好=異步事件=> {
const query ='SELECT * FROM`bigquery-public-data。covid19_ecdc。covid_19_geographic_distribution_worldwide` WHERE geo_id=\'BG' ORDER BY date DESC LIMIT 1';
const options ={
查詢(xún):查詢(xún)
}
const [job]=await bigQueryClient.createQueryJob(options);
const [rows]=await job.getQueryResults();
return {
statusCode:200,
正文:JSON。串化(
{
rows
},
空值,
2
),
};
};
好的! 讓我們?cè)诒镜販y(cè)試我們的功能:
我們應(yīng)該看到輸出:
繼續(xù)部署應(yīng)用程序以通過(guò)HTTP端點(diǎn)對(duì)其進(jìn)行測(cè)試,因此運(yùn)行
等待它完成并打開(kāi)端點(diǎn)。 結(jié)果如下:
做得好! 現(xiàn)在,我們有了一個(gè)應(yīng)用程序,可以從BigQuery檢索數(shù)據(jù)并返回響應(yīng)! 最后,讓我們檢查一下它是否可以離線(xiàn)運(yùn)行。 跑
并加載本地端點(diǎn):
做得好。 我們幾乎快要結(jié)束了。 最后一步是稍微更改應(yīng)用程序和行為。 代替 AWS API網(wǎng)關(guān), 我們要使用 應(yīng)用程序負(fù)載均衡器. 讓我們?cè)谙乱徽轮辛私馊绾螌?shí)現(xiàn)這一目標(biāo)。
我們使用 AWS API網(wǎng)關(guān)。 在這一章當(dāng)中, 我們將介紹如何用替換API網(wǎng)關(guān) 應(yīng)用程序負(fù)載平衡器(阿爾巴)。
第一的, 讓我們來(lái)看看與API網(wǎng)關(guān)相比,應(yīng)用程序負(fù)載平衡器的工作原理:
在應(yīng)用程序負(fù)載均衡器中, 我們會(huì)映射特定的路徑(例如G。,/你好/)到目標(biāo)組–一組資源, 就我們而言 這 Lambda 功能。
目標(biāo)組只能具有一個(gè)與其關(guān)聯(lián)的Lambda函數(shù)。 每當(dāng)目標(biāo)群體需要回應(yīng)時(shí), 應(yīng)用程序負(fù)載平衡器向Lambda發(fā)送請(qǐng)求, 并且該功能必須使用響應(yīng)對(duì)象進(jìn)行響應(yīng)。 像API網(wǎng)關(guān)一樣, 這 ALB 處理所有HTTP請(qǐng)求。
ALB和 API網(wǎng)關(guān). 主要區(qū)別在于API網(wǎng)關(guān)僅支持HTTPS(SSL), 而ALB同時(shí)支持HTTP和HTTPS。
但, 讓我們來(lái)看看API網(wǎng)關(guān)的優(yōu)缺點(diǎn):
API網(wǎng)關(guān):
優(yōu)點(diǎn):
- 出色的安全性。
- 實(shí)施起來(lái)很簡(jiǎn)單。
- 部署迅速,一分鐘內(nèi)即可完成。
- 可擴(kuò)展性和可用性。
缺點(diǎn):
- 面對(duì)高流量時(shí),它可能會(huì)變得非常昂貴。
- 需要更多的編排, 這給開(kāi)發(fā)人員增加了一定的難度。
- 性能下降 由于API場(chǎng)景, 可能會(huì)影響應(yīng)用程序的速度和可靠性。
讓我們繼續(xù)創(chuàng)建ALB并切換到它,而不是使用API網(wǎng)關(guān):
應(yīng)用程序負(fù)載平衡器允許開(kāi)發(fā)人員配置和路由傳入的流量。 這是“彈性負(fù)載平衡?!?/strong> 它是客戶(hù)的單一聯(lián)系點(diǎn), 將傳入的應(yīng)用程序流量分布在多個(gè)目標(biāo)上, 例如多個(gè)區(qū)域中的EC2實(shí)例。
讓我們通過(guò)Amazon AWS中的UI創(chuàng)建應(yīng)用程序負(fù)載平衡器(ALB)。 登錄到“ AWS控制臺(tái)”中的“查找服務(wù)。“ 類(lèi)型 ”EC2”,然后找到“負(fù)載均衡器。”
點(diǎn)擊 ”創(chuàng)建負(fù)載均衡器,“ 在下面 ”應(yīng)用程序負(fù)載均衡器,“ 選擇 ”創(chuàng)建.”。 為了一個(gè)名字, 輸入您的選擇, 我們使用了“樣本相冊(cè)“選擇方案”面向互聯(lián)網(wǎng),” IP地址類(lèi)型 ipv4。
在 ”聽(tīng)眾”, 保留原樣– HTTP和端口80。 可以為HTTPS進(jìn)行配置, 盡管您必須先擁有一個(gè)域并進(jìn)行確認(rèn),然后才能使用HTTPS。
可用區(qū)–適用 VPC 從下拉列表中選擇一個(gè),然后將所有標(biāo)記為“可用區(qū)”:
點(diǎn)擊 ”下一步配置安全設(shè)置”,提示您改善負(fù)載均衡器的安全性。 點(diǎn)擊下一步。
在 ”第三步配置安全組“, at 分配安全組 選擇“創(chuàng)建新的安全組。”接下來(lái),點(diǎn)擊“下一步:配置路由。”。 在第4步中,如上面的屏幕截圖所示配置它:
點(diǎn)擊 下一個(gè), 下一個(gè), 和 創(chuàng)建.
回到負(fù)載均衡器并復(fù)制ARN,如屏幕截圖所示:
現(xiàn)在,我們必須更改無(wú)服務(wù)器。yml并刪除API Gateway http屬性。 在事件屬性下, 刪除http屬性并添加alb屬性。 函數(shù)對(duì)象應(yīng)如下所示結(jié)束:
你好:
處理程序:處理程序。hello
事件:
-白:
listenerArn:arn:aws:elasticloadbalancing:us-east-2:115129174008:listener / app / sample-alb / ae6e398a898c48e6 / 67ce6bf319d0513d
優(yōu)先級(jí):1
情況:
路徑:/ hello
保存文件并運(yùn)行用于部署應(yīng)用程序的命令
成功部署后,返回到AWS Load Balancers并找到您的DNS名稱(chēng),如屏幕截圖所示:
復(fù)制DNS名稱(chēng)并輸入路徑 /你好.
它應(yīng)該可以工作,并最終為您提供下載內(nèi)容的選項(xiàng):)。 迄今為止, 應(yīng)用程序負(fù)載平衡器運(yùn)行良好, 但是應(yīng)用程序需要為我們的最終用戶(hù)返回正確的響應(yīng)。 去做這個(gè), 打開(kāi) 處理程序。js 并將return語(yǔ)句替換為以下語(yǔ)句:
return {
statusCode:200,
狀態(tài)描述:“ 200 OK”,
headers: {
“ Content-Type”:“ application / json”
},
isBase64Encoded:否,
正文:JSON。串化(行)
}
ALB的區(qū)別在于響應(yīng)必須包含容器statusDescription, 標(biāo)頭 和isBase64Encoded。 請(qǐng)保存文件, 并再次部署, 但是這次不是整個(gè)應(yīng)用程序, 但反而, 只有我們已更改的功能。 運(yùn)行以下命令:
這條路, 我們只定義功能 hello 部署。 成功部署后, 再次訪(fǎng)問(wèn)帶有路徑的DNS名稱(chēng), 您應(yīng)該有適當(dāng)?shù)幕貞?yīng)!
偉大的! 現(xiàn)在,我們已用Application Load Balancer替換了API網(wǎng)關(guān)。 應(yīng)用程序負(fù)載平衡器比API網(wǎng)關(guān)便宜, 現(xiàn)在我們可以擴(kuò)展我們的應(yīng)用程序以滿(mǎn)足我們的需求, 特別是如果我們希望流量會(huì)更高。
我們使用 無(wú)服務(wù)器框架, AWS, and BigQuery, 并涵蓋了其主要用法。 無(wú)服務(wù)器是未來(lái), 而且使用它來(lái)處理應(yīng)用程序也毫不費(fèi)力。 繼續(xù)學(xué)習(xí)并深入研究無(wú)服務(wù)器框架,以探索其所有功能和秘密。 這也是一個(gè)非常簡(jiǎn)單易用的工具。
根據(jù)您的技術(shù)規(guī)范構(gòu)建定制的解決方案。 提交您的提案或請(qǐng)求一個(gè)完整的發(fā)現(xiàn)會(huì)話(huà),以確定您的要求并評(píng)估您的業(yè)務(wù)需求。
瀏覽更多:詢(xún)問(wèn)您的代理商發(fā)展教程
后端開(kāi)發(fā)人員
你好! 我是Dimitar Dimitrov,并且是DevriX后端開(kāi)發(fā)團(tuán)隊(duì)的成員。 我在銷(xiāo)售和產(chǎn)品管理方面有經(jīng)驗(yàn), 但是成為開(kāi)發(fā)人員一直是我兒時(shí)的夢(mèng)想。 所以, 在DevriX,我的夢(mèng)想成真了! 我喜歡與家人度過(guò)閑暇時(shí)光, 我也喜歡攝影 旅行和快車(chē)。 我也喜歡讀書(shū)(驚悚片, 小說(shuō)), 我最喜歡的作家之一是詹姆斯·羅林斯。