无法为步骤函数(CfnSteMachine)在CDK L1构造上设置definitionSubstitutions



当尝试使用CDK L1构造来创建步骤函数(CfnSteMachine(时,我无法找到正确的方法来传递definitionSubstitutions以使堆栈正确部署。

尝试传递对象或映射会导致在生成的CFT中没有分配值,即DefinitionSubstitutions: {}-我能够获得分配值的唯一方法(在运行cdk synth之后(是传递字符串,但在这种情况下,部署到帐户会导致错误:Model validation failed (#/DefinitionSubstitutions: expected type: JSONObject, found: String)

通过查看用于将应用程序合成为CFT(node_modules/@aws-cdk/aws-stepfunctions/lib/stepfunctions.generated.js(的生成的CDK代码,我可以看到它在此处未通过if检查(导致返回空对象(:

function cfnStateMachineDefinitionSubstitutionsPropertyToCloudFormation(properties) {
if (!cdk.canInspect(properties)) {
return properties;
}
CfnStateMachine_DefinitionSubstitutionsPropertyValidator(properties).assertSuccess();
return {};
}

但是,如果我删除这个if检查并传递一个对象,那么该值将以期望的格式返回。

因此,问题是:我是不是为这个参数输入了错误的东西(我在网上搜索了很多例子,但都没有结果(,还是CDK包如何检查传入的数据可能存在问题?

一点示例代码会很有帮助。但让我们想象一下,你有一个步长函数,其中一个步长需要替换一些值。您应该指定类似于"${占位符}";如下所示:

...
"some step":{
"Type":"Task",
"Resource":"Some Resource",
"Parameters":{
"SomeParameter":"${somePlaceHolder}"
},
"Next":"Some next step"
}
...

然后,在部署步骤函数的相应CDK中,将该占位符指定为definitionSubstitutions对象的键,并将其与要替换的值关联起来:

...
definitionSubstitutions:{"somePlaceHolder":SomeValue}
...

请注意,SomeValue必须是字符串。还要注意的是,definitionSubstitutions没有${}包装键,这只在stepfunction文件中使用。

最新更新