我有一个网站(静态坐在s3中),内容是从s3提供的。我打算写一个休息api(节点或对建议开放)。当前端进行角度$ http调用时,例如,如果我的网站名为example.com,那么调用将是相对url(/ Update)应该被解决的。
我不确定,我应该使用什么类型的aws服务来部署我的后端代码。
更新
我正在使用Codestar,使用Express网络服务。这是我的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
这是我的 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!"
});
});
以下是 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.
我很确定这是因为id param。
更新
使用查询参数解决了标记问题。而不是使用,resouce:id,我现在正在使用?id =""。
答案 0 :(得分:5)
这里有几件事需要考虑:
<强> API Gateway + Lambda 强>
Lambda通常被认为是无服务器解决方案。您只需编写代码,而不是担心底层基础架构,底层AWS托管资源就会为您运行。 API网关与Lambda集成,允许您将各种REST样式的URL映射到Lambda函数。
优点
缺点
<强> Elastic Container Service 强>
利用EC2实例将它们分割成容器的有趣方法。如果您习惯于处理泊坞窗图像,那就太好了。
优点
缺点
<强> Elastic Compute (EC2) 强>
我建议您查看更多以IO为中心的工作负载。有许多可用选项,包括预配置IOPS,实例存储,高IO实例类型等。
优点
缺点
<强> Elastic Beanstalk 强>
这是EC2方面的一个很好的界面。如果您只想运行代码并且宁愿做出大部分关于运行它的位置/方式的决定,那么这将非常有用。
优点
缺点
现在关于您可能需要存储的数据库:
<强> DynamoDB 强>
NoSQL数据存储。如果您可以将数据存储为键值对而没有相互之间的大量相关数据,那么这个价格很合理。免费等级限制也很好。
优点
缺点
<强> SimpleDB 强>
就像这个名字说的一个相当简单的数据库一样。这适用于处理相当小的工作负载或临时存储数据的位置。
优点
缺点
<强> RDS 强>
您对大多数人都熟悉的数据库的期望。包括MySQL,Aurora(亚马逊定制的MySQL),PostgreSQL,Oracle,SQL服务器。
优点
缺点
我想我已经触及了基本的优点和缺点,但可能会遗漏一些评论部分会在此之后提醒我的项目。我还强烈建议查看所有链接的网站,以便更好地了解服务以及满足您的需求,因为我只能回答这个问题。
答案 1 :(得分:1)
没有足够的信息可以给你一个好的答案。这取决于您的后端需要做什么以及它需要如何扩展。如果您只需要提供简单的功能,AWS Lambda函数就是一种好的,简单且非常便宜的方式,无需启动整个EC2实例。 Lambda函数支持Node.js(以及Python,C#和Java)。
这是一种很好的方式,可以在没有太多承诺的情况下尝试。如果您决定需要更合适的服务器环境或需要执行诸如写入文件系统之类的操作,则代码应该很容易移动到运行Node的EC2实例。
在子域即api.example.com上托管您的API可能更容易,而不是在与您的S3存储桶相同的域下,但如果您需要它们都在同一个域下,您可以通过设置在网关中启动S3代理。 (http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html)
答案 2 :(得分:1)
你应该看看AWS Codestar。
单按钮推送,您将拥有一个完全运行的CI / CD管道和公开可用的端点供您开发。
答案 3 :(得分:1)
我建议使用无服务器。我也试过了codestar但遇到了一个限制错误
AWS CodeStar在处理您的请求时遇到错误:无法创建或更新IAM中的一个或多个策略。项目中的资源数量已超过IAM策略大小限制。请尝试使用不同的参数,或联系AWS Support。
支持说没有解决方法我的template.yml中有大约19个函数,但是当我添加更多它会给我这个错误,我不知道如何解决这个问题,没有项目最多可以有19个功能