由 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 而无需在运行时填写值