node.js - AWS Lambda 链接函数不会打印我的日志记录
问题描述
我正在尝试使用 AWS lambda 进行超级简单的测试,用于链接函数及其任何缺点。
我想更复杂地使用它们(为 S3 上的巨大存储桶尽可能快地优化图像)
所以我对自己说,在我发疯之前,让我们先尝试将第一个函数的参数传递给第二个函数,依此类推。
此外,我还看到人们建议使用 Step Functions,所以除非真的有必要,否则尽量避免这种情况。
所以正如标题所说,我无法获得第二个函数,即被调用以打印出东西的函数,我希望它用于调试目的并想知道是否有办法让它工作?
这是我的代码:
'use strict';
var aws = require('aws-sdk')
module.exports.hello = (event, context, callback) => {
var lambda = new aws.Lambda()
var testPayload = ['blue', 'green', 'red']
var opts = {
FunctionName: 'lambda-chaining-dev-ciao',
Payload: JSON.stringify(testPayload)
}
lambda.invoke(opts, function (err, data) {
if (err) {
console.log('Error : ', err)
callback(err, null)
} else if (data) {
console.log('data', data)
console.log('\n')
const response = {
statusCode: 200,
body: JSON.parse(data.Payload)
}
callback(null, response)
}
})
}
module.exports.ciao = (event, context, callback) => {
console.log("I will never be logged when invoked")
callback(null,{ message: 'this is a test'})
}
无服务器.yml
service: lambda-chaining
provider:
name: aws
runtime: nodejs6.10
iamRoleStatements:
- Effect: Allow
Action:
- lambda:InvokeFunction
- lambda:InvokeAsync
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: "*"
functions:
hello:
handler: handler.hello
ciao:
handler: handler.ciao
plugins:
- serverless-offline
解决方案
LogType: 'Tail'
如果您想查看调用的日志,您需要添加到您的 Lambda 参数。对于您想要的东西,这不是一个很好的解决方案,因为它只会是最后 4kb 的日志。
如果您试图查看来自 Lambda 2 实际进程的日志,而不是 Lambda 1 进程中的日志并且它们不存在,我会质疑 Lambda 1 是否正在执行。您可以尝试fs.writeFileSync()
验证。或者,如果您不在本地运行它,只需查看该函数的 Cloudwatch 调用指标。
此外,您将在 Lambda 2 运行的整个过程中运行 Lambda 1。如果 Lambda 2 调用另一个 Lambda,则 Lambda 1 将不得不无限等待。最终,您将开始计时功能或向亚马逊支付更多的钱。
如果您想保持理智,这是 Step Functions 的情况。
推荐阅读
- typescript - TypeScript Transformer - 装饰器并未完全从 AST 中移除
- css - Angular:如何更改材质主题并保留一些自定义 CSS?
- javascript - 自动打开播放列表菜单
- reactjs - react-countdown-now- 在父组件上调用 setState 时防止重新渲染
- java - [已解决]Spring boot:在进行 post 请求时如何将子级保存在现有父级中
- c# - IMutableEntityType.GetProperties() 不包含我想要的属性
- json - 在所需的 JSON 参数中包装和编组 Go 结构
- vue.js - Axios CORS 问题 Consuming API
- python - 使用一个 Flask 路由将来自 BigQuery 的多个查询返回到 html 表中
- kubernetes - 为什么 client.Update(...) 会忽略非原始值?