产品展示

Our Projects

通过 AWS Step Functions 中的 TestState API 加速工作流开发 计算博

产品展示

通过 AWS Step Functions 中的 TestState API 加速工作流开发 计算博

2026-01-27 14:53:18 10

利用 TestState API 加速 AWS Step Functions 工作流程开发

by James Beswick on 02 MAY 2024 in AWS Step Functions Serverless Permalink 分享

主要重点

AWS Step Functions 提供可视化工作流程服务,让开发者轻松建立分散式应用程式。新推出的 TestState API 允许开发者独立测试各个状态,无需重新部署整个工作流程。可根据需求选择不同的检查级别来查看测试结果的细节,帮助开发者快速迭代和解决问题。

开发人员经常选择 AWS Step Functions 来编排其应用程式中的服务。Step Functions 是一个可视化的工作流程服务,可以帮助开发者构建分散式应用程式、实现过程自动化、编排微服务,并创建数据和机器学习ML管道。该服务与超过 220 种 AWS 服务和所有公开可访问的 HTTP 端点相整合。Step Functions 提供许多支持开发的功能,例如内置错误处理、实时且可审计的工作流执行历史及大规模的并行处理能力。

在测试 Step Functions 工作流程的过程中,开发人员可能会遇到多个耗时的问题,例如与外部服务的身份验证、输入/输出处理、AWS IAM 权限或内在函数等。为了简化和加快这些问题的解决,Step Functions 去年推出了一项新功能,允许单独测试状态,即 TestState API。这项功能允许您独立于工作流程执行来测试状态,并能在无需部署工作流程或执行整个状态机的情况下更改输入并测试不同情况。这项功能适用于所有任务、选择和通过状态。

由于开发人员在 IDE 和终端中花费大量时间,TestState 还通过 API 提供可供使用。这使得您可以针对单个状态进行更改,并在不离开 IDE 的情况下优化输入/输出处理或选择状态中的条件逻辑。在这篇文章中,您将学习 TestState API 如何加速您的测试和开发。

通过 AWS Step Functions 中的 TestState API 加速工作流开发 计算博

开始使用 TestState

假设您正在开发一个包含三个状态的支付处理工作流程。首先是一个 Choice 状态,根据输入数据检查支付类型。根据类型,它将调用 AWS Lambda 函数或外部端点。该调用 Lambda 函数的任务状态包括一些输入/输出处理。

要开始使用 TestState API,您必须创建一个 IAM 角色,以便该服务可以使用。该角色必须包含您状态正在访问的资源所需的 IAM 权限。有关状态可能需要的权限的信息,请参阅 测试状态所需的 IAM 权限。以下片段显示了最小必要的权限:

json{ Version 20121017 Statement [ { Effect Allow Action [ statesTestState iamPassRole ] Resource } ]}

接下来,您必须提供被测试状态的定义。该选择状态配置为检查支付类型及是否存在 voucherId,以便处理优惠券。以下片段显示状态定义:

json{ Type Choice Choices [ { And [ { Variable paymenttype IsPresent true } { Variable paymenttype StringEquals voucher } ] Next Process voucher } { Variable paymenttype StringEquals credit Next Call payment provider } ] Default Fail}

使用角色和状态定义,您现在可以测试某个输入是否产生预期的下一个状态:

bashaws stepfunctions teststate definition file//choicejson rolearn arnawsiamltaccountidgtrole/StepFunctionsTestStateRole input {payment{typevoucher}}

生成的响应显示测试未遇到任何错误,并且下一个状态将是调用 Lambda 函数来处理优惠券,这是预期的结果:

json{ output {payment{typevoucher}} nextState Process voucher status SUCCEEDED}

同样,对于支付类型为 credit 的输入,下一个状态将调用第三方端点:

bashaws stepfunctions teststatedefinition file//choicejsonrolearn arnawsiamltaccountidgtrole/StepFunctionsTestStateRoleinput {payment{typecredit}}

json{ output {payment{typecredit}} nextState Call payment provider status SUCCEEDED}

因为 TestState API 将状态定义作为参数,您无需在更改状态定义时重新部署状态机。相反,您可以通过将修改的状态定义传递给 TestState API 进行迭代和测试。

使用检查级别

对于每个状态,您可以指定要在测试结果中查看的详细程度。这些详细信息提供有关您正在测试的状态的额外资讯。例如,如果您使用了任何输入和输出数据处理过滤器,如 InputPath 或 ResultPath,您可以查看中间和最终的数据处理结果。Step Functions 提供了以下级别来指定您想查看的详情,包括 INFO、DEBUG 及 TRACE。所有这些级别都会返回 status 和 nextState 字段。

接下来,测试 Lambda 实例调用状态。在这个场景中,状态包含输入/输出处理。函数的输出通过重命名和重构字段并与原始输入合并进行转换。这是任务定义的相关部分:

