首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CFN模板本地动态创建步骤函数状态机

从CFN模板本地动态创建步骤函数状态机
EN

Stack Overflow用户
提问于 2022-08-15 23:56:09
回答 1查看 187关注 0票数 0

目标

我正在尝试从生成的云形成(CFN)模板本地动态地创建状态机。我需要能够这样做,而无需部署到AWS帐户或手动创建定义字符串。

问题

如何将CFN模板“构建”到可以在本地使用的定义字符串?

是否有可能达到我最初的目标?如果没有,其他人如何在本地成功测试SFN?

设置

我正在使用Cloud (CDK)编写状态机定义,并使用cdk synth生成CFN json模板。我遵循来自AWS的指示创建了一个本地Docker容器来承载Step函数(SFN)。我能够使用AWS在本地SFN实例上成功地创建、运行等状态机。我还托管了一个DynamoDB Docker实例,并使用sam local start-lambda托管我的lambdas。这一切都如预期的那样起作用。

为了简化本地测试,我编写了一系列bash脚本,通过调用AWS动态解析CFN模板并创建json输入文件。在编写没有引用的简单状态机(没有lambdas、来自其他堆栈的资源等)时,这是非常成功的。当我想要创建和测试一个更复杂的状态机时,问题就出现了。生成的CFN模板中的状态机DefinitionString如下所示:

代码语言:javascript
复制
{'Fn::Join': ['', ['{
  "StartAt": "Step1",
  "States": {
        {
          "StartAt": "Step1",
          "States": {
            "Step1": {
              "Next": "Step2",
              "Retry": [
                {
                  "ErrorEquals": [
                    "Lambda.ServiceException",
                    "Lambda.AWSLambdaException",
                    "Lambda.SdkClientException"
                  ],
                  "IntervalSeconds": 2,
                  "MaxAttempts": 6,
                  "BackoffRate": 2
                }
              ],
              "Type": "Task",
              "Resource": "arn:', {'Ref': 'AWS::Partition'}, ':states:::lambda:invoke",
              "Parameters": {
                "FunctionName": "', {'Fn::ImportValue': 'OtherStackE9E150CFArn77689D69'}, '",
                "Payload.$": "$"
              }
            },
            "Step2": {
              "Next": "Step3",
              "Retry": [
                {
                  "ErrorEquals": [
                    "Lambda.ServiceException",
                    "Lambda.AWSLambdaException",
                    "Lambda.SdkClientException"
                  ],
                  "IntervalSeconds": 2,
                  "MaxAttempts": 6,
                  "BackoffRate": 2
                }
              ],
              "Type": "Task",
              "Resource": "arn:', {'Ref': 'AWS::Partition'}, ':states:::lambda:invoke",
              "Parameters": {
                "FunctionName": "', {'Fn::ImportValue': 'OtherStackE9E150CFArn77689D69'}, '",
                "Payload.$": "$"
              }
            }
          }
        }
      ]
  },
  "TimeoutSeconds": 10800
}']]}

问题

AWS不支持json对象,不支持CFN函数(如'Fn::Join' ),定义字符串中不允许引用({'Ref': 'AWS::Partition'})。

EN

回答 1

Stack Overflow用户

发布于 2022-08-23 02:43:09

这里不可能有任何魔法来完成这件事。CDK呈现CloudFormation,而CloudFormation并不是真正的ASL,因为它包含对其他资源的引用,正如您所指出的。

您可以选择的一个方向是将SFN部署到沙箱堆栈,并允许CFN取消引用所有值并在服务中生成SFN,然后重新提取该ASL以进行本地测试。

这很麻烦,但我不知道其他方法,除非您想要开始编写将所有JSON本质(如Fn:Join)转换为静态字符串的解析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73367470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档