AWS Step Function故障跳转时如何将dbMigration输出作为dbFallback输入
实现方案
要将dbMigration的输出传递给错误触发的dbFallback,你需要通过AWS Step Functions的ResultPath配置保留上游状态的输出数据,避免被后续状态的输出或错误信息覆盖,具体操作如下:
- 给
dbMigration任务添加ResultPath配置,将它的输出结果保存到状态机上下文的指定路径下,比如$.dbMigrationOutput,避免后续状态执行时覆盖该数据。 - 给
Parallel状态添加ResultPath配置,将并行分支的执行结果保存到独立路径下,比如$.parallelOutput,保留上下文里的dbMigrationOutput数据。 - 给
Catch规则添加ResultPath配置,将错误信息保存到独立路径下,比如$.errorInfo,避免错误信息直接覆盖整个上下文,导致dbMigrationOutput丢失。 - 可选配置:如果需要指定
dbFallback的入参结构,可以给dbFallback任务添加Parameters配置,自定义传入dbMigration的输出和错误信息。
修改后的完整配置如下:
stepFunctions: stateMachines: divoMigrationMachine: name: divoMigrationMachine role: arn:aws:iam::#{AWS::AccountId}:role/migration-stepfunction-role definition: StartAt: dbMigration States: dbMigration: Type: Task Resource: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:migration-pilot-backend-${self:provider.stage}-dbMigration ResultPath: $.dbMigrationOutput # 新增:保存dbMigration输出 Next: Parallel Parallel: Type: Parallel Next: Final State ResultPath: $.parallelOutput # 新增:保存并行任务输出,不覆盖原有上下文 Branches: - StartAt: coverartMigration States: coverartMigration: Type: Task Resource: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:migration-pilot-backend-${self:provider.stage}-coverartMigration End: true - StartAt: trackMigration States: trackMigration: Type: Task Resource: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:migration-pilot-backend-${self:provider.stage}-trackMigration End: true Catch: - ErrorEquals: ["States.ALL"] ResultPath: $.errorInfo # 新增:保存错误信息到独立路径 Next: dbFallback dbFallback: Type: Task Resource: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:migration-pilot-backend-${self:provider.stage}-dbFallback # 可选:自定义入参,仅传递需要的字段 # Parameters: # dbMigrationResult: $.dbMigrationOutput # errorDetail: $.errorInfo End: true Final State: Type: Pass End: True
配置完成后,dbFallback收到的入参中会完整包含dbMigrationOutput字段,你可以直接在对应的Lambda函数中读取使用。
内容的提问来源于stack exchange,提问作者roshan poojary
相关产品推荐
相关产品推荐

