由 CDK 定义时,是不是可以在本地运行 AWS Step Functions?

Posted

技术标签:

【中文标题】由 CDK 定义时,是不是可以在本地运行 AWS Step Functions?【英文标题】:Is there a way of running AWS Step Functions locally when defined by CDK?由 CDK 定义时,是否可以在本地运行 AWS Step Functions? 【发布时间】:2020-11-30 13:44:45 【问题描述】:

AWS Step Functions 可以使用 Step Functions Local Docker 在本地 Docker 环境中运行。但是,需要使用基于 JSON 的Amazon States Language 定义步进函数。如果您的 AWS 基础设施(Step Functions 和 lambdas)是使用 AWS CDK/CloudFormation 定义的,这一点都不方便。

有没有办法从 CDK 或 CloudFormation 输出创建状态机的 Amazon 状态语言定义,以便可以在本地运行步进函数?

我的开发周期目前需要 30 分钟来在 AWS 中构建/部署/运行基于 Lambda 的步进函数,以便对其进行测试,而且肯定有比这更好/更快的测试方法。

【问题讨论】:

【参考方案1】:

我们已经能够通过以下方式实现这一目标:

下载:

https://docs.aws.amazon.com/step-functions/latest/dg/sfn-local.html

要在本地运行阶跃函数,请在您提取本地阶跃函数文件的目录中运行:

java -jar StepFunctionsLocal.jar --lambda-endpoint http://localhost:3003

要创建状态机,您需要一个 json 定义(它可以从生成的模板中提取,也可以为 Vs 代码获取 toolkit plug in,键入步骤函数,从模板中选择,这可以是您的入门。可以也可以从 AWS 控制台的 step 函数的定义选项卡中获取它。

在定义json的同一目录下运行此命令:

aws stepfunctions --endpoint http://localhost:8083 create-state-machine --definition "cat step-function.json" --name "local-state-machine" --role-arn "arn:aws:iam: :012345678901:role/DummyRole"

你现在应该可以打SF了(希望如此):)

【讨论】:

【参考方案2】:

您可以使用 cdk watch--hotswap 选项来部署更新后的状态机或 Lambda 函数,而无需部署 CloudFormation。

https://aws.amazon.com/blogs/developer/increasing-development-speed-with-cdk-watch/

如果您想在本地使用 Step Functions 进行测试,cdk synth 会生成包含状态机的 ASL JSON 定义的 CloudFormation 代码。如果您得到它并替换 CloudFormation 引用和内部函数,则可以使用它在 Step Functions Local 中创建和执行状态机。

有些人是如何实现自动化的:

https://nathanagez.com/blog/mocking-service-integration-step-functions-local-cdk/ https://github.com/kenfdev/step-functions-testing

【讨论】:

以上是关于由 CDK 定义时,是不是可以在本地运行 AWS Step Functions?的主要内容,如果未能解决你的问题,请参考以下文章

AWS CDK - 如何在本地运行 API 和 Lambda?

无法解析要使用的 AWS 账户。它必须在定义 CDK 堆栈时进行配置,或者通过环境进行配置

如何在 AWS CDK 中使用 CfnParameter 而无需在运行时填写值

如何使用 aws-cdk 从 AWS Secrets Manager 导入 EKS 密钥?

在 aws cdk 中安装软件包时面临的问题

使用 aws cdk 创建 sam canary 部署