AWS 开源并扩展无服务器应用程序模型(SAM)实现

  • Steffen Opel
  • 谢丽

2018 年 5 月 14 日

话题:AWSDevOps语言 & 开发

看新闻很累?看技术新闻更累?试试下载 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 CodePipelineAWS 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

AWSDevOps语言 & 开发