【问题标题】:How to send an event to all running instances of a AWS Lambda function如何将事件发送到 AWS Lambda 函数的所有正在运行的实例
【发布时间】:2020-01-06 01:04:30
【问题描述】:

我有一个 Lambda 函数,其配置位于外部源(例如 S3)中。

为了节省一些计算时间,函数在第一次执行时加载并保存在内存中。

我希望能够告诉该 Lambda 函数的所有正在运行的实例按需重新加载配置。

在下面的 sn-p 中,当事件具有“reload”属性时,Lambda 函数会重新加载配置。但显然只有一个正在运行的实例会收到该事件。

  • 如何将事件发送到所有正在运行的实例?
  • 有没有办法广播活动?
  • 还有其他方法可以解决这个问题吗?
// Function to process events
var processEvent = function(event,callback) {
  // process event
}

// Function to update configuration
var config; // global object representing configuration
var updateConfiguration = function(callback) {
  // ... load asynchronously from S3
}

// Handle events
exports.handler = function(event, context, callback) {
  if (event.reload) {
    updateConfiguration(callback);   // load configuration
  } else if (!config) {
    updateConfiguration(function() { // load configuration
      processEvent(event,callback);  // ... then process event
    });
  } else {
    processEvent(event,callback);    // process event directly
  }
}

【问题讨论】:

    标签: amazon-web-services events aws-lambda broadcast


    【解决方案1】:

    无法向 AWS Lambda 容器发送消息。当它们不运行时,它们实际上会被“冻结”而不会发生任何计算。

    最接近的选择是让处理程序在某处检查(参数存储?)每当调用一个函数时,看看它是否应该重新加载。

    【讨论】:

      【解决方案2】:

      也许您可以订阅一个 SNS 主题并通过该主题发送事件。然后,订阅此主题的 lambda 函数可以更新 config 变量。

      请记住,lambda 函数对全局变量有一些特殊的缓存行为。您可以在此处阅读有关此主题的更多信息:https://medium.com/tensult/aws-lambda-function-issues-with-global-variables-eb5785d4b876

      【讨论】:

        猜你喜欢
        • 2014-07-02
        • 2017-12-11
        • 2020-11-11
        • 2021-08-15
        • 2019-11-10
        • 2020-04-20
        • 2021-08-23
        • 2022-12-09
        • 2019-08-15
        相关资源
        最近更新 更多