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]
アクセスコントロールについて書きました