2013-04-12 413 views
1

我試圖使用基本教程如下AWS node.js沒有創建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"); 
    } 
    }); 
}); 

創建一個S3桶,但我收到以下錯誤

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 } 
+0

您確定您的令牌正在驗證中,並且您的存儲桶名稱在整個S3中都是唯一的嗎? –

+0

我只是將我的代碼中的存儲桶名稱更改爲絕對唯一的存儲桶名稱。我不確定我的令牌是否正在驗證,但假設我會收到一個錯誤,說如果是這種情況,那麼多嗎? –

回答

1

我只是碰到了這個問題,顯然節點.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"); 
    } 
    }); 
}); 
+0

AWS node.js S3教程是具體的 –

+0

工作就像一個魅力,謝謝! –

+0

這很有趣,因爲除了config.json文件名,區域和存儲桶名稱之外,答案代碼看起來與問題代碼完全相同。真正的問題是什麼? –

1

我有這個問題,發現我的API,用戶沒有權限創建桶。檢查發現

稍微更徹底的錯誤這...

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

根據AWS的S3存儲名稱限制。 您的存儲桶名稱不應包含任何大寫字母。所以'pBucket'是無效的。

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

爲符合DNS鬥名的規則是:

  • 桶名稱必須至少爲3,不超過63個字符長。
  • 存儲桶名稱必須是一系列一個或多個標籤。相鄰標籤由一個單獨的句點(。)分隔。存儲桶名稱可以包含 小寫字母,數字和連字符。每個標籤必須以小寫字母或數字開頭和結尾 。
  • 存儲桶名稱不得格式化爲IP地址(例如,192.168.5.4),其格式爲 。
  • 當使用帶有SSL的虛擬 託管式存儲桶時,SSL通配符證書只有 與不包含句點的存儲桶相匹配。要解決此問題,請使用 HTTP或編寫您自己的證書驗證邏輯。
+1

謝謝@ 8bittree只是修改了答案。 〜 –

0

一對夫婦的指針,我錯過了,有人可能會覺得有用

  • 如果設置區域爲S3對象var s3 = new AWS.S3({region: 'us-west-1'});則調用將失敗的一部分(在我的經驗)。

  • 因此,可以通過任一

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

B被設定的區域)作爲則params的部分上createBucket

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

也,注意大寫字母或下劃線,因爲這也花了我一個小時的時間(僅限DNS兼容)。