无法获取 TableName 无服务器框架:参数中缺少必需的键 'TableName'
Unable to fetch TableName Serverless Framework: Missing required key 'TableName' in params
我首先遵循此 YouTube tutorial 尝试使用无服务器框架开发无服务器休息 api。它给出了 MissingRequiredParameter 错误并将 table name 初始化为 undefined.
为了缓解这个问题,我在 GitHub 上找到了类似的代码,但部署它也会出现同样的错误。
以下是云观察中的控制台日志:
2021-06-19T23:12:12.606Z 97a3c3b8-375b-4e12-9b89-7ad1e44f1873 INFO Error saving the kitten to the DB: MissingRequiredParameter: Missing required key 'TableName' in params
at ParamValidator.fail (/var/task/node_modules/aws-sdk/lib/param_validator.js:50:37)
at ParamValidator.validateStructure (/var/task/node_modules/aws-sdk/lib/param_validator.js:61:14)
at ParamValidator.validateMember (/var/task/node_modules/aws-sdk/lib/param_validator.js:88:21)
at ParamValidator.validate (/var/task/node_modules/aws-sdk/lib/param_validator.js:34:10)
at Request.VALIDATE_PARAMETERS (/var/task/node_modules/aws-sdk/lib/event_listeners.js:132:42)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at callNextListener (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:96:12)
at /var/task/node_modules/aws-sdk/lib/event_listeners.js:86:9
at finish (/var/task/node_modules/aws-sdk/lib/config.js:386:7)
at /var/task/node_modules/aws-sdk/lib/config.js:404:9 {
code: 'MissingRequiredParameter',
time: 2021-06-19T23:12:12.603Z
}
2021-06-19T23:12:12.606Z 97a3c3b8-375b-4e12-9b89-7ad1e44f1873 DEBUG putParams: { TableName: undefined, Item: { name: 'Fluffy', age: 4 } }
它给出错误 502 Bad Gateway
serverless.yaml 文件
service: lambda-kittens-app
provider:
name: aws
runtime: nodejs12.x
iamRoleStatements:
- Effect: 'Allow'
Action:
- dynamodb:PutItem
- dynamodb:Scan*
- dynamodb:GetItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: arn:aws:dynamodb:#{AWS::Region}:#{AWS::AccountId}:table/${self:service}-kittens-${opt:stage}
environment:
DYNAMODB_KITTEN_TABLE: ${self:service}-kittens-${opt:stage}
functions:
create:
handler: handler.createKitten
events:
- http:
path: /v1/kitten
method: post
list:
handler: handler.listKitten
events:
- http:
path: /v1/kitten
method: get
get:
handler: handler.getKitten
events:
- http:
path: /v1/kitten/{name}
method: get
update:
handler: handler.updateKitten
events:
- http:
path: /v1/kitten/{name}
method: patch
delete:
handler: handler.deleteKitten
events:
- http:
path: /v1/kitten/{name}
method: delete
resources:
Resources:
kittensTable:
Type: 'AWS::DynamoDB::Table'
Properties:
TableName: ${self:service}-kittens-${opt:stage}
AttributeDefinitions:
- AttributeName: name
AttributeType: S
KeySchema:
- AttributeName: name
KeyType: HASH
BillingMode: PAY_PER_REQUEST
Plugins:
- serverless-pseudo-parameters
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
对 db-handler.js
所做的更改
AWS.config.update({ region: 'us-east-1' });
感谢您的帮助。谢谢!
注意:我确实检查了几种解决方案,但其中 none 似乎有效。
错误消息说您正在使用 Tablename
,而不是 TableName
。
没有看到您的应用程序代码,我无法确定。
但是我认为你正在做这样的事情:
const documentClient = new DynamoDB.DocumentClient({ params: { TableName: process.env.DYNAMODB_KITTEN_TABLE } });
... // Put call
我注意到在您的 serverless.yml
中,environment:
块位于根级别。那行不通,因此您的环境变量已设置 undefined/not。
environment
块在 provider
块内,或在 function
块内(取决于您是否要为每个函数或所有函数设置环境变量你的筹码):
provider:
name: aws
runtime: nodejs12.x
environment:
DYNAMODB_KITTEN_TABLE: ${self:service}-kittens-${opt:stage}
我在使用 tableName 时遇到了一些问题。我使用正确的 tableName 解决了它。
我的代码如下所示:
const tableName = process.env.COURSE_TABLE;
exports.handler = async (event) => {
const saveParams = {
TableName:tableName
}
};
我首先遵循此 YouTube tutorial 尝试使用无服务器框架开发无服务器休息 api。它给出了 MissingRequiredParameter 错误并将 table name 初始化为 undefined.
为了缓解这个问题,我在 GitHub 上找到了类似的代码,但部署它也会出现同样的错误。
以下是云观察中的控制台日志:
2021-06-19T23:12:12.606Z 97a3c3b8-375b-4e12-9b89-7ad1e44f1873 INFO Error saving the kitten to the DB: MissingRequiredParameter: Missing required key 'TableName' in params
at ParamValidator.fail (/var/task/node_modules/aws-sdk/lib/param_validator.js:50:37)
at ParamValidator.validateStructure (/var/task/node_modules/aws-sdk/lib/param_validator.js:61:14)
at ParamValidator.validateMember (/var/task/node_modules/aws-sdk/lib/param_validator.js:88:21)
at ParamValidator.validate (/var/task/node_modules/aws-sdk/lib/param_validator.js:34:10)
at Request.VALIDATE_PARAMETERS (/var/task/node_modules/aws-sdk/lib/event_listeners.js:132:42)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at callNextListener (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:96:12)
at /var/task/node_modules/aws-sdk/lib/event_listeners.js:86:9
at finish (/var/task/node_modules/aws-sdk/lib/config.js:386:7)
at /var/task/node_modules/aws-sdk/lib/config.js:404:9 {
code: 'MissingRequiredParameter',
time: 2021-06-19T23:12:12.603Z
}
2021-06-19T23:12:12.606Z 97a3c3b8-375b-4e12-9b89-7ad1e44f1873 DEBUG putParams: { TableName: undefined, Item: { name: 'Fluffy', age: 4 } }
它给出错误 502 Bad Gateway
serverless.yaml 文件
service: lambda-kittens-app
provider:
name: aws
runtime: nodejs12.x
iamRoleStatements:
- Effect: 'Allow'
Action:
- dynamodb:PutItem
- dynamodb:Scan*
- dynamodb:GetItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: arn:aws:dynamodb:#{AWS::Region}:#{AWS::AccountId}:table/${self:service}-kittens-${opt:stage}
environment:
DYNAMODB_KITTEN_TABLE: ${self:service}-kittens-${opt:stage}
functions:
create:
handler: handler.createKitten
events:
- http:
path: /v1/kitten
method: post
list:
handler: handler.listKitten
events:
- http:
path: /v1/kitten
method: get
get:
handler: handler.getKitten
events:
- http:
path: /v1/kitten/{name}
method: get
update:
handler: handler.updateKitten
events:
- http:
path: /v1/kitten/{name}
method: patch
delete:
handler: handler.deleteKitten
events:
- http:
path: /v1/kitten/{name}
method: delete
resources:
Resources:
kittensTable:
Type: 'AWS::DynamoDB::Table'
Properties:
TableName: ${self:service}-kittens-${opt:stage}
AttributeDefinitions:
- AttributeName: name
AttributeType: S
KeySchema:
- AttributeName: name
KeyType: HASH
BillingMode: PAY_PER_REQUEST
Plugins:
- serverless-pseudo-parameters
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
对 db-handler.js
所做的更改AWS.config.update({ region: 'us-east-1' });
感谢您的帮助。谢谢!
注意:我确实检查了几种解决方案,但其中 none 似乎有效。
错误消息说您正在使用 Tablename
,而不是 TableName
。
没有看到您的应用程序代码,我无法确定。 但是我认为你正在做这样的事情:
const documentClient = new DynamoDB.DocumentClient({ params: { TableName: process.env.DYNAMODB_KITTEN_TABLE } });
... // Put call
我注意到在您的 serverless.yml
中,environment:
块位于根级别。那行不通,因此您的环境变量已设置 undefined/not。
environment
块在 provider
块内,或在 function
块内(取决于您是否要为每个函数或所有函数设置环境变量你的筹码):
provider:
name: aws
runtime: nodejs12.x
environment:
DYNAMODB_KITTEN_TABLE: ${self:service}-kittens-${opt:stage}
我在使用 tableName 时遇到了一些问题。我使用正确的 tableName 解决了它。
我的代码如下所示:
const tableName = process.env.COURSE_TABLE;
exports.handler = async (event) => {
const saveParams = {
TableName:tableName
}
};