使用 AWS SDK for Java 调用 AWS Lambda 函数时如何检索 context.done() 消息?
Posted
技术标签:
【中文标题】使用 AWS SDK for Java 调用 AWS Lambda 函数时如何检索 context.done() 消息?【英文标题】:How to retrieve the context.done() message when invoking AWS Lambda functions using the AWS SDK for Java? 【发布时间】:2015-04-13 23:38:14 【问题描述】:我正在使用AWS SDK for Java 来调用之前已上传的一些AWS Lambda 函数。 invokeAsync 方法返回一个invokeAsyncResult 对象,它似乎只包含非常有限的一组属性和方法。特别是,对象中包含的唯一相关信息是 HTTP 状态代码(例如,202
表示成功)。似乎没有提供给 Lambda Node.js context.done()
方法的用于检索错误代码或消息的方法的任何属性。
因此,无法直接从 Lambda 函数调用中获取任何“返回值”。我必须让 Lambda 处理程序将一个对象放入 S3 以存储返回值的 JSON 表示,然后使用 Java SDK 代码在消费者端获取对象的内容。
有人知道从 Lambda 函数中直接获取一些有意义的“返回值”的方法吗?
【问题讨论】:
AWS Lambda get context message的可能重复 【参考方案1】:在您的代码中,您可以查看 lambda 调用的结果:
lambda.invoke(params, function(err, data)
if (err) console.log(err, err.stack); // an error occurred
else
console.log(data); // successful response
if (data.Payload != '')
var jdata = JSON.parse(data.Payload);
console.log(jdata.something);
successCallback(jdata);
else successCallback(null);
);
在你的 Lambda 函数中,你可以有这样的东西:
dynamodb.getItem(params, function(err, data)
if (err)
console.log(err);
context.fail(err);
else
console.log(data);
context.succeed(data);
你也可以用 context.done() 替换 context.succeed() context.succeed(null, data);
在我描述的情况下,data.Payload 将是从 DynamoDB 检索到的 JSON 字符串。
【讨论】:
特别是来自 Java,您需要 (add-after-this-question-was-asked) AWSLambdaClient.invoke 方法。 对任何复制/粘贴者的警告:dynamodb.getItem
回调没有调用context.fail
并返回,因此会记录失败,然后它会尝试记录数据,然后它会调用context.succeed
.以上是关于使用 AWS SDK for Java 调用 AWS Lambda 函数时如何检索 context.done() 消息?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 IAM 角色通过 aws sdk (java) 从 ECS 容器调用 s3 存储桶
创建 S3Client 的 PHP AWS SDK 致命错误
golang Amazon S3使用AWS SDK for Go选择CSV示例
golang Amazon S3使用AWS SDK for Go选择带有JSON的示例
寻求使用 AWS C++ SDK 实现 get-credentials-for-identity 的示例,并且它需要 get-id 输入以用于临时 AWS 凭证