0

我对无服务器架构相对较新,但在尝试为我的团队创建一个完全离线的本地后端时遇到了一个非常令人沮丧的问题。显然我错过了一些基本的东西,所以请随意对我说:)。

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

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

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

测试1.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

包.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 的控制台日志出来..然后我在等待无服务器离线控制台日志几分钟后将其杀死

4

0 回答 0