下面是我的状态机图
阶梯函数图
当跟踪,coverart迁移失败时,我想我已经放了一个将重定向到dbFallback的捕获,现在我想要dbMigration的输出作为dbFallback的输入,我如何实现这一点?
我的yaml文件
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
Next: Parallel
Parallel:
Type: Parallel
Next: Final State
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"]
Next: dbFallback
dbFallback:
Type: Task
Resource: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:migration-pilot-backend-${self:provider.stage}-dbFallback
End: true
Final State:
Type: Pass
End: True
正如我现在理解你的问题一样,不可能同时捕获lambda错误并使用它的输出,因为它失败的事实意味着它没有成功地产生任何输出。这没多大意义。
或者,您可以使用try / except
语句在lambda本身内部捕获lambda错误。然后,如果lambda出现错误,则向步进函数返回一个特定的有效负载。然后在dbMigration lambda之后,添加一个choice
任务,该任务根据dbMigration
lambda的输出检查迁移是否成功。如果不成功,调用dbFallback。
通过捕获dbMigration
lambda中的错误,choice
任务允许您调用dbFallback lambda而不会丢失信息。