标签: aws-lambda

在 Go 中快速查找文件和行号引发错误的技巧?

在我的 go 之旅中发现没有堆栈跟踪。因此,每当出现问题时,我们都会收到一条简单的字符串错误消息,而没有任何信息来自何处。这与我习惯查看详细堆栈跟踪的其他语言形成鲜明对比

\n\n

例如,下面是来自apex的错误消息

\n\n
$ cat event.json | apex invoke --logs webhook                                  \n   \xe2\xa8\xaf error parsing response: json: cannot unmarshal array into Go value of type map[string]interface {}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里它告诉我解组到地图无法工作,因为它event.json是一个数组。我们已解组interface{}以支持数组和映射。但是,它并没有告诉我哪个文件/行导致了此错误。

\n\n

问题:

\n\n
    \n
  1. 有什么方法可以快速找到此错误来自哪个文件/行?
  2. \n
  3. 一般来说,地鼠是否可以使用一些提示/技巧来从该字符串错误消息中快速找到问题的根源?
  4. \n
  5. 大多数 go 项目的堆栈跟踪都是这样的,还是应该遵循任何最佳实践?
  6. \n
\n

debugging stack-trace go aws-lambda

2
推荐指数
1
解决办法
4549
查看次数

AWS Lambda 与 S3 配合使用

我想创建一个 Python Lambda 函数来获取上传的 s3 图像并创建它们的缩略图版本。

我遇到权限问题,无法访问我的存储桶。我知道我需要创建存储桶策略。我不明白如何制定适用于执行缩略图过程的 lambda 请求的策略?

amazon-s3 aws-lambda

2
推荐指数
1
解决办法
3613
查看次数

我的 python lambda 函数不返回 lambda 函数名称

我尝试过调用lambdaAWS中的函数。我已经通过S3事件触发了它,下面是我的代码。我可以从事件记录中获取存储桶和密钥。我试图将其lambda function name作为调用的一部分,但无法做到。我可以从事件中获取函数名称吗?

def getEnv(event):
   key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).decode('utf8')
   bucket = event['Records'][0]['s3']['bucket']['name']
   lambdaName = event['lambdaName'][0]

   environment = {'env': bucke, 'lambdaName': lambdaName}
Run Code Online (Sandbox Code Playgroud)

python python-2.7 aws-lambda

2
推荐指数
1
解决办法
1564
查看次数

如何保持与AWS Lambda函数的续集连接(或加速初始连接)?

我目前有一个 AWS Lambda 函数,利用 Sequelize 从 RDS 中的 MySQL 数据库进行连接/查询。

一切都按预期进行,除了一段时间不活动后的首次连接总是需要至少 5 秒才能启动。随后的 lambda 调用很快,因此我怀疑连接已被持久化和池化。

这有点烦人,所以我想知道是否可以优化它以更快地连接,或者配置 lambda 以使连接是永久的。

"use strict"
var Sequelize = require('sequelize')

var database = 'participantData',
    host = 'hostname',
    username = 'username',
    password = 'blah'

var sequelize = new Sequelize(database, username, password, {
  host: host,
  dialect: 'mysql',
  logging: console.log('Query Logged')
})

var Resource = sequelize.define('resource', {
  program_name: { type: Sequelize.STRING },
  geocoded_address: { type: Sequelize.STRING }
})

