Cloudformation - 无法导入资源

时间:2018-04-05 08:47:34

标签: aws-lambda amazon-cloudformation aws-step-functions

我正在创建步骤函数,并希望在云形式代码中引用Lambda函数。 lambda已经从单独的堆栈创建,并从该堆栈导出为LambdaA

当我尝试将LambdaA导入我的步骤功能代码时,我遇到了问题。

这是我的cloudformation摘录。

ABCStateMachine:
Type: 'AWS::StepFunctions::StateMachine'
Properties:
  StateMachineName: 'AbcStateMachine_1.0'
  RoleArn: 
    Fn::GetAtt: [ AbcStateMachineRole, Arn ] 
  DefinitionString: 
    Fn::Sub:
      - |-
        {
          "StartAt": "DoStuff",
          "Version": "1.0",
          "States": {
            "DoStuff" : {
              "Type": "Task",
              "Comment": "Does some stuff.,
              "Resource": {"Fn::ImportValue": "LambdaA"}, # error here
              "Next": "IsStuffDone"
            },
            "IsStuffDone": {
              "Type": "Choice",
            ...
            ...

我在Cloudformation控制台中收到以下错误:

  

无效的状态机定义:'/ DoStuff / Resource'的'SCHEMA_VALIDATION_FAILED'(服务:AWSStepFunctions;状态代码:400;错误代码:InvalidDefinition。

知道这里可能出现什么问题吗?

1 个答案:

答案 0 :(得分:1)

您不能在Fn::Sub函数中使用其他内在函数。但Fn::Sub提供了解决此问题的方法。它的工作方式有点像format函数可以在其他编程语言中使用。以下是您的具体案例的例子:

ABCStateMachine:
Type: 'AWS::StepFunctions::StateMachine'
Properties:
  StateMachineName: 'AbcStateMachine_1.0'
  RoleArn: 
    Fn::GetAtt: [ AbcStateMachineRole, Arn ] 
  DefinitionString: 
    Fn::Sub:
      - |-
        {
          "StartAt": "DoStuff",
          "Version": "1.0",
          "States": {
            "DoStuff" : {
              "Type": "Task",
              "Comment": "Does some stuff.,
              "Resource": ${LambdaToImport}, # error here
              "Next": "IsStuffDone"
            }
            ...
          }
          ...
        }
      - LambdaToImport:
          Fn::ImportValue: LambdaA