AWS Application Composer 是一个图形化的设计器,使用多个AWS服务创建无服务器应用。开发者新创建无服务器应用时,会面临一个学习曲线,需要学习很多AWS服务。他们需要学习这些服务的配置,然后写IaC来创建应用
例如对于一个VOD应用,现在想以折扣码来拉新用户,这个折扣码的服务需要支持每秒几千次的访问,设计如下:
用户提交折扣码后,第一步是读取数据库进行验证,接着异步批量处理以减少系统的负载
现在可以使用Application Composer
来进行实现无服务器架构:
点击New blank project
,选择本地文件目录来存储项目文件:
让Application Composer
能访问你的本地文件,可以允许近实时的双向同步。
创建完成项目后,从左侧拖拽所需的AWS资源。在背后,Application Composer会使用CloudFormation生成IaC代码:
使用,下面是拖拽一个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
页面更改:
当设置与本地文件同步后,可以在本地的代码编辑器里更改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
这样新的开发者会避免一些基础的配置工作
对于上面的折扣码设计,最后实现的效果如下:
API Gateway来提交用户的请求,触发一个lambda来验证折扣码是否可用,验证的数据库在DynamoDB。验证成功后,这个lambda往SQS发送一条消息,并返回成功给客户端。另一个Lambda从SQS取出消息,并发送invoice。
这样设计减少了Lambda调用,因为后半部分的操作是异步的,可以批量处理。
Application Composer在本地创建好了CloudFormation和lambda handler
现在,可以将整个目录分享给底下干活的人,让开发往里面写代码逻辑了。
可以将资源进行分组:
除了创建新项目外,还可以导入已有的模板,选择Load existing project
:
这样可以复用一些脚手架。
Application Composer
目前是免费的,从AWS控制台上进行访问。
Application Composer是一个可视化的设计器,帮助开发者和架构人员创建应用的架构。他们可以在第一时间验证自己的想法,让产品上线的速度大大加快。
目前Application Composer支持的服务是有限的,未来会继续添加更多的服务。