繁体   English   中英

AWS CDK Typescript,如何从 lambda 触发步进函数?

[英]AWS CDK Typescript, how to trigger step function from lambda?

我试图从 lambda 触发阶跃函数,所以我有这个配置:


let DIST_FOLDER = path.join(__dirname, "dist");

export class ServerStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // State Machine code

    let executorLambda = new lambda.Function(this, "executorFunction", {
      runtime: lambda.Runtime.NODEJS_12_X,
      handler: "main.handler",
      code: new lambda.AssetCode(path.join(DIST_FOLDER, "executor-lambda")),
      timeout: Duration.seconds(60)
    });

    let executorTask = new Task(this, "executorTask", {
      task: new InvokeFunction(executorLambda)
    });

    let chain = Chain.start(executorTask);

    let stateMachine = new StateMachine(this, "executorStateMachine", {
      definition: chain
    });

    // Back-end and api
    let backend = new lambda.Function(this, "backend", {
      runtime: lambda.Runtime.NODEJS_12_X,
      handler: "main.handler",
      code: new lambda.AssetCode(path.join(DIST_FOLDER, "backend-lambda")),
      environment: {
        STEP_FUNCTION_ARN: stateMachine.stateMachineArn
      }
    });

    new apigateway.LambdaRestApi(this, "strest-api", { handler: backend });
  }
}

我的 api 网关连接的 lambda 是:

import { StartExecution } from "@aws-cdk/aws-stepfunctions-tasks";

export async function handler(event: any, context: any) {
  let env = process.env;
  let STEP_FUNCTION_ARN = env.STEP_FUNCTION_ARN || "STEP_FUNCTION_ARN";
  let body = JSON.stringify({
    msg: "Hello world",
    stepFunctionArn: STEP_FUNCTION_ARN
  });

  let stateMachineExecution = new StartExecution({ // Here I get an error, I don't know how to pass the correct step function arn or resource
    stateMachineArn: STEP_FUNCTION_ARN
  })

  return {
    statusCode: 200,
    body
  };
}

有没有人有这方面的经验?

问题似乎出在您的 Lambda 函数中:

import { StartExecution } from "@aws-cdk/aws-stepfunctions-tasks";

您从 CDK 导入的StartExecution实际上是基础结构构造。 为了再次调用 AWS 的 API,您需要 AWS 开发工具包:

import { StepFunctions } from 'aws-sdk'

const stepfunctions = new StepFunctions();

export async function handler(event: any, context: any) {
  ...

  stepfunctions.startExecution({
    stateMachineArn: STEP_FUNCTION_ARN,
    name: '...',
    input: JSON.stringify({msg: 'Hello World!'})
  })

  ...
}

有关更多信息,请参阅相应的文档 并确保为您的 Lambda 提供调用相关 Step Functions 的必要权限。

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM