5

我遵循了一个出色的指南(Serverless Stack),它创建了一个典型的带无响应前端的CRUD无服务器基础结构。它使用AWS的Serverless Framework无服务器框架:如何实现完整的“基础架构作为代码”?

我不喜欢的是,引导安装程序,有很多手动点击图形用户界面(主要是亚马逊的控制台界面)涉及。即该设置不受版本控制,不易重现。这是不容易将其与CI/CD过程等延伸。在这个例子中,以下资源需要手动设置:

  • AWS Cognito用户群
  • AWS Cognite用户群的应用
  • AWS Cognito联合身份游泳池
  • AWS DynamoDB例如
  • AWS S3桶(X3)(这还举办frontend
  • AWS CloudFront的分布
  • AWS Route53区域文件

从代码构建的唯一资源是无服务器函数(lambdas)本身以及API网关实例。这就是无服务器框架使用其文件serverless.yml的原因。但是以上所有资源都是而不是自动创建的。他们有时需要使用他们的ARN为referenced to,但他们不是由serverless.yml配置创建的。在生产环境中运行这样的系统(主要依赖通过GUI手动创建服务)看起来有风险。

我在想这个解决方案是使用Terraform或Cloudformation。但是无服务器框架本身已经在使用Cloudformation来设置Lambda,但不是用于其他资源。那么如何消除这种差距呢?换句话说,如何在代码中重建Serverless Stack中描述的整个设置?

将CloudFormation设置为无服务器,然后使用自己的Cloudformation模板来设置lambdas似乎很奇怪,也许不可能。扩展无服务器框架可能更有意义,不仅可以定义需要在serverless deploy上创建的函数和API网关,还可以定义其他资源,如DynamoDB或Cognito用户池。人们是否有过这样的例子或企图?

回答

3

我同意关于这方面的文档将使一个出色的pull request here

你说得对,serverless正在使用CloudFormation。该框架通过您的serverless.ymlresources密钥的方式向您提供底层的CloudFormation机制。

我觉得the intent of the framework是,你会把这些资源的其余部分(Cognito东西,S3等)在serverless.yml文件的resources:部分,使用regular old CloudFormation syntax

例如,该文件将创建一个DynamoDB表和S3斗,除了无服务器功能:

service: aws-nodejs # NOTE: update this with your service name 
provider: 
    name: aws 
    runtime: nodejs6.10 
functions: 
    hello: 
    handler: handler.deletecustomer 
    events: 
     - http: 
      path: /deletecustomer 
      method: post 
      cors: true 
resources: 
    Resources: 
    tablenotes: 
     Type: AWS::DynamoDB::Table 
     Properties: 
     AttributeDefinitions: 
      - AttributeName: noteId 
      AttributeType: S 
      - AttributeName: userId 
      AttributeType: S 
     KeySchema: 
      - AttributeName: userId 
      KeyType: HASH 
      - AttributeName: noteId 
      KeyType: RANGE 
     ProvisionedThroughput: 
      ReadCapacityUnits: '5' 
      WriteCapacityUnits: '5' 
    mysamplebucket: 
     Type: AWS::S3::Bucket 
     Properties: 
     WebsiteConfiguration: 
      IndexDocument: index.html 
      ErrorDocument: error.html 
     AccessControl: Private 
     VersioningConfiguration: 
      Status: Suspended 

如果你是新来CloudFormation,我也建议采取偷看CloudFormer

0

基于@Mike Patrick的选项,增加了我对无服务器框架和其他类似无服务器重点工具的理解。

正如您所提到的,对于无服务器项目,涉及到大量资源。将它们结合在一起不是简单的工作。所以选择一个合适的工具很难。

比较Serverless frameworkCloudformationTerraform,无服务器架构是无服务器专家,Cloudformation发展和terraform是GP

Cloudformation发展和terraform完全Infrastructure as Code涵盖大部分资源。

无服务器框架是一个中间层,仅用于生成大部分仅用于无服务器相关资源的Cloudformation模板。

您可以直接在Cloudformation模板中编写所有内容,但模板文件会很大,很难通过其JSON/Yaml模板进行维护。通过serverless.yml中的几十行,无服务器框架可以生成一千或几千行云信息模板。它可以节省大量的时间来处理云信息代码。

让无服务器框架处理所有AWS资源没有意义,其他工具已经做得最好。

无服务器框架仍在开发中,因为它的普及,许多开发人员都参与到日常添加功能中。也许有一天你可以得到你所需要的,但现在你必须在一些情况下将无服务器框架与Cloudformation或Terraform或其他工具混合在一起。