Как устранить ошибку безсерверного фреймворка Ошибка формата шаблона

#serverless-framework #aws-serverless

#бессерверный фреймворк #aws-бессерверная

Вопрос:

Тестирование, изучение бессерверного фреймворка. Я пытаюсь развернуть простой / базовый конечный автомат с двумя простыми лямбда-функциями. Определение Serverless следующим образом:

 frameworkVersion: '2'

app: state-machine
org: macdrorepo

service: state-machine

plugins:
  - serverless-python-requirements
  - serverless-iam-roles-per-function
  - serverless-step-functions
  - serverless-pseudo-parameters

custom:
  pythonRequirements:
    dockerizePip: non-linux
    slim: true
    zip: true

provider:
  name: aws
  runtime: python3.8
  region: eu-central-1
  stage: ${opt:stage, 'testing'}
  timeout: 30

package:
  individually: true
  exclude:
    - node_modules/**
    - .git/**
    - .venv/**

functions:
  processpurchase:
    module: state-machine
    memorySize: 128
    stages:
      - testing
      - dev
    handler: ProcessPurchase.process_purchase

  processrefund:
    module: state-machine
    memorySize: 128
    stages:
      - testing
      - dev
    handler: ProcessRefund.process_refund

stepFunctions:
  validate: true
  stateMachines:
    TransactionChoiceMachine:
      name: ChoiceMachineTest-${self:provider.stage}
      dependsOn: CustomIamRole
      definition:
        Comment: "Purchase refund choice"
        StartAt: ProcessTransaction
        States:
          ProcessTransaction:
            Type: Choice
            Choices:
              - Variable: "$.TransactionType"
                StringEquals: PURCHASE
                Next: PurchaseState
              - Variable: "$.TransactionType"
                StringEquals: REFUND
                Next: RefundState
          PurchaseState:
            Type: Task
            Resource:
              Fn::GetAtt: [processpurchase, Arn]
            End: true
          RefundState:
            Type: Task
            Resource:
              Fn::GetAtt: [processrefund, Arn]
            End: true
 

Во время развертывания sls сообщает, что мое определение конечного автомата в порядке: State machine "TransactionChoiceMachine" definition is valid

Информация о моей среде:

   Your Environment Information ---------------------------
     Operating System:          linux
     Node Version:              12.20.0
     Framework Version:         2.14.0
     Plugin Version:            4.1.2
     SDK Version:               2.3.2
     Components Version:        3.4.3
 

Установка SLS_DEBUG=* мне не очень помогает, поскольку я, к сожалению, не знаю js.

После команды развертывания без сервера я получаю сообщение об ошибке:

Error: The CloudFormation template is invalid: Template format error: Unresolved resource dependencies [CustomIamRole] in the Resources block of the template

Ответ №1:

Похоже, вы ссылаетесь на что-то под названием CustomIamRole при создании конечного автомата, но я не вижу, чтобы оно создавалось где-либо в файле yaml. Либо создайте роль и используйте ее при создании, либо удалите зависящую от части.