【问题标题】:Getting Two Step Function Executions in serverless for one call [AWS]一次调用在无服务器中获取两个 Step Function 执行 [AWS]
【发布时间】:2019-12-07 00:10:39
【问题描述】:

我正在使用无服务器框架和步进函数,我有一个由 s3 对象上传触发的 lambda 函数,然后该 lambda 被编程为启动状态机执行,但每次我上传一些文件时,它总是显示两次执行.

serverless.yml

plugins:
  - serverless-step-functions

provider:
   iamManagedPolicies:
       - arn:aws:iam::aws:policy/AWSStepFunctionsFullAccess

iamRoleStatements:
  - Effect: "Allow"
    Action:
      - states:*
    Resource: "*"

functions:
  init:
    handler: src/functions/main/handler.startStepFunction
    events:
      - s3:
          bucket: ${IMAGE_BUCKET_NAME}
          event: s3:ObjectCreated:*

功能

module.exports.startStepFunction = async event => {
  // start the step function with event parameter
  const params = {
    stateMachineArn: `${STATE_MACHINE}`,
    input: JSON.stringify(event)
  };

  const functionPromise = stepfunctions.startExecution(params, function(err, data) {
    if (err) console.log(err, err.stack);
    else     console.log(data);
  }).promise();

  await functionPromise;
};

单个文件上传执行(两次成功执行都是一个文件上传)

我不知道为什么会发生这样的事情,我错过了什么或让它表现得很奇怪?提前致谢。

【问题讨论】:

  • 您的 lambda 被触发了多少次?
  • 在此期间,可能在 s3 中创建了另一个文件

标签: amazon-web-services aws-lambda aws-sdk serverless-framework aws-step-functions


【解决方案1】:

问题出在以下几行:

const functionPromise = stepfunctions.startExecution(params, function(err, data) {
    if (err) console.log(err, err.stack);
    else     console.log(data);
  }).promise();

我承诺 startExecution 函数以及回调,

正确的代码应该如下所示,

const functionPromise = stepfunctions.startExecution(params).promise();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多