我遵循了一个优秀的指南(无服务器堆栈),它创建了一个典型的CRUD无服务器基础设施,并提供了一个反应前端。它将无服务器框架用于AWS。
我不喜欢的是,要引导安装程序,需要大量手动单击GUI(主要是Amazon的控制台界面)。也就是说,该设置不受版本控制,也不容易复制。用CI/CD进程等方式扩展它并不容易。在本例中,需要手动设置下列资源:
由代码构建的唯一资源是无服务器函数(lambdas)本身,以及API网关实例。这就是无服务器框架使用它的serverless.yml文件所做的事情。但上述所有资源都是,而不是自动创建的。它们有时需要使用它们的are作为引用,但是它们不是由serverless.yml配置创建的。在生产中运行这样的系统(在很大程度上依赖于通过GUI手动创建服务)似乎很危险。
我在想,解决这个问题的方法是使用Terraform或Cloudformation。但是Serverless Framework本身已经在使用Cloudformation来设置Lambdas,尽管其他资源没有使用。那么,如何消除这一差距呢?换句话说,如何重新构建在无服务器堆栈上用代码描述的整个设置?
拥有CloudFormation Serverless似乎很奇怪,也可能是不可能的,然后它有自己的Cloudformation模板来安装lambdas。扩展Serverless框架不仅可以定义需要在serverless deploy上创建的函数和API网关,还可以定义其他资源,比如DynamoDB或认知用户池。有没有人这样做的例子或尝试?
发布于 2017-10-21 13:19:35
我同意这方面的文档将成为一个优秀的拉请求在这里。
您是正确的,serverless使用的是引擎盖下的CloudFormation。该框架通过您的CloudFormation的resources键向您公开了底层的serverless.yml机器。
我认为框架的意图是你会把剩下的这些资源(科尼托的东西,S3等)。在您的resources:文件的serverless.yml部分,使用常规的旧CloudFormation语法。
例如,除了无服务器函数之外,该文件还将创建一个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。
发布于 2017-10-22 20:22:02
基于@Mike的选项,添加了我对无服务器框架和其他类似的无服务器焦点工具的理解。
正如您所提到的,对于无服务器的项目,需要大量的资源。把它们结合在一起并不是一件简单的工作。所以选择一个正确的工具是很难的。
与Serverless framework和Cloudformation、Terraform相比,无服务器框架是无服务器专家,Cloudformation和Terraform是GP。
云层形成和地形是完全覆盖资源的Infrastructure as Code。
无服务器框架是一个中间层,仅用于生成Cloudformation模板,该模板主要用于无服务器相关资源。
您可以直接用Cloudformation编写所有内容,但是模板文件将很大,它的JSON/Yaml模板很难维护。使用serverless.yml中的几十行,无服务器框架可以生成上千行或数千行的cloudformation模板。它节省了大量的时间来处理云格式代码。
让无服务器框架处理所有AWS资源是没有意义的,因为其他工具已经做得最好了。
无服务器框架还在开发中,由于它的流行,许多开发人员每天都要向它添加特性。也许有一天您可以得到所需的东西,但是现在您必须将无服务器框架与Cloudformation或Terraform或其他工具在某些情况下混合在一起。
发布于 2019-01-12 01:27:28
您肯定已经可以使用各种部署工具以IaC的形式部署几乎所有东西(事实上,我们每天都会这样做)。
如果您碰巧主要使用Serverless;,那么您可以选择类似Serverless Framework (SF)之类的东西来抽象使用CloudFormation (CF)所固有的复杂性/灵活性。无论CF能做什么,SF都可以做,但是SF有一个插件系统,允许运行代码来输出API(例如,它允许您创建不受CF支持的资源)。
https://stackoverflow.com/questions/46861678
复制相似问题