无服务器部署失败

Serverless deploy fails

我正在尝试使用无服务器将我的 lambda 函数部署到 AWS。执行时

serverless deploy --verbose

我每次都收到以下错误:

Serverless Error ---------------------------------------

An error occurred: mainTable - Invalid KeySchema: The first > KeySchemaElement is not a HASH key type (Service: AmazonDynamoDBv2;Status Code: 400; Error Code: ValidationException; Request ID: EACEH0RDMBR36TR0DDBGODTRT3VV4KQNSO5AEMVJF66Q9ASUAAJG).

我的 serverless.yml 看起来如下:

service: backend-1 # NOTE: update this with your service name


provider:
  name: aws
  runtime: nodejs10.x
  stage: dev
  region: eu-central-1


functions:
  graphql:
    handler: src/handler.graphql
    events:
    - http:
        path: graphql
        method: post
        cors: true

plugins:
- serverless-webpack
- serverless-offline

custom:
  webpack:
    webpackCOnfig: 'webpack.config.js'
    includeModules: true
    packager: 'npm'
  stage: ${opt:stage, self:provider.stage}

resources:
  Resources:
    mainTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: main_${self:custom.stage}
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
          - AttributeName: sort
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
          - AttributeName: sort
            KeyType: RANGE
        BillingMode: PAY_PER_REQUEST
        GlobalSecondaryIndexes:
        - IndexName: spinned-primary
          KeySchema:
          - AttributeName: id
            KeyType: RANGE
          - AttributeName: sort
            KeyType: HASH
          Projection:
            ProjectionType: ALL
    labelTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: labels_${self:custom.stage}
        AttributeDefinitions:
          - AttributeName: sort
            AttributeType: S
          - AttributeName: label
            AttributeType: S
        KeySchema:
          - AttributeName: sort
            KeyType: HASH
          - AttributeName: label
            KeyType: RANGE
        BillingMode: PAY_PER_REQUEST
        GlobalSecondaryIndexes:
        - IndexName: spinned-primary
          KeySchema:
          - AttributeName: sort
            KeyType: RANGE
          - AttributeName: label
            KeyType: HASH
          Projection:
              ProjectionType: ALL
    logTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: logs_${self:custom.stage}
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
          - AttributeName: sort
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
          - AttributeName: sort
            KeyType: RANGE
        BillingMode: PAY_PER_REQUEST

你们中有人可以帮忙吗?

干杯!

使用 KeySchemaElements 时,HASH 键类型必须在 RANGE 键类型之前。

在你的 YAML 中,在你的 GSI 上用于 spinned-primary,你必须将 HASH 键类型放在 RANGE 键类型之前;切换它们,使 HASH 成为该元素中的第一个键类型。