【问题标题】:AWS Lambda - Controlling the application flowAWS Lambda - 控制应用程序流程
【发布时间】:2019-07-02 12:52:39
【问题描述】:

我正在尝试正确构建我的 AWS lambda。当我遇到错误时,我正在尝试退出 Lambda。使用简单的一个函数 Lambda,我这样做:

exports.handler = async (event, context) => {    
    const someError = new Error('Something is wrong');
    throw someError;
};

它最终在 DeadQueue 中按预期结束(经过多次尝试)。

当我想成功解决它时,我会这样做:

exports.handler = async (event, context) => {  
    // ... some code here        
    return {};    
};

现在我想使用 requires 来构建我的应用程序,所以我有这样的东西:

//Main execution point
const validator = require('./Validate/Validator');

exports.handler = async (event, context) => {    
    let aaa = validator.validate(operationName);
    console.log('I should not bere here')        
};

还有验证器本身:

exports.validate = async (schemaName, payload) => {
    console.log('I am coming here')
    try {            
        const Schema = require(`../ValidationSchemas/${schemaName}`).schema;
    }
    catch (e) {            
        const schemaError = new Error('Validation schema not found. Operation does not exist.');
        throw schemaError;
        //process.exit(0);            
    }
};

在验证器中会发生什么,如果我抛出错误,则会抛出错误,但我的执行会在主(调用者)lambda 函数中继续执行。我想用

把它停在那里

process.exit(0)

确实有效。 Lambda 被终止。但出于某种原因,这看起来是一种不好的方法。理想情况下,我会从主要功能开始,但我正在考虑最好的方法。

【问题讨论】:

    标签: node.js amazon-web-services lambda


    【解决方案1】:

    您需要在 Lambda 函数中实现错误处理。

    const validator = require('./Validate/Validator');
    
    exports.handler = (event) => {
    
      try {
        let aaa = validator.validate(operationName);
      }
      catch (error) {
        return error;
      }  
    
    };
    

    【讨论】:

    • 如果我理解正确,我应该处理我的执行函数中的所有错误吗?
    • 它有效。根据您的建议,我控制了 main 函数内的流程。边问。可以(在 Lambda 中)使用这个:process.exit(0) 吗?
    • 这取决于您的用例为什么要使用 process.exit。它只会终止容器执行。
    • 最后使用它,有没有像抛出错误一样的副作用?换句话说,它最终会出现在 DeadSQS 中吗?
    • @VedranMaricevic 它应该具有相同的最终效果,但它几乎肯定会带来未来性能损失,因为该过程 - 可能还有容器 - 可以'不能重复使用。该进程将需要重新生成或容器将需要被服务替换,可以合理地预期其中任何一个都会导致函数的未来调用产生一些不必要的启动延迟。
    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 2021-08-14
    • 2017-11-25
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多