Hello大家好,我們今天繼續(xù)討論AWS Lambda的內(nèi)容。
Lambda函數(shù)的版本
Lambda函數(shù)的版本和別名是輔助資源,我們可以通過(guò)創(chuàng)建這些資源管理函數(shù)的部署和調(diào)用。
首先,讓我們來(lái)看一下Lambda 函數(shù)版本的概念。您可以使用版本來(lái)管理函數(shù)的部署。例如,您現(xiàn)在生產(chǎn)環(huán)境上運(yùn)行了一個(gè)函數(shù),假設(shè)是V1版本,您可以發(fā)布一個(gè)這個(gè)函數(shù)的新版本,比如發(fā)布V2版本,以用于新版本測(cè)試,而不會(huì)影響生產(chǎn)環(huán)境V1版本的用戶。
這里有一個(gè)** L A T E S T 的概念, LATEST的概念, LATEST的概念,LATEST您可以理解成它是最新的“未發(fā)布版本”**,當(dāng)您創(chuàng)建和使用Lambda函數(shù)時(shí),您就是在處理$ LATEST版本,您可以一直修改$LATEST直到您滿意為止。這是一個(gè)可變函數(shù),因?yàn)槟梢詫?duì)其進(jìn)行修改。
然后當(dāng)修改完成后,您需要發(fā)布來(lái)使用Lambda函數(shù),這個(gè)時(shí)候您就需要?jiǎng)?chuàng)建一個(gè)版本,比如V1版本。您每次發(fā)布函數(shù)時(shí),Lambda 都會(huì)為函數(shù)創(chuàng)建一個(gè)新版本。
在您發(fā)布版本后,函數(shù)的代碼和大多數(shù)設(shè)置都會(huì)被鎖定,也就是不可改變的了,這也是為了給該版本的用戶維持一致的體驗(yàn),您無(wú)法在進(jìn)行修改。比如一旦發(fā)布V1版本,V1版本就無(wú)法在修改了。
修改函數(shù)后可以通過(guò)將其發(fā)布為新的版本以投入使用,比如V2、V3等。每一個(gè)版本都有各自的ARN,所以您可以單獨(dú)調(diào)用V1版本,也可以單獨(dú)調(diào)用V2版本,或者$LATEST。
那函數(shù)版本都包括什么呢?**它包括您的代碼以及所有關(guān)聯(lián)的依賴項(xiàng),調(diào)用函數(shù)的運(yùn)行環(huán)境,函數(shù)的設(shè)置以及環(huán)境變量等等。**發(fā)布函數(shù)版本之后,這些都是不可變的,比如如果您想調(diào)整內(nèi)存,您需要?jiǎng)?chuàng)建一個(gè)新版本如V2,然后進(jìn)行發(fā)布。
您可以訪問每個(gè)版本的Lambda函數(shù),當(dāng)您進(jìn)行金絲雀測(cè)試時(shí)會(huì)非常有幫助。
Lambda 函數(shù)別名
接下來(lái)我們來(lái)討論Lambda 函數(shù)別名,aliases。
Lambda 別名類似于指向特定函數(shù)版本的指針,您可以定義任何您想要使用的別名,比如一些比較常見的別名例子為:開發(fā)、測(cè)試、生成環(huán)境的別名。您可以定義這些別名然后分別將其指向不同的Lambda版本。
每個(gè)別名都有唯一的 ARN,而且別名是可以更改指向的,可以更新別名以便指向函數(shù)的新的或其他版本。
我們舉個(gè)的例子,組織一般都會(huì)分為開發(fā)、生產(chǎn)、測(cè)試環(huán)境,比如對(duì)應(yīng)我們的3個(gè)函數(shù)版本,LATEST、V1和V2。然后:
我們可以創(chuàng)建一個(gè)DEV的別名,將其指向LATEST版本;
在創(chuàng)建一個(gè)TEST別名,將其指向V2版本;
以及創(chuàng)建一個(gè)PROD別名,將其指向V1版本。
以上三個(gè)別名的ARN都是不同的,這樣如果有用戶訪問DEV別名的ARN時(shí),就會(huì)被重定向到LATEST函數(shù)版本;訪問TEST別名時(shí),就會(huì)重定向到V2版本,PROD別名同理。
對(duì)于用戶的角度,可以訪問DEV,TEST和PROD三個(gè)別名,重定向到對(duì)應(yīng)的函數(shù)版本;然后我們可以更改這三個(gè)別名指向我們希望的其他的函數(shù)版本。
使用別名可以支持藍(lán)綠部署,可以為L(zhǎng)ambda函數(shù)分配權(quán)重,這樣的話訪問別名之后就不只是對(duì)應(yīng)一個(gè)函數(shù)版本了。
比如訪問PROD別名時(shí),可以配置將訪問的95%的流量指向V1,也就是生成環(huán)境的穩(wěn)定版本;然后將5%的訪問流量切到V2版本,用于測(cè)試新版本。這是通過(guò)配置權(quán)重來(lái)實(shí)現(xiàn)的。
函數(shù)別名與API網(wǎng)關(guān)
我們繼續(xù)。
一般情況下,新版本發(fā)布都會(huì)遵循三個(gè)階段,開發(fā)階段、測(cè)試階段及發(fā)布至生產(chǎn)環(huán)境。新版本會(huì)在開發(fā)環(huán)境做測(cè)試,如果測(cè)試確認(rèn)沒問題之后,會(huì)先發(fā)布到測(cè)試環(huán)境,通常測(cè)試環(huán)境會(huì)導(dǎo)入生成環(huán)境的部分訪問流量做測(cè)試,如果測(cè)試確認(rèn)沒問題,在慢慢將更多的流量導(dǎo)入測(cè)試環(huán)境的新版本,最終完成新版本的發(fā)布。
接下來(lái)我們拿一個(gè)API網(wǎng)關(guān)的環(huán)境,來(lái)說(shuō)明下針對(duì)不同的階段函數(shù)別名的運(yùn)用:
這里有一個(gè)開發(fā)Stage(開發(fā)階段),指向DEV的別名,然后向$LATEST的Lambda函數(shù)路由100%的流量。還有一個(gè)測(cè)試Stage(測(cè)試階段),指向TEST別名,向Lambda函數(shù)的V2版本路由100%的流量。生產(chǎn)Stage(生產(chǎn)階段),指向PROD別名,向Lambda函數(shù)的V1版本路由100%的流量。
V2是我們的新版本,假設(shè)目前內(nèi)部已經(jīng)測(cè)試確認(rèn)了,我們需要將V2版本發(fā)布到生產(chǎn)環(huán)境,也就是PROD別名。可以通過(guò)配置權(quán)重將生產(chǎn)的訪問量慢慢切換到V2版本。比如配置PROD別名,將95%的流量指向V1,然后將5%的流量指向V2版本。
我們?cè)谶@個(gè)例子中要注意的是,上面這個(gè)切換版本的步驟,是發(fā)生在Lambda別名級(jí)別,我們調(diào)整的是PROD別名;
在API網(wǎng)關(guān)這一側(cè),指向的別名一直沒有改變,我們不必修改API網(wǎng)關(guān)配置。
所以,在上面這種或者類似的場(chǎng)景中,如果我們需要部署和切換不同的函數(shù)版本,使用函數(shù)別名來(lái)進(jìn)行配置的話就會(huì)非常的方便;當(dāng)有新的函數(shù)版本時(shí),我們只需要通過(guò)別名配置將流量慢慢切換到新的函數(shù)版本,而不需要每次發(fā)布時(shí)調(diào)整API網(wǎng)關(guān)的配置。
通過(guò)這個(gè)例子,希望大家對(duì)于函數(shù)別名的功能和使用場(chǎng)景有所了解,發(fā)布新版本時(shí),使用別名只需要調(diào)整別名的指向,而不需要調(diào)整其前面的,對(duì)于上面這個(gè)例子的API網(wǎng)關(guān)的配置。
Lambda與CodeDeploy
最后,我們來(lái)看一下 Lambda和CodeDeploy。
CodeDeploy可以幫助您實(shí)現(xiàn)自動(dòng)化的Lambda別名的流量轉(zhuǎn)移功能,也就是Traffic shifting功能,如果您使用SAM無(wú)服務(wù)器應(yīng)用程序模型來(lái)創(chuàng)建,這個(gè)功能是直接內(nèi)置的。
我們來(lái)看一下整個(gè)的流程:這里有一個(gè)PROD別名,以及兩個(gè)函數(shù)版本,V1和V2。V1是當(dāng)前線上的版本,V2是您剛剛發(fā)布的新版本。
假設(shè)目前線上都是在訪問函數(shù)的V1版本,而V2版本0%沒有訪問量,您希望將V1的訪問量慢慢轉(zhuǎn)移到新版本V2,這樣完成新版本的上線使用。
注意這里說(shuō)的不是手動(dòng)一下切到V2版本,而是通過(guò)配置,自動(dòng)將當(dāng)前V1版本的100%的訪問量,慢慢的按一定百分比轉(zhuǎn)移到新版本V2上。逐步將訪問量切換到新版本而不是立刻切換,也是為了當(dāng)新版本有問題時(shí)將影響降到最低。
CodeDeploy就可以幫您實(shí)現(xiàn)這個(gè)過(guò)程。
那多久且每次轉(zhuǎn)移多少百分比的訪問量到新的版本呢?這就需要定義部署策略,我們來(lái)看一下都有哪些策略: 第一種部署策略為線性的方式,也就是您可以定義每隔N分鐘,增加10%的流量,直到100%。比如,Linear10PercentEvery1Minute,定義每1分鐘轉(zhuǎn)移10%的訪問量到V2版本直到100% 。以及 Linear10PercentEvery2Minutes,定義每2分鐘轉(zhuǎn)移10%的訪問量到V2版本直到100%, 或者配置為每3分鐘以及每10分鐘轉(zhuǎn)移10%流量直到100%,以上這些就是線性的方式。
第二種部署的策略為金絲雀方式,您可以選擇:Canary10Percent5Minutes ,5分鐘切換10%的流量,然后如果沒有收到任何錯(cuò)誤,切換剩下的所有流量到新版本V2。Canary10Percent10Minutes,或者10分鐘切換10%的流量,然后如果沒有收到任何錯(cuò)誤,切換剩下的所有流量到新版本V2。以及定義15、30分鐘,切換10%的流量,然后在切換剩下的所有流量到新版本V2。
第三種部署的策略為All-at-once,這種方式就不會(huì)在按照一定的百分比切換訪問量了,而是將所有的流量從原來(lái)的版本一次性切換到新的版本。
最后我們可以配置Hooks掛鉤,在流量轉(zhuǎn)換開始到新版本之前 和 流量轉(zhuǎn)換完成后運(yùn)行健康檢查。
比如我們?nèi)绻渲昧宿D(zhuǎn)移前的hook,在部署V2版本時(shí)測(cè)試此版本函數(shù)是否正常;然后當(dāng)流量轉(zhuǎn)移到新版本V2之后,還會(huì)運(yùn)行一個(gè)流量轉(zhuǎn)移后的Hook,確保一切正常,當(dāng)測(cè)試時(shí)發(fā)現(xiàn)問題時(shí),自動(dòng)對(duì)版本進(jìn)行回滾,所以這個(gè)Hooks掛鉤的作用是非常大的。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-722951.html
好的,以上就是我們今天課時(shí)的內(nèi)容,我們討論了AWS Lambda – 第四部分的內(nèi)容,希望能夠給大家?guī)?lái)幫助。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-722951.html
到了這里,關(guān)于AWS Lambda – 函數(shù)版本,別名,API網(wǎng)關(guān),CodeDeploy協(xié)同的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!