Tag: amazon web services

弹性search:了解如何优化写入操作,使读取不受影响

我们有一个带有弹性search后端的NodeJS应用程序,其中90%的时间使用非常less,偶尔绝对会砰的一声。 例如,典型情况下,它可能会在一个小时内收到50-100个读取请求,并且有1-2个写入请求。 在高峰时间,它可能会收到50,000个读取请求和30,000个写入请求。 在这些高峰时期,我们遇到了这样的情况:写入请求太多,以至于重新build立索引等。 甚至有读取请求被抓取; 这使得网站无响应。 为了处理这种types的负载,我们显然需要以某种方式优化弹性search或重新构build应用程序,并试图找出如何最好地做到这一点。 我想更好地理解的是: 1)在写操作上发生了什么似乎会杀死所有的东西,以及为了优化或加速呢? 2)我可以从代码的angular度来看,我可以使用批量操作更快地插入更多的logging,但是我想知道弹性search索引这种方式在系统上实际上效率较低。 我应该看到显着更好的性能(特别是在事物的读取方面),如果我们摆脱了批量插入,或者至less使插入的尺寸更小? 任何能够帮助我理解这种改变如何影响事物的东西都是有帮助的。 3)是否有分割读/写操作的能力,即使写操作被备份,读操作仍然继续工作? 例如,我正在考虑使用消息队列而不是直接使用弹性search插入,但是,再次回到问题#2,我不确定如何优化读取操作以继续工作。 例如有没有办法插入到不同的读取集群,然后合并数据? 这会多less有效吗? 感谢您的帮助。

AWS lambda函数 – “发生错误:收到来自Lambda:Handled的错误响应”

