当前位置: 首页 > 知识库问答 >
问题:

正确处理上下文。succeed()/上下文。AWS Lambda中AWS S3服务调用失败()

董同
2023-03-14

我已经在这里搜索过帖子(例如,如果所有调用都是异步的,那么如何在lambda中构建连续的AWS服务调用?)在其他地方,似乎找不到一点信息来帮助我克服这个恼人的问题。当有一个Lambda函数在循环中迭代时,在该循环中调用s3。putObject(),它在尝试正确处理上下文时遇到短路问题。succeed()/上下文。fail()或旧上下文。结束Lambda进程的方式。

一、 迭代需要调用s3。putObject()包含要上载的当前对象,但仍将成功上载的文件输出到cloudwatch或可能的SQS/SNS。然而,我将这种类型的闭包放入函数的所有尝试都会遇到随机结果,有时会得到文件名,有时只得到一些文件名,等等。

最好的方法是什么?我曾尝试使用Q和async,但老实说,我仍在学习所有这些东西。。

下面是我尝试做的一个粗略示例:

function output(s3Object){
     s3.putObject(s3Object, function(err, data){
          if (err) {
               console.log('There was an issue with outputting the object.', err);
          } else {
             // how do you properly close this if you have x number of incoming calls??
          // context.done(null, 'success');
}


// and later in the code where it actually calls the output function
// and NOTE: it should output all of the file names that the invocation uploads!
for (var a = 0; a < myRecords.length; a++){
     output(myRecords[a]);
}

但是,正如我之前所说的,到目前为止,我所做的任何尝试都会产生不同的结果。

Successfully output object: myBucket/prefix/part_000000123432345.dat
Successfully output object: myBucket/prefix/part_000000123432346.dat

但是对函数输出的另一个测试:

Successfully output object: myBucket/prefix/part_000000123432346.dat

啊。

共有1个答案

钱华晖
2023-03-14

我将给出一个使用Async的简单示例,然后您可以对其进行调整:

var async = require('async');

var sleep = function(message, callback) {
    setTimeout(function() {
        callback(null, "Echo: " + message);
    }, Math.floor(Math.random() * 2000));
};

exports.handler = function(event, context) {
    async.map(['a', 'b', 'c', 'd', 'e'], sleep, context.done);
};

在这里,我定义了一个函数,该函数接受消息和回调,然后在0到2秒之间随机Hibernate一段时间,然后将消息回显到回调。

然后我们使用异步。map()对5条不同的消息异步调用sleep()函数。根据文档,此函数的回调,在本例中为上下文。所有迭代器函数完成后,将调用done。在Lambda控制台中运行此命令,您肯定会得到:

[
  "Echo: a",
  "Echo: b",
  "Echo: c",
  "Echo: d",
  "Echo: e"
]

因此,您的代码可能非常简单:

async.map(myRecords, s3.putObject, context.done);

但由于我无法测试这一点,我将把这部分留给你。

 类似资料:
  • Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点。Spring Cloud建立在此之上,并添加了一些可能系统中所有组件将使用或偶尔需要的功能。 引导应用程序上下文 一个Spring Cloud应用程序通过创建一个“引导”上下文来进行操作,这个上下文是主应用程序的父上下文。开箱即用,负责从外部源加载配置属性,还解

  • 我是SpringWebFlux的新手。 我有一个不支持批处理调用的上游服务,因此我必须为数组中的每个对象多次调用它。我还需要请求参数的实例,因为服务在响应中不返回这些属性。 例如,这是我将发送给客户的回复 我只有身份证清单

  • 问题内容: 我有一个奇怪的问题,我想使用上下文处理器添加全局查询。这是我通过以下方法做到的: 这样在我的应用中创建了一个processor.py: 并在我的setting.py结尾处添加了以下内容: 最后,我通过以下观点: 在我的index.html模板上: 最后是我的网址: 我的foos显示没有问题,但是我的media_url和其他上下文消失了。可能是什么问题 问题答案: 当你指定时: 在设置文

  • 问题内容: 关于这两个上下文的内容,已经有很多文章了。但是我仍然不太正确。 到目前为止,据我了解:每个实例都是其类的一个实例,这意味着某些程序员建议您尽可能频繁地使用它,以免“泄漏”任何内存。这是因为另一个this(获取Activity实例上下文)指向的Activity是每次用户倾斜手机或离开应用程序等时都将销毁的一个。显然,垃圾收集器(GC)无法捕获,因此使用了过多的内存。 .. 但是任何人都可

  • 问题内容: 假设您正在使用一个对象,并且正在使用构造函数的设置来传递一个初始化函数,然后该初始化函数将在全局命名空间中创建资源。假设资源具有上下文管理器。如果上下文管理的资源必须在流程的整个生命周期中都可以使用,但是在最后要进行适当的清理,您将如何处理它的生命周期呢? 到目前为止,我有点像这样: 从这里开始,池进程可以使用资源。到现在为止还挺好。但是,由于类不提供or或参数,因此处理清理工作有些棘

  • 要使人晓得智慧和训诲,分辨通达的言语。使人处事,领受智慧、仁义、公平、正直的训诲。使愚人灵明、使少年人有知识和谋略。使智慧人听见、增长学问、使聪明人得着智谋、使人明白箴言和譬喻、懂得智慧人的言词和谜语。敬畏耶和华使知识的开端,愚妄人藐视智慧和训诲。 上下文管理器 在《文件(1)》中提到,如果要打开文件,一种比较好的方法是使用with语句,因为这种方法,不仅结构简单,更重要的是不用再单独去判断某种异