jsonProcess voucher { Type Task Resource arnawsstateslambdainvoke Parameters {} Retry [] Next Success ResultPath voucherProcessed ResultSelector { status Payloadresult workflowId Payloadworkflow }}

这次使用 Step Functions 控制台进行测试,可以更轻松地理解输入/输出处理步骤。要开始,打开工作流程中的状态机,然后选择该状态,接著选择 Test State。确保选择 DEBUG 作为检查级别。在测试状态之后,切换到输入/输出处理选项卡以检查中间步骤。

当您调用 TestState API 并将 inspectionLevel 参数设置为 DEBUG 时,API 响应包含一个名为 inspectionData 的对象。该对象包含帮助您检查在执行状态时数据是如何过滤或操作的字段。该数据显示在控制台的输入/输出处理选项卡中。

能够轻松查看所有处理步骤的开发者可以更快地识别问题并进行迭代,从而节省时间。

测试第三方端点集成

应用程序可能会调用需要身份验证的第三方端点。Step Functions 提供 HTTPS 端点资源,以便连接 AWS Cloud 之外的第三方 HTTP 目标。

HTTPS 端点使用 Amazon EventBridge 连接 管理目标的身份验证凭据。这定义了所使用的授权类型,可以是基本身份验证使用用户名和密码、API 密钥或 OAuth。EventBridge 连接使用 AWS Secrets Manager 存储秘密。这样可以将秘密与状态机隔离,降低在日志或状态机定义中不小心公开秘密的风险。

正确设置身份验证配置可能涉及多次耗时的迭代。通过 TRACE 检查级别,开发者可以查看原始 HTTP 请求和响应,这对于验证标头、查询参数和其他 API 特定细节非常有用。该选项仅适用于 HTTP 任务。您还可以查看包含的秘密 EventBridge 连接。要这样做,您必须在 TestState API 中将 revealSecrets 参数设置为 true。这有助于验证是否使用了正确的身份验证参数。

要开始测试 HTTP 任务,请确保用于测试的执行角色拥有必要的权限,如下所示:

json{ Version 20121017 Statement [ { Effect Allow Action [ secretsmanagerGetSecretValue secretsmanagerDescribeSecret ] Resource arnawssecretsmanagerltyourregiongtltaccountidgtsecretevents!connection/ltyourconnectionidgt } ]}{ Version 20121017 Statement [ { Sid RetrieveConnectionCredentials Effect Allow Action [ eventsRetrieveConnectionCredentials ] Resource [ arnawseventsltyourregiongtltaccountidgtconnection/ltyourconnectionidgt ] } ]}{ Version 20121017 Statement [ { Sid InvokeHTTPEndpoint Effect Allow Action [ statesInvokeHTTPEndpoint ] Resource [ arnawsstatesltyourregiongtltaccountidgtstateMachineltyourstatemachinegt ] } ]}

在测试 HTTP 任务时,请确保检查级别设置为 TRACE。然后使用 HTTP 请求和响应选项卡来检查详细信息。此功能在调试复杂身份验证问题时节省了时间。

自动化测试

测试不仅仅是手动进行配置。最常情况下,测试作为一组自动执行的测试进行,有助于验证行为的正确性。这还可以防止在进行更改时出现回归。TestState API 也可以轻松集成到这些测试中。

以下片段显示了使用 JavaScript 的 Jest 框架进行的测试。该测试检查给定定义和输入时是否生成了正确的下一状态。定义位于另一个文件中,也可以用于基础设施即代码IaC来创建状态机。

javascriptconst { SFNClient TestStateCommand } = require(@awssdk/clientsfn)// 导入状态定义const definition = require(/definitionjson)

const client = new SFNClient({})

describe(Step Functions () =gt { test(that next state is correct async () =gt { const command = new TestStateCommand({ definition JSONstringify(definition) roleArn arnawsiamrole/ input {} // 根据需要调整 }) const data = await clientsend(command)

expect(datastatus)toBe(SUCCEEDED)expect(datanextState)toBe(Success) // 根据需要调整

})})

通过自动化测试,您可以安全地更改工作流程定义,无需手动参与。这样,当更改可能导致不兼容的情况时,您可以立即获得警报。

使用 TestState,可以在更少的努力下增加测试覆盖率,因为您可以直接测试状态。这对于需要特定情况才能触达的复杂工作流程和状态特别有帮助。这样可以更轻松地验证错误处理的正确性。您现在可以更轻松地测试您配置的 重试器 和 捕获器 的许多组合。

结论

TestState API 帮助开发者更快地迭代、高效解决问题,并以更高的信心交付高品质的应用程式。通过使开发者能够独立测试各个状态并将测试集成到他们喜欢的开发工作流中,它简化了调试过程并减少了上下文切换。不论是测试输入/输出处理、与外部服务的身份验证还是第三方端点集成,TestState API 都可以成为强大的测试工具。

风驰加速安卓版官网

标签 贡献 无伺服器