Конечный автомат CloudFormation YAML: INVALID_JSON_DESCRIPTION для нераспознанного токена - PullRequest
0 голосов
/ 27 мая 2020

У меня есть следующий код для развертывания конечного автомата Step Functions с использованием CloudFormation:

...
DefinitionString: 
        !Sub
          - |
            {
              "StartAt": "Save Artifact to S3",
              "States": {
                "Save Artifact to S3": {
                  "Type": "Task",
                  "Resource": ${lambdaArn},
                  "Next": "Format Notification"
                },
                "Format Notification": {
                  "Type": "Task",
                  "Resource": ${lambda2Arn},
                  "Next": "Publish to SNS"
                },
                "Publish to SNS": {
                  "Type": "Task",
                  "Resource": "arn:aws:states:::sns:publish",
                  "Parameters": {
                    "TopicArn": ${snsArn},
                    "Message.$": "$.message",
                    "Subject.$": "$.subject"
                  },
                  "End": true
                }
              }
            }
          - lambdaArn: !GetAtt SavetoS3Function.Arn
            lambda2Arn: !GetAtt NotifyUserFunction.Arn
            snsArn: !Ref NotifyUserTopic
...

Используя SAM для развертывания на AWS, я получаю следующую ошибку:

Invalid State Machine Definition: 'INVALID_JSON_DESCRIPTION: Unrecognized token 'arn': was expecting ('true', 'false' or 'null')  at [Source: (String)...

Все остальное выглядит правильно, так что здесь происходит? Все Arns правильно упоминаются внутри строки определения, так что проблема, вероятно, не в этом.

1 Ответ

1 голос
/ 27 мая 2020

Это должно быть json, поэтому lambdaArn, lambda2Arn и snsArn должны быть в кавычках :

        {
          "StartAt": "Save Artifact to S3",
          "States": {
            "Save Artifact to S3": {
              "Type": "Task",
              "Resource": "${lambdaArn}",
              "Next": "Format Notification"
            },
            "Format Notification": {
              "Type": "Task",
              "Resource": "${lambda2Arn}",
              "Next": "Publish to SNS"
            },
            "Publish to SNS": {
              "Type": "Task",
              "Resource": "arn:aws:states:::sns:publish",
              "Parameters": {
                "TopicArn": "${snsArn}",
                "Message.$": "$.message",
                "Subject.$": "$.subject"
              },
              "End": true
            }
          }
...