繁体   English   中英

AWS Node.js无法创建S3存储桶?

[英]AWS node.js not creating S3 bucket?

我正在尝试使用基本教程来创建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用户没有创建存储桶的权限。

稍微更彻底的错误检查发现了这一点...

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的存储桶名称的规则是:

  • 值区名称必须至少3个且不超过63个字符。
  • 值区名称必须是一系列的一个或多个标签。 相邻标签之间用单个句点(。)分隔。 值区名称可以包含小写字母,数字和连字符。 每个标签必须以小写字母或数字开头和结尾。
  • 存储桶名称不得格式化为IP地址(例如192.168.5.4)。
  • 当将虚拟托管样式的存储桶与SSL一起使用时,SSL通配符证书仅与不包含句点的存储桶匹配。 要解决此问题,请使用HTTP或编写您自己的证书验证逻辑。

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

  • 如果您将区域设置为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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM