微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

缺少密钥 ID,在 [无服务器框架 + lambda + dynamodb] 项中

如何解决缺少密钥 ID,在 [无服务器框架 + lambda + dynamodb] 项中

下面是dynamo-table.yml

/opt

以下是在 dynamodb 中插入记录的处理程序代码

Resources:
  AuctionsTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: AuctionsTable
        BillingMode: PAY_PER_REQUEST
        AttributeDeFinitions:
          - AttributeName: id,AttributeType: S
        KeySchema:
          - AttributeName: id,KeyType: HASH

以下是 import AWS from 'aws-sdk'; import { v4 as uuid } from 'uuid'; const dynamodb = new AWS.DynamoDB.DocumentClient(); async function createAuction(event,context) { const { title } = JSON.parse(event.body); const Now = new Date(); const params = { TableName: 'AuctionsTable',Item: { 'id' : {S: `${uuid()}`},'title' : {S: `${title}`},'status': {S: `OPEN`},'createdAt': {S: Now.toISOString()} } }; console.log(`Auction: ${JSON.stringify(params)}`); await dynamodb.put(params).promise(); return { statusCode: 201,body: JSON.stringify(params),}; } export const handler = createAuction; 文件内容

serverless.yml

问题:当我点击 POST URL 并访问 CloudWatch 日志时,以下是错误

service:
  name: auction-service

plugins:
  - serverless-bundle
  - serverless-pseudo-parameters

provider:
  name: aws
  runtime: nodejs12.x
  memorySize: 128
  stage: ${opt:stage,'dev'}
  region: ap-south-1
resources:
  - ${file(src/resources/dynamodb-table.yml)}
  - ${file(src/resources/role.yml)}

functions:
  createAuction:
    handler: src/handlers/createAuction.handler
    role: auctionServiceRole
    events:
      - http:
          method: POST
          path: /auction

custom:
  bundle:
    linting: false
  tableName: "AuctionsTables"

同样在邮递员中,它返回状态代码为 502 Bad gateway,

{
    "errorType": "ValidationException","errorMessage": "One or more parameter values were invalid: Missing the key id,in the item","code": "ValidationException","message": "One or more parameter values were invalid: Missing the key id,"time": "2021-02-15T15:02:42.606Z","requestId": "C344O7CTTHF3PAR1OP8BQIFBT7VV4KQNSO5AEMVJF66Q9ASUAAJG","statusCode": 400,"retryable": false,"retryDelay": 8.687787589723229,"stack": [
        "ValidationException: One or more parameter values were invalid: Missing the key id,"    at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:52:27)","    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:688:14)","    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)","    at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)","    at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10","    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)","    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:690:12)","    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18)"
    ]
}

问题:可能是什么问题?即使是一个小小的帮助也会非常有帮助。提前致谢。

解决方法

我不确定您是否正确使用 DocumentClient API。例如,您有

    Item: {
      'id' : {S: `${uuid()}`},'title' : {S: `${title}`},'status': {S: `OPEN`},'createdAt': {S: now.toISOString()}
    }

而且我只用过这种方式:

    Item: {
      id :  uuid(),title : title,status: "OPEN",createdAt: now.toISOString()
    }

也许这就是 aws-sdk 抱怨缺少 id 密钥的原因。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。