看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!
近日,Amazon Web Services(AWS)开源了其无服务器应用程序模型(SAM)实现,并增加了一个面向CloudWatch Logs 订阅过滤器的新事件源。该版本全面扩展了通过Amazon API 网关配置和部署REST API 的选项,其中包括支持CORS 头、区域端点和二进制媒体类型。
无服务器应用程序模型(SAM)是一个开源规范,扩展了AWS 的基础设施即代码服务 CloudFormation ,有特定的资源类型,“使用一种简洁的语法定义无服务器应用程序”。SAM 实现了目前两种可用的 CloudFormation 转换中的一种,旨在“通过精简 AWS 基础设施即代码的表达式来简化模板编写”。当模板指定了 AWS::Serverless 转换时,在使用处理过的模板创建或更新栈之前,CloudFormation 会把更简洁的 SAM 语法扩展成平常的 CloudFormation 资源类型。
编写 SAM 应用程序要借助 SAM Local CLI,它让你可以“在本地测试函数,从 SAM 模板启动一个本地 API 网关,验证 SAM 模板,生成各种事件源的样例负载”(之前报道过)。然后,开发人员可以使用 AWS CodePipeline 、 AWS CodeBuild 、CloudFormation 和 AWS CodeDeploy 持续地构建,并通过各种金丝雀或线性流量切换配置逐步部署SAM 应用程序。还可以通过无服务器应用程序库以及AWS SAM 应用程序打包、发现和配置平台(之前报道过)共享兼容的解决方案。
虽然SAM 规范从一开始就是开源的,但AWS 团队必须闭门实现其认可的每一个请求特性。现在,AWS 开源了将SAM 转换成平常的CloudFormation 模板的代码,降低了社区的参与门槛,这样,任何人都可以实现新特性,并通过pull request 和AWS 团队合作,加速验收。 Samtranslator 的源代码遵循 Apache 2.0 许可协议,已经提供的 aws-sam-translator PyPI 程序包也会让无服务器社区更容易“集成其他框架和部署提供程序”。
除了开源 SAM 实现外, SAM 1.5 版本还增加了一个面向 Amazon CloudWatch Logs 的新事件源,当日志消息与特定的过滤器模式相匹配时,会触发一个 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,缩写为CORS)” Amazon API 网关支持,现在,只需简单地指定一个域(还有一个更细粒度的 CORS 配置)就可以启用。它还集成了新的 API 网关区域端点、二进制媒体类型、日志、指标、缓存TTL 设置、AWS Lambda函数并发以及各种小改进和Bug 修复。下面的模板节选说明了通过 Globals 段支持 SAM API 网关的简洁性:
--- Transform: AWS::Serverless-2016-10-31 Globals: Api: # 允许 www.infoq.com 调用这个 API——SAM 将自动 # 添加 AllowMethods,这是该 API 使用的 HTTP 方法的列表 Cors: "'https://www.infoq.com'" EndpointConfiguration: REGIONAL BinaryMediaTypes: # 在部署时和 image/gif、image/png 等效 - image~1gif - image~1png # [...]
无服务器应用程序模型的源代码包含一份开发指南、一份简要设计概述和贡献准则。其中还包含生成的CloudFormation 资源和相关的 CloudFormation 兼容性。截至目前,SAM 终端用户支持通过 AWS Lambda 论坛提供,后续会转移到新的 AWS 无服务器应用程序库论坛。有兴趣与 SAM 社区及团队合作的开发人员可以加入 AWS SAM 开发者频道(#samdev)。
查看英文原文: AWS Open Sources and Expands Serverless Application Model (SAM) Implementation
评论