摘要:重新修改圖片大小然后上傳到亞馬遜,是最常見用于解釋事件驅(qū)動(dòng)的示例,計(jì)算即服務(wù)平臺(tái)的仍然保留了這個(gè)例子,如下圖一個(gè)圖片被上傳到一個(gè)桶中,觸發(fā)一個(gè)執(zhí)行函數(shù)的事件。無服務(wù)器架構(gòu)代表了一種非常不同的心態(tài)。
為什么一名開發(fā)者應(yīng)該使用AWS Lambda?簡(jiǎn)單一句話的說,AWS Lambda-是另外一種事件驅(qū)動(dòng)方式,“function-as-a-service”就像Microsoft Azure 的函數(shù)計(jì)算、谷歌云的函數(shù)計(jì)算、IBM 的OpenWhisk-simolify,實(shí)現(xiàn)了開發(fā)工作的任何事情從代碼和底層的堆棧的分離。開發(fā)者寫一個(gè)功能來響應(yīng)特定的事件(例如一項(xiàng)表單提交、創(chuàng)建一個(gè)網(wǎng)絡(luò)鏈接、給數(shù)據(jù)庫添加一行),上傳這些代碼,只有代碼運(yùn)行的時(shí)候才付費(fèi)。
在“無服務(wù)器計(jì)算如何改變應(yīng)用發(fā)展”一文中,我指出function-as-a-service(FaaS)如何運(yùn)行及如何啟用無服務(wù)器軟件架構(gòu)的具體要點(diǎn)。今天我們進(jìn)一步親自動(dòng)手在AWS Lambda上創(chuàng)建一個(gè)簡(jiǎn)單的函數(shù),然后討論一些常見的讓這項(xiàng)技術(shù)更強(qiáng)大的設(shè)計(jì)模式。
在2014年的AWSre:Invent大會(huì)上第一次宣布了最早的FaaS運(yùn)行態(tài),即AWSLambda。重新修改圖片大小然后上傳到亞馬遜S3,是最常見用于解釋事件驅(qū)動(dòng)的示例,計(jì)算即服務(wù)平臺(tái)的仍然保留了這個(gè)例子,如下圖:
一個(gè)圖片被上傳到一個(gè)S3桶中,觸發(fā)一個(gè)執(zhí)行Lambda函數(shù)的事件。在事件被觸發(fā)之前,函數(shù)以文件的形式保存到硬盤上,在工作任務(wù)下達(dá)之前沒有CPU資源的使用(或者預(yù)留)。一旦觸發(fā),函數(shù)進(jìn)入Lambda運(yùn)行時(shí)并且傳遞有關(guān)事件的信息。在這個(gè)例子中,函數(shù)從S3中讀取圖片文件到內(nèi)存中并且創(chuàng)建各種尺寸的縮略圖,然后寫入到第二個(gè)S3桶。
讓我們走進(jìn)一點(diǎn)看看,我們不必麻煩到具體實(shí)現(xiàn)修改圖片尺寸的代碼,但是,我們將創(chuàng)建實(shí)現(xiàn)這個(gè)示例所需的Lambda代碼的框架,以實(shí)現(xiàn)這個(gè)示例,創(chuàng)建觸發(fā)器,然后測(cè)試代碼。我們還將深入了解CloudWatch日志,以調(diào)試我遇到的一個(gè)小權(quán)限問題。
創(chuàng)建一個(gè)AWS lambda 函數(shù)和觸發(fā)器
創(chuàng)建一個(gè)AWS lambda 函數(shù)有許多方式,包括使用像Eclipse這樣的IDE工具,或者像無服務(wù)器框架這樣的工具,但是最容易的起步方式是使用AWS提供的藍(lán)圖(譯者注:英文原文為blueprint,本意為藍(lán)圖,亞馬遜這里應(yīng)該類似產(chǎn)品的代號(hào),在這里還是翻譯為藍(lán)圖)。如果我們到AWS Lambda的控制臺(tái),然后點(diǎn)擊創(chuàng)建新函數(shù),我們將得如下圖的界面:
我們將使用Node.js創(chuàng)建一個(gè)響應(yīng)S3事件的函數(shù),我們從運(yùn)行菜單選擇Node.js 6.10,并且進(jìn)入過濾器對(duì)話框:
在藍(lán)圖上單擊s3 -get-object,然后我們進(jìn)入到配置觸發(fā)器頁面:
在這里,我們?cè)O(shè)置將用于生成事件的桶t(infoworld.d .walkthrough),并設(shè)置事件類型,以在該桶中創(chuàng)建新對(duì)象時(shí)觸發(fā)。我們可以進(jìn)一步過濾事件,只有當(dāng)對(duì)象名稱中的某些前綴或后綴出現(xiàn)時(shí)才會(huì)觸發(fā),但是我們會(huì)跳過它,然后點(diǎn)擊復(fù)選框,在按下Next按鈕之前啟動(dòng)觸發(fā)器。
下一步將創(chuàng)建基于藍(lán)圖的函數(shù)的框架:
我們給我們的函數(shù)命名為infoworldWalkthrough。盡管我們稍后會(huì)更仔細(xì)地查看代碼,但你可以看到它自動(dòng)檢索引起觸發(fā)器的對(duì)象的信息。
在同樣的配置頁面下,我們需要做一些權(quán)限設(shè)置:
每個(gè)函數(shù)都必須有一個(gè)IAM角色,這樣我們就可以控制它對(duì)AWS資源的使用。在這里,我們要求系統(tǒng)創(chuàng)建一個(gè)名為infoworldRole的新角色,并將這個(gè)角色設(shè)置為S3的只讀權(quán)限。如果我們要實(shí)現(xiàn)完整的規(guī)范示例并生成縮略圖,我們還需要添加S3寫權(quán)限。但是,因?yàn)槲覀冎粫?huì)讀取觸發(fā)的S3對(duì)象的信息,所以只讀權(quán)限應(yīng)該是足夠的。
最后,我們需要注意一些高級(jí)設(shè)置:
最重要的項(xiàng)目是在頂部的部分,我們?cè)O(shè)置了內(nèi)存的數(shù)量和執(zhí)行超時(shí)。請(qǐng)記住,Lambda運(yùn)行時(shí)使用的是容器,這些容器預(yù)裝了不同的語言運(yùn)行時(shí)。當(dāng)事件觸發(fā)時(shí),它將把我們的代碼加載到其中一個(gè)容器中并執(zhí)行我們的函數(shù)。內(nèi)存和超時(shí)設(shè)置決定了容器的大小,以及我們的函數(shù)必須執(zhí)行多少時(shí)間。就我們的目的而言,128MB和3秒的默認(rèn)值將會(huì)很好。對(duì)于其他用例,這些設(shè)置通常被更改。按下Next我們到一屏,我們可以回顧我們已經(jīng)輸入的所有設(shè)置:
按下Create Function按鈕,將保存我們的輸入并在AWS Lambda中創(chuàng)建我們的函數(shù)。
檢查我們的AWS Lambda代碼
下面是藍(lán)圖為我們創(chuàng)建的默認(rèn)代碼:
在第14行和第15行,Lambda函數(shù)提取了bucket的名稱和引發(fā)觸發(fā)器的對(duì)象名稱(也稱為鍵)。然后它使用S3 API獲取關(guān)于該對(duì)象的更多信息,并(如果順利的話)輸出其內(nèi)容類型。我們還沒有這樣做,但是我們可以很容易地包含代碼,然后在對(duì)象中讀取,并相應(yīng)地生成縮略圖。
測(cè)試我們的AWS Lambda代碼
現(xiàn)在讓我們到S3控制臺(tái)中,觀察下桶的問題,在這個(gè)例子中,開始完全是空的:
然后上傳一張PNG的圖片到這個(gè)桶:
然后……到底是什么?
從S3控制臺(tái)上,不清楚我們的函數(shù)是否執(zhí)行了,如果你進(jìn)入Lambda控制臺(tái),你將會(huì)發(fā)現(xiàn)類似的信息缺乏。然而,每個(gè)Lambda函數(shù)都通過CloudWatch記錄信息,因此如果我們檢查CloudWatch,我們就會(huì)看到我們現(xiàn)在有了一個(gè)新的日志組:
檢查這個(gè)日志顯示對(duì)S3 bucket的訪問被拒絕:
出于某種神秘的原因,當(dāng)我們的代碼試圖讀取關(guān)于S3對(duì)象的信息時(shí),它被拒絕訪問該數(shù)據(jù)。但是為什么呢?我們是否設(shè)置了IAM角色,以便我們的函數(shù)在S3存儲(chǔ)桶上具有只讀權(quán)限?讓我們?cè)贗AM控制臺(tái)進(jìn)行雙重檢查:
是的,事實(shí)上這個(gè)角色有一個(gè)策略。讓我們來看看這個(gè)策略:
奇怪的是,我們有在CloudWatch中創(chuàng)建日志的權(quán)限,但是在任何地方都沒有提到S3。不知何故,我們的S3只讀permissons策略沒有接受。讓我們解決這個(gè)問題。
如果我們按下附加策略按鈕,我們將看到下面這個(gè)屏幕:
通過選擇AmazonS3FullAccess選項(xiàng)并按下附加策略按鈕,我們應(yīng)該提供所需的所有權(quán)限。
這次我們將使用內(nèi)置的測(cè)試鉤子,而不是像以前那樣手動(dòng)地將PNG文件添加到S3 bucket中來測(cè)試函數(shù)。回到主頁,我們的函數(shù):
現(xiàn)在,如果我們按下測(cè)試按鈕,我們將會(huì)得到一個(gè)對(duì)話框,讓我們從許多例事件中進(jìn)行選擇。我們想測(cè)試S3 put。我們需要在S3 key和bucketname字段中編輯值,以對(duì)應(yīng)我們的圖像文件和bucket的名稱:
在這里可以設(shè)置的事件中有各種其他字段,但是因?yàn)槲覀冎来a只查看鍵和桶名,所以我們可以忽略其余部分。按下保存和測(cè)試按鈕將觸發(fā)事件并導(dǎo)致我們的函數(shù)執(zhí)行。不像上次,當(dāng)我們通過S3控制臺(tái)觸發(fā)事件時(shí),這次我們看到了實(shí)時(shí)反饋。我們還得到了CloudWatch日志的相關(guān)部分,在Lambda UI中:
您可以看到我們的代碼執(zhí)行并確定了內(nèi)容類型。
使用IDE集成工具和命令行工具Serverless框架可以大幅加速這個(gè)過程,但是這個(gè)例子已經(jīng)展示了創(chuàng)建具有正確權(quán)限的函數(shù)所涉及的基本步驟,搭建事件,通過監(jiān)測(cè)和調(diào)試代碼,以及兩種不同的方式觸發(fā)事件的函數(shù)進(jìn)行測(cè)試。
讓我們總結(jié)一下一些常見的Lambda設(shè)計(jì)模式。
AWS Lambda設(shè)計(jì)模式
已經(jīng)出現(xiàn)了許多用于服務(wù)器應(yīng)用架構(gòu)的設(shè)計(jì)模式。在12月的AWS re:Invent大會(huì)上,一個(gè)名為“無服務(wù)器架構(gòu)模式和較佳實(shí)踐”的會(huì)議強(qiáng)調(diào)了四個(gè)這樣的模式。在這里,我將介紹我的兩個(gè)最喜歡的內(nèi)容,因?yàn)樗鼈兇砣魏蜗胍_始使用無服務(wù)器架構(gòu)的組織的甜蜜果實(shí)。
首先,很容易構(gòu)建web應(yīng)用程序,使用S3和CloudFront用于構(gòu)建靜態(tài)內(nèi)容,并使用Lambda和DynamoDB支持的API網(wǎng)關(guān)以滿足動(dòng)態(tài)需求:
這種基本模式可以與多個(gè)級(jí)別的安全緊密聯(lián)系在一起:
對(duì)于所有的用戶來說,web應(yīng)用程序的大部分內(nèi)容都是只讀的,并且這種模型可以從S3和CloudWatch中得到很便宜的服務(wù)。被授權(quán)的數(shù)據(jù)可以利用IAM鉤子進(jìn)入API網(wǎng)關(guān),以及IAM角色,以多帶帶的Lambda函數(shù)與一個(gè)DynamoDB交互。
我的第二個(gè)最喜歡的用例,一個(gè)由CapitalOne實(shí)現(xiàn)的云托管項(xiàng)目,即使用Lambda建立自動(dòng)化掛鉤。在CapitalOne的實(shí)現(xiàn)中,CloudWatch日志事件觸發(fā)Lambda函數(shù)對(duì)特定于Capital One的遵從性和策略規(guī)則進(jìn)行檢查。當(dāng)發(fā)現(xiàn)潛在問題時(shí),該函數(shù)會(huì)通過Amazon SNS生成通知,可以將其配置為發(fā)送SMS消息、電子郵件和其他一些機(jī)制,以提醒正確的人注意那些需要注意的違反政策的行為。
我喜歡這種自動(dòng)化模式,因?yàn)樗鼮楝F(xiàn)有過程增加了巨大的價(jià)值,而不會(huì)以任何方式干擾這個(gè)過程。系統(tǒng)的遵從性是自動(dòng)化的,不涉及被監(jiān)視的系統(tǒng)。和之前的模式一樣,它為組織提供了一種簡(jiǎn)單的方法,讓企業(yè)能夠輕松使用無服務(wù)器計(jì)算。
服務(wù)之外的思考
正如我們所看到的,即使沒有IDE或命令行工具,搭建Lambda函數(shù)、配置事件、應(yīng)用安全策略以及測(cè)試出結(jié)果是小菜一碟,微軟、谷歌和IBM的FaaS運(yùn)行態(tài)也同樣輕松。此外,更好的設(shè)計(jì)模式正在出現(xiàn),這無疑將為工具的多次使用更好的鋪平道路。
無服務(wù)器架構(gòu)代表了一種非常不同的心態(tài)。代碼塊更小,降低成本,只有在觸發(fā)時(shí)才執(zhí)行它們,它們通過松散耦合的事件而不是靜態(tài)定義的api來綁定在一起。服無務(wù)器提供了比以前更快速的開發(fā)周期,并且通過簡(jiǎn)單的自動(dòng)化和web應(yīng)用程序設(shè)計(jì)模式來繪制,很容易以低風(fēng)險(xiǎn)開始。
本文翻譯源:
https://www.infoworld.com/article/3204669/application-development/get-started-with-aws-lambda.html
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/3525.html
摘要:重新修改圖片大小然后上傳到亞馬遜,是最常見用于解釋事件驅(qū)動(dòng)的示例,計(jì)算即服務(wù)平臺(tái)的仍然保留了這個(gè)例子,如下圖一個(gè)圖片被上傳到一個(gè)桶中,觸發(fā)一個(gè)執(zhí)行函數(shù)的事件。無服務(wù)器架構(gòu)代表了一種非常不同的心態(tài)。 為什么一名開發(fā)者應(yīng)該使用AWS Lambda?簡(jiǎn)單一句話的說,AWS Lambda-是另外一種事件驅(qū)動(dòng)方式,function-as-a-service就像Microsoft Azure 的函數(shù)計(jì)算...
摘要:有些人認(rèn)為,無服務(wù)器將最終成為大多數(shù)軟件構(gòu)建的一種方式。例如下周在舊金山舉行的大會(huì)上,無服務(wù)器將成為個(gè)分會(huì)場(chǎng)主題之一。無服務(wù)器計(jì)算不僅將從根本上改變后端計(jì)算的經(jīng)濟(jì)性,也將成為分布式計(jì)算未來的核心,微軟首席執(zhí)行官在去年的微軟大會(huì)上這樣表示。在每天發(fā)送超過15億條信息、每月與超過10億消費(fèi)者互動(dòng)的過程中,Braze公司使用了大量的云基礎(chǔ)設(shè)施。但是Braze的業(yè)務(wù)是不可預(yù)測(cè)的,因此對(duì)計(jì)算資源的需求...
摘要:原文作者無服務(wù)器架構(gòu)是指一個(gè)應(yīng)用大量依賴第三方服務(wù)后端即服務(wù),,簡(jiǎn)稱,或者把代碼交由托管的短生命周期的容器中執(zhí)行函數(shù)即服務(wù),,簡(jiǎn)稱。這些服務(wù)最早被稱為,下文將對(duì)此簡(jiǎn)稱為。是目前的熱門實(shí)現(xiàn)之一,下文將對(duì)此簡(jiǎn)稱為。它同樣經(jīng)由網(wǎng)關(guān)暴露給外部使用。 譯注: 為了便于對(duì)照參考,Serverless、BaaS 等術(shù)語文中不做翻譯。 原文很長(zhǎng),這里分成上下兩篇。翻譯過程在 GitHub 上進(jìn)行。...
摘要:不知人們是否了解云服務(wù),但很確定到目前為止,每個(gè)專業(yè)人士都聽說過流行的亞馬遜網(wǎng)絡(luò)服務(wù)產(chǎn)品,如彈性云計(jì)算和簡(jiǎn)單存儲(chǔ)服務(wù)。年月,亞馬遜公司增加了大量新功能,并重新推出了服務(wù)。年月,亞馬遜為媒體公司推出了五個(gè)多媒體服務(wù),全部采用品牌命名。不知人們是否了解AWS云服務(wù),但很確定到目前為止,每個(gè)IT專業(yè)人士都聽說過流行的亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)產(chǎn)品,如彈性云計(jì)算(EC2)和簡(jiǎn)單存儲(chǔ)服務(wù)(S3)。但是,...
摘要:盡管公有云占據(jù)了云計(jì)算市場(chǎng)大部份的份額,但私有云和混合云市場(chǎng)也在不斷壯大,有專家預(yù)測(cè),混合云在年后將會(huì)變得越來越重要。預(yù)計(jì)年是私有云和混合云供應(yīng)商談?wù)撊绾卧谶@些環(huán)境中引入機(jī)器學(xué)習(xí)和功能的一年。 盡管公有云占據(jù)了云計(jì)算市場(chǎng)大部份的份額,但私有云和混合云市場(chǎng)也在不斷壯大,有專家預(yù)測(cè),混合云在2018年后將會(huì)變得越來越重要。 據(jù)IDC公司報(bào)告,今年傳統(tǒng)數(shù)據(jù)中心占IT基礎(chǔ)設(shè)施支出的62%,其中有...
閱讀 1949·2023-04-26 01:59
閱讀 3264·2021-10-11 11:07
閱讀 3295·2021-09-22 15:43
閱讀 3374·2021-09-02 15:21
閱讀 2549·2021-09-01 10:49
閱讀 901·2019-08-29 15:15
閱讀 3089·2019-08-29 13:59
閱讀 2829·2019-08-26 13:36