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)。