Amazon cloudformation 无服务器框架:实现完整“的方法”;“基础设施作为代码”吗;?

Amazon cloudformation 无服务器框架:实现完整“的方法”;“基础设施作为代码”吗;?,amazon-cloudformation,terraform,serverless-framework,serverless,Amazon Cloudformation,Terraform,Serverless Framework,Serverless,我遵循了一个优秀的指南(),该指南创建了一个典型的CRUD无服务器基础架构,其中包含react前端。它正在使用AWS的 我不喜欢的是,要引导设置,需要在GUI(主要是Amazon的控制台界面)中进行大量手动单击。即,设置不受版本控制,且不易复制。使用CI/CD进程等扩展它并不容易。在本例中,需要手动设置以下资源: AWS Cognito用户池 AWS Cognite用户池应用程序 AWS Cognito联合身份池 AWS DynamoDB实例 AWS S3存储桶(x3)(该存储桶还承载 云前分

我遵循了一个优秀的指南(),该指南创建了一个典型的CRUD无服务器基础架构,其中包含react前端。它正在使用AWS的

我不喜欢的是,要引导设置,需要在GUI(主要是Amazon的控制台界面)中进行大量手动单击。即,设置不受版本控制,且不易复制。使用CI/CD进程等扩展它并不容易。在本例中,需要手动设置以下资源:

  • AWS Cognito用户池
  • AWS Cognite用户池应用程序
  • AWS Cognito联合身份池
  • AWS DynamoDB实例
  • AWS S3存储桶(x3)(该存储桶还承载
  • 云前分布
  • AWS路由53区域文件
从代码构建的唯一资源是无服务器函数(lambda)本身以及API网关实例。这就是无服务器框架使用其文件所做的。但上述所有资源都不是自动创建的。它们有时需要使用它们的ARN,但它们不是由serverless.yml配置创建的。在生产环境中运行这样一个系统(这在很大程度上依赖于通过GUI手动创建服务)似乎有风险

我想解决这个问题的办法是使用地形或云层。但是无服务器框架本身已经在为Lambdas的设置使用Cloudformation,尽管没有用于其他资源。那么如何消除这一差距呢?换句话说,如何重建代码中描述的整个设置


将CloudFormation设置为Serverless似乎很奇怪,而且可能不可能,而后者有自己的CloudFormation模板来设置lambdas。扩展Serverless框架,不仅定义需要在
Serverless deploy
上创建的函数和API网关,而且还定义其他资源(如DynamoDB或Cognito用户池),可能更有意义。有没有人已经这样做的例子或尝试?

我同意关于这方面的文档将是一个很好的例子

您是对的,
serverless
正在引擎盖下使用CloudFormation。该框架通过
serverless.yml
resources
键向您公开了底层的CloudFormation机制

我认为您应该将这些资源的其余部分(Cognito stuff、S3等)放在
resources:
部分的
serverless.yml
文件中,使用

例如,除了serverless函数外,该文件还将创建一个DynamoDB表和S3 bucket:

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新手,我还建议您看一看。

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

正如您所提到的,对于无服务器项目,涉及到很多资源。把它们结合在一起不是一件简单的工作。因此,选择正确的工具是很困难的

比较
Serverless框架
Cloudformation
Terraform
,Serverless框架是Serverless专家,Cloudformation和Terraform是GP

Cloudformation和terraform是完全
的基础设施,覆盖了大部分资源

无服务器框架是一个中间层,仅用于生成Cloudformation模板,该模板主要用于无服务器相关资源

您可以直接在Cloudformation中编写所有模板,但是模板文件会很大,很难用它的JSON/Yaml模板来维护。通过使用
serverless.yml
中的几十行代码,serverless框架可以生成一千或几千行的cloudformation模板。它节省了大量的时间来处理云形成代码

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


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

您肯定已经可以使用各种部署工具将几乎所有内容部署为IaC(事实上,我们每天都在工作中这样做)

如果您碰巧主要使用Serverless;,然后,您可以选择类似无服务器框架(SF)的东西来抽象使用CloudFormation(CF)时固有的复杂性/灵活性。无论CF可以做什么,SF都可以做,但SF有一个插件系统,允许运行代码来校准API(例如,可以允许您创建CF不支持的资源)