You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python CDK为Step Functions添加waitForTaskToken配置

使用Python CDK实现Step Functions LambdaInvoke的waitForTaskToken配置

在Python CDK中,你不需要手动指定arn:aws:states:::lambda:invoke.waitForTaskToken这个资源ARN,而是通过设置LambdaInvoke任务的integration_pattern参数来实现相同效果,CDK会自动生成对应的资源配置。

具体实现步骤

  1. 导入必要的CDK模块
    确保你导入了Step Functions核心模块以及Lambda任务模块:

    from aws_cdk import (
        aws_stepfunctions as sfn,
        aws_stepfunctions_tasks as tasks,
        aws_lambda as _lambda,
        Stack
    )
    from constructs import Construct
    
  2. 创建目标Lambda函数
    先定义你要调用的Lambda函数(如果已有则跳过这步):

    class MyStack(Stack):
        def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
            super().__init__(scope, construct_id, **kwargs)
    
            # 创建Lambda函数
            my_lambda = _lambda.Function(
                self, "MyLambdaFunction",
                runtime=_lambda.Runtime.PYTHON_3_11,
                handler="index.lambda_handler",
                code=_lambda.Code.from_asset("lambda")
            )
    
  3. 配置带waitForTaskToken的LambdaInvoke任务
    在创建LambdaInvoke任务时,将integration_pattern设置为IntegrationPattern.WAIT_FOR_TASK_TOKEN,同时记得在payload中传递TaskToken(Lambda需要用这个token来调用Step Functions的SendTaskSuccess或SendTaskFailureAPI完成任务):

    # 创建LambdaInvoke任务,启用waitForTaskToken模式
            lambda_task = tasks.LambdaInvoke(
                self, "InvokeLambdaWaitForToken",
                lambda_function=my_lambda,
                # 设置集成模式为等待任务令牌
                integration_pattern=sfn.IntegrationPattern.WAIT_FOR_TASK_TOKEN,
                # 在payload中传递TaskToken给Lambda
                payload=sfn.TaskInput.from_object({
                    "input.$": "$",
                    "taskToken.$": "$$.Task.Token"
                })
            )
    
  4. 整合到状态机
    将这个任务添加到状态机定义中:

    # 创建状态机
            state_machine = sfn.StateMachine(
                self, "MyStateMachine",
                definition_body=sfn.DefinitionBody.from_chainable(lambda_task),
                timeout=cdk.Duration.minutes(5)
            )
    

原理说明

当你设置integration_pattern=sfn.IntegrationPattern.WAIT_FOR_TASK_TOKEN时,CDK会自动将状态机JSON中的Resource字段设置为arn:aws:states:::lambda:invoke.waitForTaskToken,和你之前在控制台手动修改的效果完全一致。这种模式下,Step Functions会暂停执行,直到Lambda函数调用SendTaskSuccess或SendTaskFailureAPI,传递对应的任务令牌。

内容的提问来源于stack exchange,提问作者noor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:24:33