有没有一种方法可以获得在AWS CDK中创建的状态机的亚马逊状态语言JSON表示



我的CDK基础结构(一个类型脚本文件(有一个lambda,它将在运行时创建一个新的状态机。要做到这一点,它需要我想要创建的机器的Amazon State Langauge JSON表示。我已经在我的AWS基础设施类型脚本文件中创建了状态机,因为许多状态都引用了这个基础设施中的lambdas或dynamoDB表。

我的问题是,给定一个CDK状态机(这是它的CDK文档,也是Step Function的Chain类的文档,它基本上代表CDK中的ASL JSON(,你能生成ASL JSON表示吗?在我的情况下,这样我就可以将这个ASL JSON传递到lambda的一个环境中。

根据文档,这似乎是不可能的,这对我来说很奇怪,因为你可以在AWS控制台上查看,点击你的状态机,然后点击";定义";选项卡,并查看ASL JSON。在定义和创建状态机的CDK基础结构中,必须有某种方法来访问它。

是的,您可以在合成时将L2StateMachine生成的JSON定义传递给Lambda。该定义在其L1 CfnSteMachine子构造上公开。使用转义填充语法获取对CfnStateMachine的引用。将其字符串化定义作为环境变量传递给Lambda。

// MyStack.ts
const sm = new sfn.StateMachine(this, 'StateMachine', {definition: new sfn.Succeed(this, 'SuccessTask'),});
const cfnSm = sm.node.defaultChild as sfn.CfnStateMachine;  // cast to L1 type
if (!cfnSm.definitionString) throw new Error('CfnStateMachine definitionString must be defined');
new lambda.Function(this, 'MyFunction', {
// ...
environment: { SM_DEFINITION: cfnSm.definitionString,},
});

注:

  1. 或者,Lambda可以在运行时使用DescribeStateMachine API获取定义
  2. 字符串化的JSON定义在合成后(用于测试等(cdk.out目录中的合成堆栈模板中可用

最新更新