typescript - AWS CDK Typescript,如何从 lambda 触发 step 函数?
问题描述
我正在尝试从 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-gateway 连接的 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";
StartExecution
您从 CDK 导入的内容实际上是基础架构构造。为了再次调用 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 的必要权限。
希望有帮助!
推荐阅读
- scala - 如何检查一行的多列值是否不为空,然后在 Spark Scala 中添加一个真/假结果列
- azure-service-fabric - 我们如何在 Service Fabric Actor Reliable 服务中添加 Application Insight
- c# - 事务不锁定整个表ef core c#
- html - 使用'flex'将'Form'中的按钮定位在不同的div下
- javascript - 使用 z-index 属性在单个拖放元素中堆叠多个文本元素
- sql - 如何用雪花中的空格替换包含字母和特殊字符的行
- vue.js - Vue.js 与少数组件文件同时工作
- android - 导航组件:从 Viewpager 中的 Fragment 导航到另一个 Fragment
- c# - 从 c# 将文件上传到 Azure 文件时如何更改最大并发值?
- c# - 为什么 ComputeHash() 仍然阻塞异步任务中的 UI 线程?