【问题标题】:Serverless: TypeError: Cannot read property 'stage' of undefined无服务器:TypeError:无法读取未定义的属性“阶段”
【发布时间】:2021-08-11 04:35:09
【问题描述】:

frameworkVersion: '2'

plugins:
  - serverless-step-functions
  - serverless-python-requirements
  - serverless-parameters
  - serverless-pseudo-parameters

provider:
  name: aws
  region: us-east-2
  stage: ${opt:stage, 'dev'}
  runtime: python3.7
  versionFunctions: false
  iam:
    role: arn:aws:iam::#{AWS::AccountId}:role/AWSLambdaVPCAccessExecutionRole
  apiGateway:
    shouldStartNameWithService: true
  lambdaHashingVersion: 20201221 

package:
  exclude:
    - node_modules/**
    - venv/**

# Lambda functions
functions:
  generateAlert:
    handler: handler.generateAlert

  generateData:
    handler: handler.generateDataHandler
    timeout: 600

  approveDenied:
    handler: handler.approveDenied
    timeout: 600
stepFunctions:
  stateMachines:
    "claims-etl-and-insight-generation-${self:provider.stage}":
      loggingConfig:
        level: ALL
        includeExecutionData: true
        destinations:
          - Fn::GetAtt: ["ETLStepFunctionLogGroup", Arn]
      name: "claims-etl-and-insight-generation-${self:provider.stage}"
      definition:
        Comment: "${self:provider.stage} ETL Workflow"
        StartAt: RawQualityJob
        States:

          # Raw Data Quality Check Job Start
          RawQualityJob:
            Type: Task
            Resource: arn:aws:states:::glue:startJobRun.sync
            Parameters:
              JobName: "data_quality_v2_${self:provider.stage}"
              Arguments:
                "--workflow-name": "${self:provider.stage}-Workflow"
                "--dataset_id.$": "$.datasetId"
                "--client_id.$": "$.clientId"
            Next: DataQualityChoice
            Retry:
              - ErrorEquals: [States.ALL]
                MaxAttempts: 2
                IntervalSeconds: 10
                BackoffRate: 5
            Catch:
              - ErrorEquals: [States.ALL]
                Next: GenerateErrorAlertDataQuality
          # End Raw Data Quality Check Job

          DataQualityChoice:
            Type: Task
            Resource:
              Fn::GetAtt: [approveDenied, Arn]
            Next: Is Approved ?

          Is Approved ?:
            Type: Choice
            Choices:
              - Variable: "$.quality_status"
                StringEquals: "Denied"
                Next: FailState
            Default: HeaderLineJob

          FailState:
            Type: Fail
            Cause: "Denied status"

          # Header Line Job Start
          HeaderLineJob:
            Type: Parallel
            Branches:
              - StartAt: HeaderLineIngestion
                States:
                  HeaderLineIngestion:
                    Type: Task
                    Resource: arn:aws:states:::glue:startJobRun.sync
                    Parameters:
                      JobName: headers_lines_etl_rs_v2
                      Arguments:
                        "--workflow-name.$": "$.Arguments.--workflow-name"
                        "--dataset_id.$": "$.Arguments.--dataset_id"
                        "--client_id.$": "$.Arguments.--client_id"
                    End: True
                    Retry:
                      - ErrorEquals: [States.ALL]
                        MaxAttempts: 2
                        IntervalSeconds: 10
                        BackoffRate: 5
                    Catch:
                      - ErrorEquals: [States.ALL]
                        Next: GenerateErrorAlertHeaderLine
            End: True
          # Header Line Job End

          GenerateErrorAlertDataQuality:
            Type: Task
            Resource:
              Fn::GetAtt: [generateAlert, Arn]
            End: true

 resources:
  Resources:

    # Cloudwatch Log
    "ETLStepFunctionLogGroup":
      Type: AWS::Logs::LogGroup
      Properties:
        LogGroupName: "ETLStepFunctionLogGroup_${self:provider.stage}"

这就是我的 serverless.yml 文件的样子。

当我运行命令时:

sls deploy --stage staging

它显示

类型错误 --------------------------------------------- -

TypeError:无法读取未定义的属性“阶段” 在 Variables.getValueFromOptions (/snapshot/serverless/lib/classes/Variables.js:648:37) 在 Variables.getValueFromSource (/snapshot/serverless/lib/classes/Variables.js:579:17) 在 /snapshot/serverless/lib/classes/Variables.js:539:12

您的环境信息 --------------- 操作系统:linux 节点版本:14.4.0 框架版本:2.30.3(独立) 插件版本:4.5.1 SDK版本:4.2.0 组件版本:3.7.4

我该如何解决这个问题?我尝试了不同版本的无服务器。 由 serverless-step-functions 提供的 yamlParser 文件中存在错误。 以上是我的无服务器配置文件。

【问题讨论】:

  • 在大多数情况下,这是由于无服务器 yml 文件中的配置错误或拼写错误造成的。你能发布你的整个无服务器配置文件吗?
  • @ReazMurshed,我已经更新了帖子,请检查

标签: serverless-framework serverless


【解决方案1】:

您的提供商似乎缺少$ 标志 -> 阶段?

provider:
  name: aws
  region: us-east-2
  stage: ${opt:stage, 'dev'} # $ sign is missing?
  runtime: python3.7
  versionFunctions: false
  iam:
    role: arn:aws:iam::#{AWS::AccountId}:role/AWSLambdaVPCAccessExecutionRole
  apiGateway:
    shouldStartNameWithService: true
  lambdaHashingVersion: 20201221

【讨论】:

  • 对不起,我打错了。这是无服务器文件中的```stage: ${opt:stage, 'dev'}```
猜你喜欢
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多