用于部署Backend的AWS服务是哪种?

Aj1*_*Aj1 1 amazon-s3 amazon-ec2 amazon-web-services angularjs aws-lambda

我有一个网站(静态坐在s3),内容从s3提供.我打算写一个休息api(节点或对建议开放).当前端进行角度$ http调用时,例如,如果我的网站名为example.com,那么调用将是类似相对url(/ Update)的解决方案.

我不确定,我应该使用什么类型的aws服务来部署我的后端代码.

更新

我正在使用Codestar,使用Express Web服务.这是我的template.yml.和路线.代码星构建很好,但部署失败.

template.yml

    AWSTemplateFormatVersion: 2010-09-09
Transform:
- AWS::Serverless-2016-10-31
- AWS::CodeStar

Parameters:
  ProjectId:
    Type: String
    Description: AWS CodeStar projectID used to associate new resources to team members

Resources:
  HelloWorld:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs4.3
      Role:
        Fn::ImportValue:
          !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /
            Method: get
        PostEvent:
          Type: Api
          Properties:
            Path: /
            Method: post
  GetItemsBylId:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs4.3
      Role:
        Fn::ImportValue:
          !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /api/getItemsBylId/:id
            Method: get
Run Code Online (Sandbox Code Playgroud)

这是我的app.js

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send({
    "Output": "Hello World!"
  });
});

app.get('/api/GetItemsBylId/:id', function (req, res) {
    res.send({
      "Output": "I am up!"
    });
});
Run Code Online (Sandbox Code Playgroud)

以下是GetItemsBylId部署的错误

   Failed to set tags on AWS::Lambda::Function. IAM permissions lambda:ListTags, lambda:TagResource and lambda:UntagResource are required to tag AWS::Lambda::Function resources and to propagate stack level tags.
Run Code Online (Sandbox Code Playgroud)

我很确定这是因为id param.

更新

使用查询参数解决了标签问题.而不是使用,resouce:id,我现在正在使用?id ="".

Chr*_*ite 5

这里有几件事需要考虑:

API Gateway + Lambda

Lambda通常被认为是无服务器解决方案.您只需编写代码,而不是担心底层基础架构,底层AWS托管资源就会为您运行.API网关与Lambda集成,允许您将各种REST样式URL映射到Lambda函数.

好处

  • 快速通话非常划算
  • 通过内置SDK轻松与AWS服务集成
  • 使用IAM角色可以轻松访问服务,而无需担心凭据
  • 它们中的大量可以并行运行以处理大量呼叫
  • 支持多种语言,包括NodeJS
  • 不必担心可用区域

缺点

  • 有限的资源
  • 处理本机编译包可能有点麻烦
  • 硬限制为5分钟.这可以使诸如处理图像/视频之类的任务不太可能被使用.
  • 磁盘空间非常有限

弹性容器服务

利用EC2实例将它们刻入容器的有趣方法.特别好,如果你习惯于处理码头图像.

好处

  • 处理大文件的更好方法
  • 无需担心Lambda超时
  • 能够分割EC2实例以更好地利用整个机器资源并获得您所支付的费用

缺点

  • 如果您不熟悉Docker/Containers,可能很难理解
  • 仍然比Lambda路线更贵
  • 如果您打算处理高IO类型设置,可能需要重新考虑
  • 可能不得不处理映射路线 - >服务
  • 您必须小心,您的实例不在单个可用区域中,实质上是将所有服务都关闭,直到您可以在另一个可用区域中启动新资源.

弹性计算(EC2)

我建议考虑更多以IO为中心的工作负载.有许多可用选项,包括预配置IOPS,实例存储,高IO实例类型等.

好处

  • 对系统的最大控制,以及对于那些习惯于传统VPS托管的人来说可能更容易的设置
  • 当您需要处理自定义库,本机代码和各种语言时,会容易得多
  • 附加到EC2实例的IAM角色可用于允许底层代码轻松访问AWS资源
  • 许多实例类型可用于高IO,高带宽和其他需求
  • 系统可以定制,然后变成AMI以允许可重复的系统
  • 可能比Docker/Container解决方案更容易使用
  • 可以轻松使用负载平衡器/自动缩放组根据需要进行扩展和缩小,同时能够指向单个端点(负载平衡器)而不必担心

缺点

  • 成本将成为一个问题
  • 持续监控以确保您的实例类型满足您的需求,并且您没有充分利用您所支付的费用
  • 定价模型可能有点奇怪,因为每小时与每月相比.但是,有成本估算计算器可以让您知道您的每月估算成本.
  • 如果使用负载平衡(这是理想的),则需要额外的成本
  • 必须考虑放置服务器的可用区域,尽管Auto Scaling Groups可以帮助实现自动化.不过,这是另一个要考虑的成本点.
  • 您可以管理底层操作系统,包括更新

Elastic Beanstalk

这是EC2方面的一个很好的界面.如果您只想运行代码并且宁愿做出大部分关于在何处/如何运行它的决策,那么这将非常有用.

好处

  • 对基本用例进行了大量的猜测
  • EC2 +负载均衡具有的大部分优点

缺点

  • 由于资源被抽象化,您需要更加谨慎地考虑您所承担的成本
  • 可以使对底层资源进行修改变得更加困难(尽管此时您可能处于可以在没有Elastic Beanstalk的情况下管理事物的级别)

现在关于您可能需要存储的数据库:

DynamoDB

NoSQL数据存储.如果您可以将数据存储为键值对而没有相互之间的大量相关数据,那么这个价格很合理.免费等级限制也很好.

好处

  • 管理读/写负载的简单方法
  • 非常快
  • 如果需要,可以使用缓存
  • 价格非常优惠的免费套餐模型

缺点

  • 不适合处理具有大量关系的结构化数据以及查询这些关系的需要
  • 有索引,但如果你需要额外的索引,你会开始付费
  • 可能会让那些不习惯NoSQL的人感到困惑
  • 超过免费套餐开始进入每小时和每GB定价
  • 更容易找到处理流行关系数据库的SDK/API

SimpleDB的

就像这个名字说一个相当简单的DB一样.这适用于处理相当小的工作负载或临时存储数据的位置.

好处

  • 可以处理结构化数据
  • 根据特定的使用时间段向您收取费用,而不是像对EC2那样向您收取费用
  • 免费等级对于小负载是合理的

缺点

  • 如果您希望存储大量数据为1GB可用层限制,那么这将不是理想选择
  • 定价模型可能有点令人困惑
  • 如果您需要进入高读/写工作流程,不建议使用
  • 如果您需要结构化数据并且几乎一直访问它,可能更适合使用RDS解决方案

RDS

您对大多数人都熟悉的数据库的期望.包括MySQL,Aurora(亚马逊的定制MySQL),PostgreSQL,Oracle,SQL服务器.

好处

  • 与许多人习惯于处理数据库的方式更为匹配
  • 使用结构化数据比使用DynamoDB更好
  • 由于它受到流行数据库的支持,因此数据导入/导出更容易,特别是如果您想在本地检查数据
  • SQL客户端在大多数编程语言中都是相当标准的,因此接口更容易

缺点

  • 与DynamoDB的免费套餐相比,没有那么好
  • 根据需要可能会变得昂贵
  • 调整IO性能还有一点点参与

我想我已经触及了基本的优点和缺点,但可能会遗漏一些评论部分会在此之后提醒我的项目.我还强烈建议查看所有链接的网站,以便更好地了解服务以及满足您的需求,因为我可以直接回答这个问题.