使用AWS Lex创buildChatBot并在AWS Lambda使用Node.js。 错误:发生错误:收到来自Lambda:Handled的错误响应 Lambdafunction: var aws = require('aws-sdk'); var ses = new aws.SES({region: 'us-east-1'}); exports.handler = function(event, context, callback) { var eParams = { Destination: { ToAddresses: [event.currentIntent.slots.Email] }, Message: { Body: { Text: { Data: "Hi, How are you?" } }, Subject: { Data: "Title" } }, Source: "abc@gmail.com" }; var email = […]

在Jenkins中构build是成功的,但AWS-Codebuild正在给出插件错误

我有一个在Jenkins上成功构build的项目,但是当我尝试使用AWS Codebuild构build时,会产生插件错误。 该项目基本上是一个NodeJS和ReactJS项目。 我们不想移动到Jenkins,因为我们没有服务器,安装jenkins需要一个EC2实例。 我们不想维护任何服务器。 我已经尝试了AWS codebuild的以下环境: aws/codebuild/ubuntu-base:14.04 aws/codebuild/nodejs:6.3.1 aws/codebuild/nodejs:7.0.0 aws/codebuild/nodejs:4.4.7 我的buildspec.yml的前四个命令仅在使用aws/codebuild/ubuntu-base:14.04 codebuild环境时执行。 否则只有最后三个命令是我的buildspec.yml的一部分 以下是我的buildspec.yml version: 0.1 phases: build: commands: – sudo apt-get update – curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash – – sudo apt-get install -y nodejs – sudo apt-get install -y build-essential – npm install – npm run dev – aws s3 […]

我如何在我的node.js应用程序中使用AWS DAX

我有一个sails.js应用程序,我已经使用mongodb作为持久层和redis作为caching。 不过,我想转移到AWS DAX,以便我可以在caching中保存大型数据集,并且我想使用dynamodb作为mongodbreplace。 sails.js有dynamodb水线适配器但我不知道如何在我的应用程序上使用AWS DAX 。 我发现在aws dynamodb文档中的 java的一个例子但不知道如何在我的node.js应用程序上使用。 非常感谢您提供任何帮助。

AWS Step / Lambda – 在运行之间存储variables

在我第一次涉足云计算时,我能够遵循Mark West关于如何使用AWS Rekognition处理来自安全摄像机的图像的指示 ,这些图像被转储到S3存储桶中,并在检测到人员时提供通知。 他的代码是为Raspberry Pi相机设置的,但是我可以通过将触发的图像通过FTP传输到Synology NAS,并使用CloudSync将其镜像到S3存储桶,从而将其适配到我的IP摄像机。 按照下图的步骤函数调用Lambda函数,并在15秒内收到一封电子邮件,附带检测到的标签列表和附加的图像。 问题是,只要条件被触发,照相机就会每秒上传一张图像,如果在照相机前面有很多活动,我可以快速地处理几百封电子邮件。 我想在make-alert-decision和nodemailer-send-notification之间插入一个函数来检查是否在最后一分钟内发送了电子邮件通知,如果没有,请立即转到nodemailer-send-notification,如果因此,将标签列表和path存储到数组中,然后在60秒内发送一封包含所有附件的电子邮件。 我知道我必须从外部存储数据,并且遇到这篇文章解释了不同的caching数据方法的好处,我还认为我可以检查上传到S3的文件的时间戳,比较两个最近上传文件来决定是否继续或batch file以备后用。 作为AWS的新手,我正在寻找从复杂性和成本angular度来看哪种方法最有意义的build议。 我可以忍受文章中讨论的任何方法的滞后,只是不知道如何继续,因为我从来没有使用甚至听说过任何服务。 谢谢!

AWS Step Function:函数.length()在Choice状态的variables字段中返回错误

我在AWS Step Function中有一个Choice状态,它将比较Input的数组长度,并决定进入下一个状态。 但是,获取数组长度的length()函数返回了一个错误: { “错误”:“States.Runtime”, “cause”:“执行状态'CheckItemsCountState'时发生错误(input到事件ID#18)无效path'$ .Metadata [2] .Items.length()':select状态的条件path引用无效值。” } Choice状态的定义如下: "CheckItemsCountState":{ "Type": "Choice", "InputPath": "$", "OutputPath": "$", "Default": "NoItemsState", "Choices":[ { "Variable": "$.Metadata[2].Items.length()", "NumericGreaterThan": 0, "Next": "ProcessState" } ] }, 状态连接了一些返回JSON的状态。 JSON如下所示: { "Metadata": [ { "foo": "name" }, { "Status": "COMPLETED" }, { "Items": [] } ] } 所以我试图获取Metadata[2]的Items的长度Metadata[2]并且如果值大于0,则进行比较。 我试图validation这个网站的JsonPath $.Metadata[2].Items.length() ,它返回0。 […]

弹性beanstalk中的多个Nodejs应用程序

我有一个nodejs项目与多个服务,networking和工作人员。 所有这些服务都在相同的回购,只是用来调用它们的脚本不同。 我想为每个服务不同的configuration,但我也想保持在1回购。 我可以使用环境,但是这会混乱我的真实环境,如生产,舞台等。我怎样才能使用弹性beanstalk这种架构? 构build环境是最好的解决scheme吗?

AWS Lambda执行dynamic代码

是否有可能定义一个NodeJs函数来评估dynamicnodejs代码? 这里是上下文: 用户创build自定义的JavaScript函数应该返回true / false。 我需要“评估”在NodeJ上运行的AWS Lambda容器中的用户代码。 可能吗? 我应该使用类似于JavaScript eval函数的东西吗? 编辑 这是我的尝试 'use strict'; exports.handler = (event, context, callback) => { var body = "function test() { return 10; };"; console.log("body", body); eval(body); var result = test(); callback(null, result); }; 我得到一个错误,说“testing”没有定义,因此eval不正确。 START RequestId: 6e9abd93-bd69-11e7-a43f-c75328d778e1 Version: $LATEST 2017-10-30T11:56:58.569Z 6e9abd93-bd69-11e7-a43f-c75328d778e1 body function test() { return 10; }; […]

Elastic Beanstalk在configuration菜单中没有负载平衡器设置

我尝试在我的Elastic Beanstalk应用程序上启用websocket,但是按照此处的说明( https://mitchellsimoens.com/websockets-behind-elastic-beanstalk/ ),我发现我的应用程序的运行状况已经降级。 这可能是因为我没有在本指令中提到的configuration菜单中find负载平衡器设置。 这是我的configuration菜单的屏幕截图: 显然,websocket不适用于我的应用程序。 事实上,在将.ebextensions/files.config添加到我的项目中后,整个应用程序都closures了。 当然,我的process.env.PORT是80而不是3000(我想,不知道在哪里看)。 我试过这两个设置: files: "/etc/nginx/conf.d/01_websockets.conf" : mode: "000644" owner: root group: root content : | upstream nodejs { server 127.0.0.1:process.env.PORT; keepalive 256; } server { listen process.env.PORT; large_client_header_buffers 8 32k; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; # prevents 502 […]

用于提供私人文件的AWS S3实施

使用案例:我们正在开发一个Web应用程序,客户要求我们使用AWS S3来存储图像。 在应用程序中,每个人都有自己的帐户,并上传自己的图片,一些上传的图片将公开。 根据我的理解,我们可以通过使用预先链接的URL来实现这一点,上传图像。 但是我面临的问题是如何限制对其他用户的访问。