我正在开发一个新的游戏项目,包括一个React Native前端和一个基于Lambda的后端.该应用程序需要一些实时功能,如活动用户记录,地理围栏等.
我正在研究Firebase的实时数据库,它看起来像是一个非常优雅的实时数据同步解决方案,但我不认为AWS有任何类似的东西.
我只能使用AWS服务来考虑"无服务器"实时的3个选项是:
选项1:通过WebSockets进行AWS IoT消息传递
这一点非常明显,通过IoT SDK实现了托管WebSockets连接.我正在考虑触发Lambdas以响应入站和出站事件,并且只使用WebSockets作为实时层,就像通常那样在应用客户端上构建自定义处理逻辑.
至少与Firebase相比,这方面的缺点是我将不得不自己处理事件中的数据,这将在WebSockets之上添加另一层管理,并且必须使用应用程序商店中的API数据层进行标准化. .
优点:
缺点:
选项2:推送触发重新获取
另一种选择是使用推送通知作为实时触发器,但使用常规HTTP请求到API网关实际获取更新的有效负载.
我喜欢这种方法,因为它只适用于一个传输层和应用程序状态的单一事实来源.当应用程序未打开时,它也会触发更新,因为这些是推送通知.
缺点是这是很多自定义工作,在推送通知与需要获取的数据之间可能存在困难的映射.
优点:
缺点:
选项3:Cognito Sync 这对我来说比较新,我不确定它是否可以与服务器实际连接.
Cognito Sync提供用户状态同步.跨设备完成离线支持,是我将要使用的Cognito SDK的一部分.这听起来就像我正在寻找但却无法找到任何确凿的证据,因为它可以修改或"触发"来自AWS的更新,而不仅仅是来自其中一个设备.
优点:
缺点:
我想知道是否有人有经验在AWS上实时作为基于Lambda的架构的一部分,如果你对什么是最好的方法有意见?
real-time amazon-web-services aws-lambda firebase-realtime-database aws-iot
我想使用AWS Lambda功能生成视频.
我现在有以下过程来构建我的Lambda函数:
触发一个Amazon Linux EC2实例并以root身份运行它:
#! /usr/bin/env bash
# Install the SciPy stack on Amazon Linux and prepare it for AWS Lambda
yum -y update
yum -y groupinstall "Development Tools"
yum -y install blas --enablerepo=epel
yum -y install lapack --enablerepo=epel
yum -y install atlas-sse3-devel --enablerepo=epel
yum -y install Cython --enablerepo=epel
yum -y install python27
yum -y install python27-numpy.x86_64
yum -y install python27-numpy-f2py.x86_64
yum -y install python27-scipy.x86_64
/usr/local/bin/pip …Run Code Online (Sandbox Code Playgroud) 我在AWS上创建了一些Lambda函数用于测试目的(命名为test_function某些东西),然后在测试后我发现这些函数可以在prod env中使用.
是否可以重命名Lambda函数?如何?或者我应该创建一个新的并复制粘贴源代码?
您是否可以使用node.js支持的AWS Lambda函数向SNS主题发布消息?
这是我正在尝试的简化方案:
http请求 - >(网关API + lambda A) - > SQS - >(lambda B ?????) - > DynamoDB
所以它应该如图所示:来自许多http请求的数据(例如,每秒高达500)被我的lambda函数A放入SQS队列.然后另一个函数B处理队列:最多读取10个项目(在某些期刊的基础上)并使用BatchWriteItem将它们写入DynamoDB.
问题是我无法弄清楚如何触发第二个lambda函数.它应该被频繁调用,每秒多次(或至少每秒一次),因为我需要队列中的所有数据进入DynamoDB ASAP(这就是为什么通过这里描述的预定事件调用lambda函数B 不是一个选项)
为什么我不想在没有SQS的情况下直接写入DynamoDB?
那对我来说完全避免使用SQS会很棒.我试图用SQS解决的问题是DynamoDB限制.甚至没有限制自己,而是在使用AWS SDK将数据写入DynamoDB时处理它的方式:当逐个编写记录并限制它们时,AWS SDK会静默重试写入,导致从http客户端的点开始增加请求处理时间视图.
所以我想暂时将数据存储在队列中,将响应"200 OK"发送回客户端,然后通过单独的函数处理队列,使用一个DynamoDB的BatchWriteItem调用写入多个记录(返回未处理的项目而不是自动重试)限制).我甚至宁愿丢失一些记录,而不是增加接收和存储在DynamoDB中的记录之间的延迟
UPD:如果有人感兴趣,我已经找到了如何在节流的情况下使aws-sdk跳过自动重试:有一个特殊参数maxRetries.无论如何,将按照以下建议使用Kinesis
我正在尝试使用AWS lambda建立一个hello world示例并通过api网关提供它.我点击了"创建一个Lambda函数",它设置了api gatway并选择了Blank Function选项.我添加了AWS网关入门指南中的lambda函数:
exports.handler = function(event, context, callback) {
callback(null, {"Hello":"World"}); // SUCCESS with message
};
Run Code Online (Sandbox Code Playgroud)
问题是,当我向它发出GET请求时,它返回502响应{ "message": "Internal server error" }.并且日志显示"由于配置错误导致执行失败:格式错误的Lambda代理响应".
是否可以在AWS Lambda中构建一个函数来创建websocket并将数据发送到订阅的应用程序?
像这样的东西:
John在手机中打开了应用程序SuperPhotoApp,但决定使用桌面浏览器将照片上传到SuperPhotoApp服务(S3 Bucket),此事件执行Lambda函数,创建socket.io服务器并将更新推送给所有订阅者,他的手机打开了应用程序,以便应用程序自动更新新照片.
这可以通过推送通知或Amazon SNS完成,但是如果我需要实时行为,例如我需要更新角色位置的在线游戏.
如果Lambda无法做到这一点,是否有任何解决方案可以使用桌面浏览器更新我打开的应用程序?
亚马逊EC2是唯一的选择吗?我已经读过它有缩放问题,这就是为什么我在评论Lambda.
我正在尝试设置一个Lambda函数,该函数会在文件上传到S3存储桶时对其进行处理.我需要一种方法来查看console.log上传文件时的输出,但我无法弄清楚如何将我的Lambda函数链接到CloudWatch.
我通过查看context我的日志组/aws/lambda/wavToMp3和日志流的对象来计算2016/05/23/[$LATEST]hex_code_redacted.所以我在CloudWatch中创建了该组和流,但没有记录任何内容.
使用 AWS Lambda 抓取网站并将数据保存在 S3 上。
当我执行 Lambda 时,出现以下错误消息。
{“errorMessage”:“无法导入模块“lambda_function”:无法从“urllib3.util.ssl_”(/opt/python/urllib3/util/ssl_.py)导入名称“DEFAULT_CIPHERS””,“errorType”:“运行时.ImportModuleError", "requestId": "fb66bea9-cbad-4bd3-bd4d-6125454e21be", "stackTrace": [] }
最小 Lambda 代码如下。
import requests
import boto3
def lambda_handler(event, context):
s3 = boto3.client('s3')
upload_res = s3.put_object(Bucket='horserace-dx', Key='/raw/a.html', Body='testtext')
return event
Run Code Online (Sandbox Code Playgroud)
Lambda 上添加了一层。使用以下命令将文件保存在python文件夹中,冻结在 zip 文件中,然后作为层上传到 AWS Lambda。
!pip install requests -t ./python --no-user
!pip install pandas -t ./python --no-user
!pip install beautifulsoup4 -t ./python --no-user
Run Code Online (Sandbox Code Playgroud)
horserace-dx已存在raw存在我搜索“无法从‘urllib3.util.ssl_’导入名称‘DEFAULT_CIPHERS’”并找到了一些建议。我用以下代码制作了图层,然后再次尝试,但没有成功。
!pip install …Run Code Online (Sandbox Code Playgroud) 我试图调用DynamoDB客户端方法并从DynamoDB表中获取一个项目.我正在使用AWS Lambda.但是,我一直收到消息:
"在完成请求之前退出流程."
我已经增加了超时以确保,但处理时间小于超时.有什么建议?
console.log('Loading event');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = function(event, context) {
dynamodb.listTables(function(err, data) {
});
var params = {
"TableName": "User",
"Key":
{"User Id" : {"S":event.objectId}
},
"AttributesToGet" : ["First Name","Last Name", "Latitude", "Longitude"],
"ConsistentRead" : true
}
dynamodb.getItem(params, function(response,result) {
response.on('data', function(chunk){
console.log(""+chunk);
console.log("test1")
context.done(result);
});
result.on('ready', function(data){
console.log("test2")
console.log("Error:" + data.error);
console.log("ConsumedCapacityUnits:" + data.ConsumedCapacityUnits);
context.done('Error',data);
// ...
});
});
};
Run Code Online (Sandbox Code Playgroud) aws-lambda ×10
python ×2
amazon-s3 ×1
amazon-sns ×1
amazon-sqs ×1
aws-iot ×1
boto3 ×1
ios ×1
node.js ×1
numpy ×1
real-time ×1
rename ×1
socket.io ×1
sockets ×1