动态存储 s3 和 node.js 的连接问题 "ECONNRESET"
Connectivity issues "ECONNRESET" with dynamic storage s3 and node.js
我正在关注 step-by-step tutorial 动态存储 dynstrg。
我已经创建了一个应用程序,将其与服务 dynstrg 相关联,并按照所述使用 dragondisk 创建了一个存储桶。
当我在浏览器上调用应用程序时出现以下错误:
{
message: "read ECONNRESET",
code: "NetworkingError",
errno: "ECONNRESET",
syscall: "read",
region: "eu-west-1",
hostname: "denistestbucket.ds31s3.swisscom.com",
retryable: true,
time: "2016-06-16T10:15:42.670Z"
}
我的 manifest.yml 看起来如下:
---
services:
- denisteststorage
applications:
- name: denistestapp
memory: 128MB
instances: 1
domain: scapp-corp.swisscom.com
command: node app.js
env:
bucketName: denistestbucket
存储有问题吗?或者谁能告诉我我做错了什么?
(我还尝试用 boto3 直接连接到存储,错误 "connection aborted")。
我发现了问题,它似乎与所用模块的版本有关 "aws-sdk"。
按照教程,使用的版本是 "aws-sdk": "^2.2.9" 这会自动导致下载最新的 aws-sdk 版本,即 2.4.0 版本。
此版本导致您观察到的错误,因为默认情况下它使用签名版本 4。要访问动态存储 S3(基于 EMC ATMOS。可以找到文档 here),必须使用签名版本 2。
您可以通过更改文件 "app.js":
上的这一行来执行此操作
var s3Client = new AWS.S3({endpoint: endpoint});
这一行:
var s3Client = new AWS.S3({endpoint: endpoint, signatureVersion: 'v2'});
这应该可以解决问题。
另外我也把教程修好了
我正在关注 step-by-step tutorial 动态存储 dynstrg。
我已经创建了一个应用程序,将其与服务 dynstrg 相关联,并按照所述使用 dragondisk 创建了一个存储桶。
当我在浏览器上调用应用程序时出现以下错误:
{ message: "read ECONNRESET", code: "NetworkingError", errno: "ECONNRESET", syscall: "read", region: "eu-west-1", hostname: "denistestbucket.ds31s3.swisscom.com", retryable: true, time: "2016-06-16T10:15:42.670Z" }
我的 manifest.yml 看起来如下:
--- services: - denisteststorage applications: - name: denistestapp memory: 128MB instances: 1 domain: scapp-corp.swisscom.com command: node app.js env: bucketName: denistestbucket
存储有问题吗?或者谁能告诉我我做错了什么? (我还尝试用 boto3 直接连接到存储,错误 "connection aborted")。
我发现了问题,它似乎与所用模块的版本有关 "aws-sdk"。 按照教程,使用的版本是 "aws-sdk": "^2.2.9" 这会自动导致下载最新的 aws-sdk 版本,即 2.4.0 版本。 此版本导致您观察到的错误,因为默认情况下它使用签名版本 4。要访问动态存储 S3(基于 EMC ATMOS。可以找到文档 here),必须使用签名版本 2。 您可以通过更改文件 "app.js":
上的这一行来执行此操作var s3Client = new AWS.S3({endpoint: endpoint});
这一行:
var s3Client = new AWS.S3({endpoint: endpoint, signatureVersion: 'v2'});
这应该可以解决问题。 另外我也把教程修好了