使用Application Composer可视化无服务器应用

AWS Application Composer 是一个图形化的设计器,使用多个AWS服务创建无服务器应用。开发者新创建无服务器应用时,会面临一个学习曲线,需要学习很多AWS服务。他们需要学习这些服务的配置,然后写IaC来创建应用

需求场景

例如对于一个VOD应用,现在想以折扣码来拉新用户,这个折扣码的服务需要支持每秒几千次的访问,设计如下:

Discount code service high-level architecture

用户提交折扣码后,第一步是读取数据库进行验证,接着异步批量处理以减少系统的负载

现在可以使用Application Composer来进行实现无服务器架构:

Application Composer initial screen

点击New blank project,选择本地文件目录来存储项目文件:

Application Composer create blank project

Application Composer能访问你的本地文件,可以允许近实时的双向同步。

创建完成项目后,从左侧拖拽所需的AWS资源。在背后,Application Composer会使用CloudFormation生成IaC代码:

Application Composer canvas

使用,下面是拖拽一个Lambda后生成的代码:

  Function:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub ${AWS::StackName}-Function
      Description: !Sub
        - Stack ${AWS::StackName} Function ${ResourceName}
        - ResourceName: Function
      CodeUri: src/Function
      Handler: index.handler
      Runtime: nodejs14.x
      MemorySize: 3008
      Timeout: 30
      Tracing: Active

Application Composer会默认设置好lambda的一些属性,比如开启tracing(X-Ray)和设置超时时间。可以在CloudFormation中更改这些属性或在resource properties 页面更改:

Application Composer resource panel

当设置与本地文件同步后,可以在本地的代码编辑器里更改CloudFormation模板,这些更新会自动同步到Application Composer页面中。

如果两个服务需要进行交互,Application Composer会为Lambda自动设置好IAM policy、环境变量、event subscriptions 等属性。例如,如果lambda要与DynamoDB和SQS进行交互,Application Composer会生成以下配置:

Function:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub ${AWS::StackName}-Function
      Description: !Sub
        - Stack ${AWS::StackName} Function ${ResourceName}
        - ResourceName: Function
      CodeUri: src/Function
      Handler: index.handler
      […]
      Environment:
        Variables:
          QUEUE_NAME: !GetAtt Queue.QueueName
          QUEUE_ARN: !GetAtt Queue.Arn
          QUEUE_URL: !Ref Queue
          TABLE_NAME: !Ref Table
          TABLE_ARN: !GetAtt Table.Arn
      Policies:
        - SQSSendMessagePolicy:
            QueueName: !GetAtt Queue.QueueName
        - DynamoDBCrudPolicy:
            TableName: !Ref Table

这样新的开发者会避免一些基础的配置工作


对于上面的折扣码设计,最后实现的效果如下:

Discount code architecture in Application Composer

API Gateway来提交用户的请求,触发一个lambda来验证折扣码是否可用,验证的数据库在DynamoDB。验证成功后,这个lambda往SQS发送一条消息,并返回成功给客户端。另一个Lambda从SQS取出消息,并发送invoice。

这样设计减少了Lambda调用,因为后半部分的操作是异步的,可以批量处理。

Application Composer在本地创建好了CloudFormation和lambda handler

Application Composer generated files

现在,可以将整个目录分享给底下干活的人,让开发往里面写代码逻辑了。

其他特性

可以将资源进行分组:

Application Composer grouping

除了创建新项目外,还可以导入已有的模板,选择Load existing project

Application Composer load existing project

这样可以复用一些脚手架。

总结

Application Composer目前是免费的,从AWS控制台上进行访问。

Application Composer是一个可视化的设计器,帮助开发者和架构人员创建应用的架构。他们可以在第一时间验证自己的想法,让产品上线的速度大大加快。

目前Application Composer支持的服务是有限的,未来会继续添加更多的服务。