无法在本地查询Lambda中的dynamodb GSI

问题描述

因此,为了使用我在graphql模式中使用@key指令创建的GSI(全局二级索引)中的数据查询,我使用了放大CLI来添加了一个lambda函数类别。每当我尝试使用amplify mock function <functionName>在本地模拟该函数时,查询的回调函数都会不断返回null。该功能可以在下面看到

const AWS = require("aws-sdk");
const db = new AWS.DynamoDB.DocumentClient({
  region: process.env.REGION,apiVersion: "2012-08-10",});


 const params = {
  // ProjectionExpression: ["province","gender","updatedAt","createdAt"],ExpressionAttributeValues: {
    ":provinceVal": "Sichuan",},IndexName: "RegistreesByProvince",KeyConditionExpression: "province = :provinceVal",TableName: process.env.API_PORTAL_SUBMISSIONSTABLE_NAME,};

const calculateStatistics = async () => {
  try {
    const data = await db.query(params).promise();
    console.log(data);
  } catch (err) {
    console.log(err);
  }
};

const resolvers = {
  Query: {
    getStatistics: () => {
      return calculateStatistics();
    },};
exports.handler = async (event) => {
  // TODO implement
  const typeHandler = resolvers[event.typeName];
  if (typeHandler) {
    const resolver = typeHandler[event.fieldName];
    if (resolver) {
      var result = await resolver(event);
      return result;
    }
  }
}; // };

然后我试图捕获整个事件,并将其记录到控制台,如在calculateStatistics函数中所见,该函数现在向我显示了一些更明确的错误,如下所示。

     { UnknownEndpoint: Inaccessible host: `dynamodb.us-east-1-fake.amazonaws.com'. This service may not be available in the `us-east-1-fake' region.
    at Request.ENOTFOUND_ERROR (/Users/apple/Documents/work/web/portal/amplify/backend/function/calcStatistics/src/node_modules/aws-sdk/lib/event_listeners.js:501:46)
    at Request.callListeners (/Users/apple/Documents/work/web/portal/amplify/backend/function/calcStatistics/src/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/Users/apple/Documents/work/web/portal/amplify/backend/function/calcStatistics/src/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/Users/apple/Documents/work/web/portal/amplify/backend/function/calcStatistics/src/node_modules/aws-sdk/lib/request.js:688:14)
    at ClientRequest.error (/Users/apple/Documents/work/web/portal/amplify/backend/function/calcStatistics/src/node_modules/aws-sdk/lib/event_listeners.js:339:22)
    at ClientRequest.<anonymous> (/Users/apple/Documents/work/web/portal/amplify/backend/function/calcStatistics/src/node_modules/aws-sdk/lib/http/node.js:96:19)
    at ClientRequest.emit (events.js:198:13)
    at ClientRequest.EventEmitter.emit (domain.js:448:20)
    at TLSSocket.socketErrorListener (_http_client.js:401:9)
    at TLSSocket.emit (events.js:198:13)
  message:
   'Inaccessible host: `dynamodb.us-east-1-fake.amazonaws.com\'. This service may not be available in the `us-east-1-fake\' region.',code: 'UnknownEndpoint',region: 'us-east-1-fake',hostname: 'dynamodb.us-east-1-fake.amazonaws.com',retryable: true,originalError:
   { Error: getaddrinfo ENOTFOUND dynamodb.us-east-1-fake.amazonaws.com dynamodb.us-east-1-fake.amazonaws.com:443
       at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
     message:
      'getaddrinfo ENOTFOUND dynamodb.us-east-1-fake.amazonaws.com dynamodb.us-east-1-fake.amazonaws.com:443',errno: 'ENOTFOUND',code: 'NetworkingError',syscall: 'getaddrinfo',host: 'dynamodb.us-east-1-fake.amazonaws.com',port: 443,time: 2020-08-12T10:18:08.321Z },time: 2020-08-12T10:18:08.321Z }
Result:
null
Finished execution.

然后,我进行了更多研究,并遇到了this有关不可访问的dynamodb主机的信息,该线索在我运行模拟放大时一直遵循,并尝试实现,但无济于事。在这方面的任何帮助将不胜感激。

PS:值得一提的是,我能够通过Appsync控制台成功查询此数据,这使我坚信问题出在函数本身。

解决方法

经过更多研究并四处询问,我终于理解了在github上提供给我的答案

在可以访问dynamodb的函数上运行模拟时 API生成的表格。它将使用假值填充环境。如果 您想针对您的部署模拟lambda函数 dynamodb表,您可以在sdk客户端中编辑值,以便 准确拨打电话。

总而言之,如果您在本地运行事物,那么您将无权访问您可以尝试模拟的后端变量。我希望这可以帮助别人。谢谢!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...