【问题标题】:How to make AWS Lambda stop execution?如何让 AWS Lambda 停止执行?
【发布时间】:2016-12-04 05:48:50
【问题描述】:

我有一个AWS Lambda 函数对Kinesis Firehose 执行操作。 该函数使用退避机制。 (此时我认为这浪费了我的计算时间)。

但无论如何,在我的代码中,我希望执行失败。 我应该使用什么命令来停止执行?

附: 我发现有这样的命令:

  • context.done()
  • context.succeed()
  • context.fail()

我必须告诉你,我无法AWS 文档中找到有关这些命令的任何文档。

【问题讨论】:

  • 找不到此页面? docs.aws.amazon.com/lambda/latest/dg/… 如果您需要更多帮助,您需要指定您使用的 NodeJS 运行时版本。
  • 这个链接回答了我很多问题。我找不到。谢谢!如果您将其作为答案,我会接受。
  • 我强烈建议您尽可能切换到使用 nodejs4.3 运行时。从 2016 年 10 月开始,您将无法再使用旧运行时创建 lambda 函数(source)
  • @JonathanSeed 我正在使用这个运行时版本。然而,我一直在使用旧语法而不知道。上面的链接肯定是我搜索过的文档。

标签: amazon-web-services aws-lambda aws-sdk


【解决方案1】:

这些方法仅用于向后兼容,因为它们是在 Node.js v0.10.42 中首次引入的。如果您使用 NodeJS 版本 4.* 或 6.*。使用callback() 函数。

查看:Using the Callback Parameter in Lambda,了解如何利用此功能的更多信息。

【讨论】:

    【解决方案2】:

    这是我的解决方案(可能不完美,但对我有用)

    time.sleep(context.get_remaining_time_in_millis() / 1000)
    

    代码是用 Python 编写的,但我相信您可以使用任何其他语言应用相同的逻辑。这个想法是让我的 lambda 函数在“重试”的剩余时间内“入睡”。

    完整的示例可能如下所示:

    ... 
    some code that processes logs from CloudWatch when my ECS container stops(job is finished) 
    ...
    
    # Send an email notification
    sns_client = client('sns')
                      sns_client.publish(
                          TopicArn=sns_topic,
                          Subject="ECS task success detected for container",
                          Message=json.dumps(detail)
                      )
                      # Make sure it was send only once, therefore 'sleep'
                      # untill lambda stops 'retries'
                      time.sleep(context.get_remaining_time_in_millis() / 1000) 
    

    因此,电子邮件只发送一次。希望对你有帮助!

    【讨论】:

    • 这似乎对重试逻辑没有影响。完成后,您应该只在处理程序函数中使用return。 OP 正在谈论“浪费计算时间”,这将使您的 lambda 每次运行整整 15 分钟。
    猜你喜欢
    • 2017-09-05
    • 2020-04-18
    • 1970-01-01
    • 2021-04-12
    • 2021-04-17
    • 1970-01-01
    • 2019-11-11
    • 2022-11-28
    • 2015-12-22
    相关资源
    最近更新 更多