微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 CDK L1 构造上为步进函数设置定义替换 (CfnStateMachine)

如何解决无法在 CDK L1 构造上为步进函数设置定义替换 (CfnStateMachine)

在尝试使用 CDK L1 构造创建步进函数 (CfnStateMachine) 时,我无法找到传递 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 包如何检查是否存在潜在问题传入的数据?

解决方法

一些示例代码会很有帮助。但是让我们假设您有一个步骤函数,其中的步骤需要替换一些值。您应该像“${placeholder}”一样指定该值,如下所示:

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

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

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

注意 SomeValue 必须是字符串。另请注意, definitionSubstitutions 没有包裹密钥的 ${},它仅在 stepfunction 文件中使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。