typescript 无服务器脱机和DynamoDB抛出本地未知端点:无法访问的主机:端口8000上的本地主机服务在本地主机区域中可能不可用

kxkpmulp  于 2023-01-10  发布在  TypeScript
关注(0)|答案(1)|浏览(122)

我在玩无服务器,我没有运气让serverless-offlineserverless-dynamodb-local一起工作。我有非常小的设置,它需要30分钟来重现,我这样做:
1.生成类似-sls create -t aws-nodejs-typescript --path folder-name的TS无服务器项目
1.安装依赖项npm i
1.添加DynamoDB本地npm install --save serverless-dynamodb-local
1.添加无服务器脱机npm install serverless-offline --save-dev
1.安装发电机b sls dynamodb install
现在我更新serverless.ts文件,如下所示
1.按正确顺序包括已安装的插件

plugins: [
    'serverless-esbuild',
    'serverless-dynamodb-local',
    'serverless-offline'
  ],

1.在custom中,添加DynamoDB配置,例如

custom: {
    esbuild: { ... },
    dynamodb: {
      stages: ['dev'],
      start: {
        migrate: true
      }
    }

1.最后一步是在资源中添加DynamoDB

resources: {
    Resources: {
      usersTable: {
        Type: 'AWS::DynamoDB::Table',
        Properties: {
          TableName: 'firstTable',
          AttributeDefinitions: [{
            AttributeName: 'id',
            AttributeType: 'S',
          }],
          KeySchema: [{
            AttributeName: 'id',
            KeyType: 'HASH'
          }],
          ProvisionedThroughput: {
            ReadCapacityUnits: 1,
            WriteCapacityUnits: 1
          }
        }
      }
    }
  }

**现在我尝试通过运行sls offline start -s dev来加速,但它抛出了下面的错误(执行不会停止)

(this如果从serverless.ts中删除migrate: true,则逻辑上不会引发错误)**

Dynamodb Local Started, Visit: http://localhost:8000/shell
UnknownEndpoint: Inaccessible host: `localhost' at port `8000'. This service may not be available in the `localhost' region.: DynamoDB - Error - 
Environment: darwin, node 17.3.1, framework 3.12.0 (local), plugin 6.2.1, SDK 4.3.2
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
UnknownEndpoint: Inaccessible host: `localhost' at port `8000'. This service may not be available in the `localhost' region.
at Request.ENOTFOUND_ERROR (...node_modules/aws-sdk/lib/event_listeners.js:529:46)
at Request.callListeners (...node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (...node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (...node_modules/aws-sdk/lib/request.js:686:14)
at error (...node_modules/aws-sdk/lib/event_listeners.js:361:22)
at ClientRequest.<anonymous> (...node_modules/aws-sdk/lib/http/node.js:99:9)
at ClientRequest.emit (node:events:390:28)
at ClientRequest.emit (node:domain:475:12)
at Socket.socketErrorListener (node:_http_client:442:9)
at Socket.emit (node:events:390:28)
at Socket.emit (node:domain:475:12)
at emitErrorNT (node:internal/streams/destroy:164:8)
at emitErrorCloseNT (node:internal/streams/destroy:129:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)

即使抛出错误,我仍然能够成功执行

> aws dynamodb list-tables --endpoint-url http://localhost:8000 --region localhost
{
    "TableNames": []
}

我没有改变任何其他代码比上述描述。我猜这将是一些非常基本的东西,像我错过了一些配置或东西的地方,但我找不到任何文件或其他职位,这将有助于。任何想法欢迎。
...由于我知道某些版本在过去遇到过问题,因此我使用的是package.json

"engines": {
    "node": ">=14.15.0"
  },
  "dependencies": {
    "@middy/core": "^2.5.3",
    "@middy/http-json-body-parser": "^2.5.3",
    "serverless-dynamodb-local": "^0.2.40"
  },
  "devDependencies": {
    "@serverless/typescript": "^3.0.0",
    "@types/aws-lambda": "^8.10.71",
    "@types/node": "^14.14.25",
    "esbuild": "^0.14.11",
    "json-schema-to-ts": "^1.5.0",
    "serverless": "^3.0.0",
    "serverless-esbuild": "^1.23.3",
    "serverless-offline": "^8.5.0",
    "ts-node": "^10.4.0",
    "tsconfig-paths": "^3.9.0",
    "typescript": "^4.1.3"
  },

这里是完整的serverless.ts,如果有帮助的话

const serverlessConfiguration: AWS = {
  service: 'aws-onboarding-api',
  frameworkVersion: '3',
  plugins: [
    'serverless-esbuild',
    'serverless-dynamodb-local',
    'serverless-offline'
  ],
  provider: {
    name: 'aws',
    runtime: 'nodejs14.x',
    apiGateway: {
      minimumCompressionSize: 1024,
      shouldStartNameWithService: true,
    },
    environment: {
      AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1',
      NODE_OPTIONS: '--enable-source-maps --stack-trace-limit=1000',
    },
  },
  // import the function via paths
  functions: { hello },
  package: { individually: true },
  custom: {
      esbuild: {
      bundle: true,
      minify: false,
      sourcemap: true,
      exclude: ['aws-sdk'],
      target: 'node14',
      define: { 'require.resolve': undefined },
      platform: 'node',
      concurrency: 10,
    },
    dynamodb: {
      stages: ['dev'],
      start: {
        migrate: true
      }
    }
  },
  resources: {
    Resources: {
      usersTable: {
        Type: 'AWS::DynamoDB::Table',
        Properties: {
          TableName: 'firstTable',
          AttributeDefinitions: [{
            AttributeName: 'id',
            AttributeType: 'S',
          }],
          KeySchema: [{
            AttributeName: 'id',
            KeyType: 'HASH'
          }],
          ProvisionedThroughput: {
            ReadCapacityUnits: 1,
            WriteCapacityUnits: 1
          }
        }
      }
    }
  }
};
9lowa7mx

9lowa7mx1#

所以原来是我的节点版本有问题,我当时运行的是v17.3.1。切换到v16.4.0后它工作起来很有魅力。🥳

相关问题