Node.jsでAmazon S3にアップロードする方法

12月6日にAmazon Web Services ブログでAWS SDK for Node.jsが発表されました。
今までも各言語用のSDKが用意されていましたが、Node.jsでも利用できるようになったので、さっそく試してみました。
最初に引っかかりそうな箇所もあるので、まとめておきます。

S3の準備

まずはS3側でアップロードするバケットを用意してあげる必要があります。S3のページ(今回は東京リージョン)にアクセスします。

Bucketsのリストに何もない状態ですので、「Create Bucket」からバケットを作成します。

重複しない名前を付けて「Create」します。

バケット「zebevogue」が作成されました。

アクセスキーの確認

S3にアクセスするためには、アクセスキーが必要になります。
以下のページの「アクセスキー」からアクセスキーとシークレットキーを取得しておきます。
https://portal.aws.amazon.com/gp/aws/securityCredentials

プロジェクトの作成

$ mkdir s3sample
$ cd s3sample/
$ npm init
$ npm install aws-sdk --save

app.js

先のブログのサンプルです。(東京リージョン)

var AWS = require('aws-sdk');

AWS.config.update({
	accessKeyId: 'ACCESS_KEY',
	secretAccessKey: 'SECRET_KEY',
	//region: 'us-east-1'
	region: 'ap-northeast-1'
});

var s3 = new AWS.S3();

var params1 = {Bucket: 'zebevogue', Key: 'myKey1', Body: 'Hello!'};
var params2 = {Bucket: 'zebevogue', Key: 'myKey2', Body: 'World!'};

s3.client.putObject(params1).done(function(resp) {
	console.log("Successfully uploaded data to myBucket/myKey1");
});

s3.client.putObject(params2).done(function(resp) {
	console.log("Successfully uploaded data to myBucket/myKey2");
});

npmjs.orgにはAWS.config.update()の代わりに、JSONから設定を取得をしているサンプルもありました。

AWS.config.loadFromPath('./path/to/credentials.json')

以下のようなファイルのようです。(Configuring the SDK for JavaScript - AWS SDK for JavaScript)

{ "accessKeyId": "akid", "secretAccessKey": "secret", "region": "us-east-1" }

実行

$ node app.js 
Successfully uploaded data to myBucket/myKey1
Successfully uploaded data to myBucket/myKey2

アップロードされたようですので、S3のコンソールで確認してみます。

アップロードされているのが確認できました。

他にもバケットのリストを取得したり、

s3.client.listBuckets().done(function(response) {
  console.log(response.data);
});

失敗した際のコールバック関数を設定したり

s3.config.credentials.accessKeyId = 'invalid';
s3.client.listBuckets().fail(function(response) {
  console.log(response.error);
});

できるようです。楽チンですね。
via What Is the AWS SDK for JavaScript? - AWS SDK for JavaScript

[追記 2013/01/25]
アクセスコントロールについて書きました