Amazon Web Services(AWS)開(kāi)源了其無(wú)服務(wù)器應用程序模型(SAM)實(shí)現,并增加了一個(gè)面向CloudWatch Logs訂閱過(guò)濾器的新事件源。該版本全面擴展了通過(guò)Amazon API網(wǎng)關(guān)配置和部署REST API的選項,其中包括支持CORS頭、區域端點(diǎn)和二進(jìn)制媒體類(lèi)型。
無(wú)服務(wù)器應用程序模型(SAM)是一個(gè)開(kāi)源規范,擴展了AWS的基礎設施即代碼服務(wù)CloudFormation,有特定的資源類(lèi)型,“使用一種簡(jiǎn)潔的語(yǔ)法定義無(wú)服務(wù)器應用程序”。SAM實(shí)現了目前兩種可用的CloudFormation轉換中的一種,旨在“通過(guò)精簡(jiǎn)AWS基礎設施即代碼的表達式來(lái)簡(jiǎn)化模板編寫(xiě)”。當模板指定了AWS::Serverless轉換時(shí),在使用處理過(guò)的模板創(chuàng )建或更新棧之前,CloudFormation會(huì )把更簡(jiǎn)潔的SAM語(yǔ)法擴展成平常的CloudFormation資源類(lèi)型。
編寫(xiě)SAM應用程序要借助SAM Local CLI,它讓你可以“在本地測試函數,從SAM模板啟動(dòng)一個(gè)本地API網(wǎng)關(guān),驗證SAM模板,生成各種事件源的樣例負載”(之前報道過(guò))。然后,開(kāi)發(fā)人員可以使用AWS CodePipeline、AWS CodeBuild、CloudFormation和AWS CodeDeploy持續地構建,并通過(guò)各種金絲雀或線(xiàn)性流量切換配置逐步部署SAM應用程序。還可以通過(guò)無(wú)服務(wù)器應用程序庫以及AWS SAM應用程序打包、發(fā)現和配置平臺(之前報道過(guò))共享兼容的解決方案。
雖然SAM規范從一開(kāi)始就是開(kāi)源的,但AWS團隊必須閉門(mén)實(shí)現其認可的每一個(gè)請求特性,F在,AWS開(kāi)源了將SAM轉換成平常的CloudFormation模板的代碼,降低了社區的參與門(mén)檻,這樣,任何人都可以實(shí)現新特性,并通過(guò)pull request和AWS團隊合作,加速驗收。Samtranslator的源代碼遵循Apache 2.0許可協(xié)議,已經(jīng)提供的aws-sam-translator PyPI程序包也會(huì )讓無(wú)服務(wù)器社區更容易“集成其他框架和部署提供程序”。
除了開(kāi)源SAM實(shí)現外,SAM 1.5版本還增加了一個(gè)面向Amazon CloudWatch Logs的新事件源,當日志消息與特定的過(guò)濾器模式相匹配時(shí),會(huì )觸發(fā)一個(gè)Lambda函數:
# [...]Resources: LogsProcessor: Type: AWS::Serverless::Function Properties: CodeUri: . Handler: lambda_function.lambda_handler Runtime: python3.6 Events: HelloInfoQSubscription: Type: CloudWatchLogs Properties: LogGroupName: !Ref CloudWatchLambdaLogsGroup FilterPattern: Hello InfoQ
之前的SAM 1.4版本提供了人們強烈要求的“跨源資源分享(Cross-Origin Resource Sharing,縮寫(xiě)為CORS)”Amazon API網(wǎng)關(guān)支持,現在,只需簡(jiǎn)單地指定一個(gè)域(還有一個(gè)更細粒度的CORS配置)就可以啟用。它還集成了新的API網(wǎng)關(guān)區域端點(diǎn)、二進(jìn)制媒體類(lèi)型、日志、指標、緩存TTL設置、AWS Lambda函數并發(fā)以及各種小改進(jìn)和Bug修復。下面的模板節選說(shuō)明了通過(guò)Globals段支持SAM API網(wǎng)關(guān)的簡(jiǎn)潔性:
---Transform: AWS::Serverless-2016-10-31Globals: Api: # 允許www.infoq.com調用這個(gè)API——SAM將自動(dòng) # 添加AllowMethods,這是該API使用的HTTP方法的列表 Cors: "'https://www.infoq.com'" EndpointConfiguration: REGIONAL BinaryMediaTypes: # 在部署時(shí)和image/gif、image/png等效 - image~1gif - image~1png# [...]
無(wú)服務(wù)器應用程序模型的源代碼包含一份開(kāi)發(fā)指南、一份簡(jiǎn)要設計概述和貢獻準則。其中還包含生成的CloudFormation資源和相關(guān)的CloudFormation兼容性。截至目前,SAM終端用戶(hù)支持通過(guò)AWS Lambda論壇提供,后續會(huì )轉移到新的AWS無(wú)服務(wù)器應用程序庫論壇。有興趣與SAM社區及團隊合作的開(kāi)發(fā)人員可以加入AWS SAM開(kāi)發(fā)者頻道(#samdev)。