标签: aws-lambda

什么是AWS等同于Firebase实时数据库?

我正在开发一个新的游戏项目,包括一个React Native前端和一个基于Lambda的后端.该应用程序需要一些实时功能,如活动用户记录,地理围栏等.

我正在研究Firebase的实时数据库,它看起来像是一个非常优雅的实时数据同步解决方案,但我不认为AWS有任何类似的东西.

我只能使用AWS服务来考虑"无服务器"实时的3个选项是:

选项1:通过WebSockets进行AWS IoT消息传递

这一点非常明显,通过IoT SDK实现了托管WebSockets连接.我正在考虑触发Lambdas以响应入站和出站事件,并且只使用WebSockets作为实时层,就像通常那样在应用客户端上构建自定义处理逻辑.

至少与Firebase相比,这方面的缺点是我将不得不自己处理事件中的数据,这将在WebSockets之上添加另一层管理,并且必须使用应用程序商店中的API数据层进行标准化. .

优点:

  • 可扩展的双向实时连接

缺点:

  • 仅在应用程序打开时有效
  • 需要实现消息结构
  • 要管理的多个传输层

选项2:推送触发重新获取

另一种选择是使用推送通知作为实时触发器,但使用常规HTTP请求到API网关实际获取更新的有效负载.

我喜欢这种方法,因为它只适用于一个传输层和应用程序状态的单一事实来源.当应用程序未打开时,它也会触发更新,因为这些是推送通知.

缺点是这是很多自定义工作,在推送通知与需要获取的数据之间可能存在困难的映射.

优点:

  • 即使应用关闭,推送通知仍然有效
  • 单一的事实来源,传输层

缺点:

  • 最定制的解决方案
  • 将涉及更多的整体HTTP请求

选项3:Cognito Sync 这对我来说比较新,我不确定它是否可以与服务器实际连接.

Cognito Sync提供用户状态同步.跨设备完成离线支持,是我将要使用的Cognito SDK的一部分.这听起来就像我正在寻找但却无法找到任何确凿的证据,因为它可以修改或"触发"来自AWS的更新,而不仅仅是来自其中一个设备.

优点:

  • 提供抽象的实时数据模型
  • 连接到Cognito用户记录OOTB

缺点:

  • 不确定是否可以从Lambdas修改或更新


我想知道是否有人有经验在AWS上实时作为基于Lambda的架构的一部分,如果你对什么是最好的方法有意见?

real-time amazon-web-services aws-lambda firebase-realtime-database aws-iot

67
推荐指数
3
解决办法
4万
查看次数

在亚马逊lambda中使用moviepy,scipy和numpy

我想使用AWS Lambda功能生成视频.

我按照这里这里的说明进行了操作.

我现在有以下过程来构建我的Lambda函数:

步骤1

触发一个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)

python numpy amazon-web-services aws-lambda

64
推荐指数
5
解决办法
3万
查看次数

是否可以重命名AWS Lambda函数?

我在AWS上创建了一些Lambda函数用于测试目的(命名为test_function某些东西),然后在测试后我发现这些函数可以在prod env中使用.

是否可以重命名Lambda函数?如何?或者我应该创建一个新的并复制粘贴源代码?

rename amazon-web-services aws-lambda

62
推荐指数
2
解决办法
2万
查看次数

59
推荐指数
2
解决办法
6万
查看次数

如何使用lambda函数处理SQS队列(不是通过预定事件)?

这是我正在尝试的简化方案:

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

amazon-sqs amazon-web-services aws-lambda

59
推荐指数
5
解决办法
4万
查看次数

AWS lambda api网关错误"格式错误的Lambda代理响应"

我正在尝试使用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代理响应".

amazon-web-services node.js aws-lambda aws-api-gateway

59
推荐指数
9
解决办法
3万
查看次数

是否可以将Socket.io与AWS Lambda一起使用?

是否可以在AWS Lambda中构建一个函数来创建websocket并将数据发送到订阅的应用程序?

像这样的东西:

John在手机中打开了应用程序SuperPhotoApp,但决定使用桌面浏览器将照片上传到SuperPhotoApp服务(S3 Bucket),此事件执行Lambda函数,创建socket.io服务器并将更新推送给所有订阅者,他的手机打开了应用程序,以便应用程序自动更新新照片.

这可以通过推送通知或Amazon SNS完成,但是如果我需要实时行为,例如我需要更新角色位置的在线游戏.

如果Lambda无法做到这一点,是否有任何解决方案可以使用桌面浏览器更新我打开的应用程序?

亚马逊EC2是唯一的选择吗?我已经读过它有缩放问题,这就是为什么我在评论Lambda.

sockets amazon-web-services ios socket.io aws-lambda

58
推荐指数
4
解决办法
4万
查看次数

无法使用AWS Lambda函数将日志(文本输出)记录到CloudWatch

我正在尝试设置一个Lambda函数,该函数会在文件上传到S3存储桶时对其进行处理.我需要一种方法来查看console.log上传文件时的输出,但我无法弄清楚如何将我的Lambda函数链接到CloudWatch.

我通过查看context我的日志组/aws/lambda/wavToMp3和日志流的对象来计算2016/05/23/[$LATEST]hex_code_redacted.所以我在CloudWatch中创建了该组和流,但没有记录任何内容.

amazon-web-services amazon-cloudwatch aws-lambda

58
推荐指数
5
解决办法
3万
查看次数

在 AWS Lambda 上使用层时“无法从 'urllib3.util.ssl_' 导入名称 'DEFAULT_CIPHERS'”

我想要实现什么

使用 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存在
  • Lambda 的角色已正确设置。它可以读取和写入S3
  • Lambda 的运行时是 Python 3.9。本地计算机的python版本是3.9.13。

到目前为止我做了什么

我搜索“无法从‘urllib3.util.ssl_’导入名称‘DEFAULT_CIPHERS’”并找到了一些建议。我用以下代码制作了图层,然后再次尝试,但没有成功。

!pip install …
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-web-services boto3 aws-lambda

56
推荐指数
6
解决办法
7万
查看次数

AWS Lambda"在完成请求之前退出流程"

我试图调用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)

amazon-web-services aws-lambda

55
推荐指数
3
解决办法
5万
查看次数