gpt4 book ai didi

typescript - Serverless Offline 和 DynamoDB 抛出 Local UnknownEndpoint : Inaccessible host: localhost at port 8000 Service may not be available in localhost region

转载 作者:行者123 更新时间:2023-12-02 01:39:48 25 4
gpt4 key购买 nike

我正在玩无服务器,但我没有运气让 serverless-offlineserverless-dynamodb-local 一起工作。我的设置非常少,重现需要 3 分钟,我是这样做的:

  1. 生成一个 TS 无服务器项目,如 - sls create -t​​ aws-nodejs-typescript --path folder-name
  2. 安装依赖npm i
  3. 在本地添加 DynamoDB npm install --save serverless-dynamodb-local
  4. 添加无服务器离线npm install serverless-offline --save-dev
  5. 安装dynamodb 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 来启动它,它在下面抛出错误(执行不会停止)
(这个错误在逻辑上是如果我从 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
}
}
}
}
}
};

最佳答案

原来是我的节点版本有问题,我运行的是 v17.3.1。切换到 v16.4.0 后,它就像一个魅力。 🥳

关于typescript - Serverless Offline 和 DynamoDB 抛出 Local UnknownEndpoint : Inaccessible host: localhost at port 8000 Service may not be available in localhost region,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71799147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com