在我的 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 {}\nRun Code Online (Sandbox Code Playgroud)\n\n这里它告诉我解组到地图无法工作,因为它event.json是一个数组。我们已解组interface{}以支持数组和映射。但是,它并没有告诉我哪个文件/行导致了此错误。
问题:
\n\n我想创建一个 Python Lambda 函数来获取上传的 s3 图像并创建它们的缩略图版本。
我遇到权限问题,无法访问我的存储桶。我知道我需要创建存储桶策略。我不明白如何制定适用于执行缩略图过程的 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) 我目前有一个 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) 我需要在 AWS S3 中存储数百万个小型 JSON 对象(每个对象大约 2,500 字节),并且需要能够通过三种不同的方式检索它们:
对象键将按时间戳组织,因此按时间戳范围检索对象将非常快。此外,共享相同时间戳(例如相同分钟)的对象可以连接成每行包含一个 JSON 对象的单个 S3 对象。组合可以提高写入性能,并且还可以与 EMR 和 Athena 很好地配合。
然而,通过 ID 检索将非常慢。我需要一种方法来相对快速地检索大量 ID,例如检索 100,000 个对象的时间戳(给定 100,000 个 ID 的列表),而无需扫描整个数据集的有效负载。
在这种情况下,哪种 AWS 服务可以提供对 S3 内容进行索引的最佳方式?
我有一个托管在 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 服务?或者有更简单的解决方案吗?
我想使用 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
我有一些不同的服务(由无服务器框架生成)需要相互通信。数据敏感,需要身份验证。
我当前的策略是为每个服务创建一个 api 密钥,使用 json web 令牌在服务之间进行通信,如下所示的令牌。
fM61kaav8l3y_aLC/3ZZF7nlQGyYJsZVpLLiux5d84UnAoHOqLPu4dw3W7MiGwPiyN
Run Code Online (Sandbox Code Playgroud)
服务之间通信还有哪些其他选项?这种方法有什么缺点吗?重申一下,请求需要经过身份验证并适当处理敏感数据。
amazon-web-services aws-lambda aws-api-gateway serverless-framework
我想要获取 Lambda 函数的一些 X 射线痕迹。通过阅读文档,我似乎可以在配置中启用主动跟踪,并且它应该自动记录它,而无需正确部署任何新代码?
只有当我想要自定义子段时,我才会在 lambda 函数中显式进行一些 X-Ray 调用吗?
我想使用 AWS Lambda 将不同类型的消息转换为其他类型。这将是复杂的转换,这意味着将有很多定义转换的规则。因此,为了保持代码整洁,我想在 AWS Lambda 中保留不同的文件而不是单个文件。我怎样才能做到这一点?
aws-lambda ×10
amazon-s3 ×2
node.js ×2
aws-sdk ×1
aws-xray ×1
debugging ×1
go ×1
ipv6 ×1
java ×1
mysql ×1
python ×1
python-2.7 ×1
sequelize.js ×1
stack-trace ×1