离线本地 Step Function 任务 Lambda 不返回它的输出并冻结状态机直到超时

问题描述

我对无服务器架构比较陌生,但在尝试为我的团队创建一个完全离线本地后端时遇到了一个非常令人沮丧的问题。显然我遗漏了一些基本的东西,所以请随时告诉我;)

我们正在尝试将此后端的无服务器框架与 AWS 提供的所有服务一起使用。我不打算讨论我们正在使用的多处理器 lambda,因为这发生在我将在下面展示的非常基本的示例中。仅供参考,我们正在尝试利用 AWS 自己的本地步骤函数环境,就无服务器框架方面而言,我们正在尝试使用他们的无服务器步骤函数和无服务器离线插件以及其他一些类似的(最重要的可能是) serverless-step-functions-local 你会看到在下面的 yaml 中列出。请记住,这是完全离线,使用模拟凭据等

我能够使用简单的 callback() 获得以下片段的同步形式以“返回/释放”到下一个 lambda 任务状态,没有问题……但是一旦我尝试使用异步 lambda返回一个对象(就像我试图开始工作的实际产品代码中的情况一样).. step 函数只是“挂起”并且永远不会将返回的数据释放到下一个 lambda 任务状态。

这是使用离线本地步骤函数和异步 lambda 的已知问题吗?我写错了 lambdas 吗?

Test1.js

module.exports.handler = async (event,context) => {

    const msg = "Hello Folks";

    console.log('Test1 Msg: ',msg);

    return msg;

}

Test2.js

module.exports.handler = async (event,context) => {

    const msg = "Hello Again";

    console.log('Test2 Msg: ',msg);

    return msg;

}

无服务器.yml

service: stepfuncsoffline

frameworkVersion: ">=1.21.0 <=2.0.0"

plugins:
  - serverless-step-functions
  - serverless-step-functions-local
  - serverless-offline-lambda
  - serverless-offline

provider:
  name: aws
  runtime: nodejs12.x
  lambdaHashingVersion: 20201221
  stage: dev
  region: us-east-1
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:*
        - s3:*
      Resource: "*"
custom:
  stepFunctionsLocal:
    accountId: 101010101010
    region: us-east-1
    TaskResourceMapping:
      Test1: arn:aws:lambda:us-east-1:101010101010:function:Test1
      Test2: arn:aws:lambda:us-east-1:101010101010:function:Test2

functions:
  Test1:
    handler: test1.handler
  Test2:
    handler: test2.handler

stepFunctions:
  stateMachines:
    OfflinestateMachine:
      deFinition:
        StartAt: Wait2Start
        States:
          Wait2Start:
            Type: Wait
            Seconds: 2
            Next: Test1
          Test1:
            Type: Task
            Resource: !GetAtt Test1.Arn
            Next: Test2
          Test2:
            Type: Task
            Resource: !GetAtt Test2.Arn
            Next: Pass2Wait
          Pass2Wait:
            Type: Pass
            Next: Wait2End
          Wait2End:
            Type: Wait
            Seconds: 2
            End: true

package.json

{
  "name": "stepfuncsoffline","version": "1.0.0","description": "","main": "handler.js","scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },"author": "","license": "ISC","dependencies": {
    "aws-sdk": "^2.938.0","serverless": "1.83"
  },"devDependencies": {
    "serverless-offline": "^4.10.6","serverless-offline-lambda": "^1.0.6","serverless-step-functions": "^2.30.0","serverless-step-functions-local": "^0.1.6"
  }
}

运行后控制台的照片..注意所有等待状态工作正常..第一个 lambda 的控制台日志出来..然后我在等待几分钟后将其杀死 serverless offline console log

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)