Step Functions 中的可重用状态定义
Reusable State Definition in Step Functions
我们正在通过 AWS Step 函数创建一个由多个 SQL 操作(聚合、转置等)组成的工作流。每个操作都建模为一个单独的 Lambda,其中包含 SQL 查询。
现在,每个查询都接受来自状态机的输入参数,因此每个 lambda 任务如下:
"SQLQueryTask": {
"Type": "Task",
"Parameters": {
"param1.$": "$$.Execution.Input.param1",
"param2.$": "$$.Execution.Input.param2"
},
"Resource": "LambdaArn",
"End": true
}
参数块因此对每个 SQL 查询节点重复。
添加到此,因为 Lambdas 可能会间歇性地失败,我们想为他们重试;我们还需要在每个州都有以下重试块:
"Retry": [ {
"ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException"],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
} ]
这使得状态定义变得非常复杂。有没有办法将状态定义的公共部分提取到可重用的部分?
一种解决方案可能是使用 AWS CDK (https://aws.amazon.com/cdk/)
这允许开发人员定义更高级别的资源抽象,可以轻松地重复使用。
这里有一些示例可能会有所帮助:https://docs.aws.amazon.com/cdk/api/latest/docs/aws-stepfunctions-readme.html
我们正在通过 AWS Step 函数创建一个由多个 SQL 操作(聚合、转置等)组成的工作流。每个操作都建模为一个单独的 Lambda,其中包含 SQL 查询。
现在,每个查询都接受来自状态机的输入参数,因此每个 lambda 任务如下:
"SQLQueryTask": {
"Type": "Task",
"Parameters": {
"param1.$": "$$.Execution.Input.param1",
"param2.$": "$$.Execution.Input.param2"
},
"Resource": "LambdaArn",
"End": true
}
参数块因此对每个 SQL 查询节点重复。 添加到此,因为 Lambdas 可能会间歇性地失败,我们想为他们重试;我们还需要在每个州都有以下重试块:
"Retry": [ {
"ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException"],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
} ]
这使得状态定义变得非常复杂。有没有办法将状态定义的公共部分提取到可重用的部分?
一种解决方案可能是使用 AWS CDK (https://aws.amazon.com/cdk/)
这允许开发人员定义更高级别的资源抽象,可以轻松地重复使用。
这里有一些示例可能会有所帮助:https://docs.aws.amazon.com/cdk/api/latest/docs/aws-stepfunctions-readme.html