AWS node.js没有创buildS3存储桶?

我正在尝试使用基本教程创build一个S3存储桶,如下所示

var AWS = require('aws-sdk'); AWS.config.loadFromPath('./myawsconfig.json'); AWS.config.update({region: 'eu-west-1'}); var s3 = new AWS.S3(); s3.client.createBucket({Bucket: 'pBucket'}, function() { var data = {Bucket: 'pBucket', Key: 'myKey', Body: 'Hello!'}; s3.client.putObject(data, function(err, data) { if (err) { console.log("Error uploading data: ", err); } else { console.log("Successfully uploaded data to myBucket/myKey"); } }); }); 

但是我收到以下错误

 node createbucket.js Error uploading data: { [NoSuchBucket: The specified bucket does not exist] message: 'The specified bucket does not exist', code: 'NoSuchBucket', name: 'NoSuchBucket', statusCode: 404, retryable: false } 

我刚刚遇到这个问题,显然Node.js教程代码不能编译。 我得到一个var对象没有createBucket方法。

这工作:

 var AWS = require('aws-sdk'); AWS.config.loadFromPath('./credentials.json'); // Set your region for future requests. AWS.config.update({region: 'us-east-1'}); // Create a bucket and put something in it. var s3 = new AWS.S3(); s3.client.createBucket({Bucket: 'hackathon-test'}, function() { var data = {Bucket: 'hackathon-test', Key: 'myKey', Body: 'Hello!'}; s3.client.putObject(data, function(err, data) { if (err) { console.log("Error uploading data: ", err); } else { console.log("Successfully uploaded data to myBucket/myKey"); } }); }); 

我有这个问题,发现我的API用户没有权限创build存储桶。

稍微更彻底的错误检查显示这…

 s3.client.createBucket({Bucket: 'someBucket'}, function(err) { if (err) { console.log("Error creating bucket: ", err); } else { console.log("Successfully created bucket 'someBucket'"); } // ... 

根据aws S3存储桶名称的限制。 您的存储桶名称不应包含任何大写字母。 所以'pBucket'是无效的。

http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html

符合DNS的存储桶名称的规则是:

  • 存储桶名称必须至less3个,不超过63个字符。
  • 存储桶名称必须是一系列一个或多个标签。 相邻的标签由一个单独的句点(。)分隔。 存储桶名称可以包含小写字母,数字和连字符。 每个标签必须以小写字母或数字开头和结尾。
  • 存储桶名称不能被格式化为IP地址(例如,192.168.5.4)。
  • 当使用带有SSL的虚拟托pipe式存储桶时,SSL通配符证书仅匹配不包含句点的存储桶。 要解决此问题,请使用HTTP或编写自己的证书validation逻辑。

我错过了一些指针,有人可能会觉得有用

  • 如果将该区域设置为S3对象的一部分, var s3 = new AWS.S3({region: 'us-west-1'}); 那么电话会失败(以我的经验)。

  • 因此,您可以通过任一方式设置区域

a) AWS.config.update({ region: 'eu-west-1' });

b)作为createBucket上的参数的一部分

s3.createBucket({ Bucket: bucketName, CreateBucketConfiguration: { LocationConstraint: "eu-west-1" } }, function () {

另外,请注意水桶名称中的大写或下划线,因为这也是我一生中的一个小时(仅适用于DNS)。