exports.handler = function(event, context){
  Resource.findAll({
    //some filter
  })
    .then((res) => { …
Run Code Online (Sandbox Code Playgroud)

mysql amazon-web-services node.js sequelize.js aws-lambda

2
推荐指数
1
解决办法
4980
查看次数

适合维护 S3 对象索引的 AWS 服务吗?

我需要在 AWS S3 中存储数百万个小型 JSON 对象(每个对象大约 2,500 字节),并且需要能够通过三种不同的方式检索它们:

  • 通过时间戳
  • 通过ID
  • 批量(用于报告、分析)

对象键将按时间戳组织,因此按时间戳范围检索对象将非常快。此外,共享相同时间戳(例如相同分钟)的对象可以连接成每行包含一个 JSON 对象的单个 S3 对象。组合可以提高写入性能,并且还可以与 EMR 和 Athena 很好地配合。

然而,通过 ID 检索将非常慢。我需要一种方法来相对快速地检索大量 ID,例如检索 100,000 个对象的时间戳(给定 100,000 个 ID 的列表),而无需扫描整个数据集的有效负载。

在这种情况下,哪种 AWS 服务可以提供对 S3 内容进行索引的最佳方式?

amazon-s3 amazon-web-services aws-lambda

2
推荐指数
1
解决办法
6171
查看次数

如何通过 AWS Lambda 调用 IPv6 REST 服务

我有一个托管在 AWS Lambda 中的 Alexa Skill,它用于在以下示例 URL 下AsyncHttpClient调用REST 服务:IPv6

http://[2a12:5375:4151:2300:1353:a632:5f4e:c232]:4711/rest/test
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,我总是遇到以下异常:

ava.util.concurrent.ExecutionException: java.net.ConnectException: Protocol family unavailable
Run Code Online (Sandbox Code Playgroud)

如果我检查分配给底层服务器或应用程序的 IP 地址?,我会得到以下地址(也是示例):

ip-10-23-56-1.eu-west-1.compute.internal: 10.23.56.1
Run Code Online (Sandbox Code Playgroud)

所以我想,因为我使用的是 IPv6,而系统使用 IPv4,所以我无法让它工作?我可以从另一台服务器成功调用我的 REST 服务。

我还使用以下系统属性:

System.setProperty("java.net.preferIPv6Addresses", "true");
System.setProperty("java.net.preferIPv4Stack", "false");
Run Code Online (Sandbox Code Playgroud)

是否有任何解决方案可以在 IPv4 底层系统上提供“隧道”,以通过隧道传输 IPv6 地址来调用 REST 服务?或者有更简单的解决方案吗?

java ipv6 aws-lambda alexa-skills-kit

2
推荐指数
1
解决办法
3892
查看次数

在 AWS Lambda 中使用 JavaScript eval()

我想使用 AWS Lambda 运行用户通过 Web 提交的 JavaScript 代码。我的 Lambda 函数将返回返回值 、stderr和stdout。这样做我可能会遇到什么问题?

恶意用户是否能够提交导致 Lambda 函数出现问题的代码?用户所做的更改(例如对节点环境或文件系统的更改)是否在调用中持续存在?有什么办法可以防止这种情况发生吗?

我eval()可以将文件写入 Lambda 文件系统并调用:

const userCodeProcess = require('child_process').fork('user_code.js')
userCodeProcess.on('message', response.send)
Run Code Online (Sandbox Code Playgroud)

child-process amazon-web-services node.js aws-sdk aws-lambda

2
推荐指数
1
解决办法
2054
查看次数

无服务器 - 服务之间通信的选项?

我有一些不同的服务(由无服务器框架生成)需要相互通信。数据敏感,需要身份验证。

我当前的策略是为每个服务创建一个 api 密钥,使用 json web 令牌在服务之间进行通信,如下所示的令牌。

fM61kaav8l3y_aLC/3ZZF7nlQGyYJsZVpLLiux5d84UnAoHOqLPu4dw3W7MiGwPiyN
Run Code Online (Sandbox Code Playgroud)

服务之间通信还有哪些其他选项?这种方法有什么缺点吗?重申一下,请求需要经过身份验证并适当处理敏感数据。

amazon-web-services aws-lambda aws-api-gateway serverless-framework

2
推荐指数
1
解决办法
4795
查看次数

在 AWS Lambda 中启用 X-Ray 支持

我想要获取 Lambda 函数的一些 X 射线痕迹。通过阅读文档,我似乎可以在配置中启用主动跟踪,并且它应该自动记录它,而无需正确部署任何新代码?

只有当我想要自定义子段时,我才会在 lambda 函数中显式进行一些 X-Ray 调用吗?

aws-lambda aws-xray

2
推荐指数
1
解决办法
2128
查看次数

AWS Lambda - 支持多个文件

我想使用 AWS Lambda 将不同类型的消息转换为其他类型。这将是复杂的转换,这意味着将有很多定义转换的规则。因此,为了保持代码整洁,我想在 AWS Lambda 中保留不同的文件而不是单个文件。我怎样才能做到这一点?

amazon-web-services aws-lambda

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