AWS SDK for Node.js を使い始める

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS SDK for Node.js(Developer Preview)出ました

つい先日、AWSから公式node.js向けSDKが出ましたよー。早速使ってみよう!日本で最初のコーディング記事かな?

node.jsの基本セットアップ

Amazon Linux上にnode.jsの環境を作りましょう。まずは必要なライブラリのインストールから

$ sudo su -
$ yum install openssl-devel git make gcc gcc-c++ wget 
$ git clone git://github.com/ry/node.git
$ cd node
$ ./configure
$ make 
$ make install

パッケージマネージャとバージョンマネージャをインストール

$ curl https://npmjs.org/install.sh | sudo sh
$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ echo . ~/.nvm/nvm.sh >> ~/.bashrc
$ . ~/.bashrc
$ nvm install 0.8.5
$ nvm use 0.8.5

AWS SDK for Node.jsをインストールする

サクッとインストール!

$ npm install aws-sdk

S3を操作する

バケット一覧を表示します。

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

AWS.config.loadFromPath('credentials.json');
AWS.config.update({region: 'ap-northeast-1'});

var s3 = new AWS.S3();
s3.client.listBuckets().done(function(resp) {
  for (var index in resp.data.Buckets) {
    var bucket = resp.data.Buckets[index];
    console.log("Bucket: ", bucket.Name, ' : ', bucket.CreationDate);
  }
});

credentials.jsonの中身はこんな感じです

{"accessKeyId": "XXXXXXXXXXXXXXXXXX", "secretAccessKey": "YYYYYYYYYYYYYYYYYYYYYYYYYYYY"}

実行結果

Bucket:  AAAAAAAA  :  Tue Oct 30 2012 14:47:36 GMT+0000 (UTC)
Bucket:  BBBBBBBB  :  Tue Sep 11 2012 21:02:08 GMT+0000 (UTC)
Bucket:  CCCCCCCC  :  Thu Oct 25 2012 17:18:05 GMT+0000 (UTC)
Bucket:  DDDDDDDD  :  Wed Oct 24 2012 17:18:59 GMT+0000 (UTC)

EC2を操作する

インスタンス一覧を表示します。

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

AWS.config.loadFromPath('credentials.json');
AWS.config.update({region: 'ap-northeast-1'});

var ec2 = new AWS.EC2();
ec2.client.describeInstances().done(function(resp){
  for (var index in resp.data.Reservations){
    var instances = resp.data.Reservations[index];
    console.log(instances);
  }
});

実行結果

{ ReservationId: 'r-7a58a379',
  OwnerId: '12038471209XXXX',
  Groups: [],
  Instances: 
   [ { InstanceId: 'i-XXXXXXXX',
       ImageId: 'ami-4e6Xd34f',
       State: [Object],
       PrivateDnsName: null,
       PublicDnsName: null,
       StateTransitionReason: null,
       KeyName: 'mykey1.pem',
       AmiLaunchIndex: 0,
       ProductCodes: [],
       InstanceType: 't1.micro',
       LaunchTime: Sat Dec 22 2012 08:30:46 GMT+0000 (UTC),
       Placement: [Object],
       KernelId: 'aki-XX992845',
       Monitoring: [Object],
       SubnetId: 'subnet-fb5XX192',
       VpcId: 'vpc-035XX16a',
       PrivateIpAddress: '10.0.1.99',
       sourceDestCheck: true,
       securityGroups: [Object],
       architecture: 'x86_64',
       rootDeviceType: 'ebs',
       rootDeviceName: '/dev/sda1',
       blockDeviceMappings: [Object],
       virtualizationType: 'paravirtual',
       clientToken: 'QIazz135XX73XXX779',
       tags: [Object],
       hypervisor: 'xen',
       networkInterfaces: [Object],
       ebsOptimized: false } ] }

DynamoDBを操作する

Table詳細を表示します。

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

AWS.config.loadFromPath('credentials.json');
AWS.config.update({region: 'ap-northeast-1'});

var dy = new AWS.DynamoDB();
var param = {TableName:'twitter'};
dy.client.describeTable(param).done(function(resp){
  console.log(resp.data);
});

実行結果

{ Table: 
   { CreationDateTime: 1343668995.016,
     ItemCount: 669,
     KeySchema: { HashKeyElement: [Object] },
     ProvisionedThroughput: 
      { NumberOfDecreasesToday: 0,
        ReadCapacityUnits: 5,
        WriteCapacityUnits: 5 },
     TableName: 'twitter',
     TableSizeBytes: 118191,
     TableStatus: 'ACTIVE' } }

SimpleWorkflowを操作する

ドメイン情報を表示します。

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

AWS.config.loadFromPath('credentials.json');
AWS.config.update({region: 'us-east-1'});

var swf = new AWS.SimpleWorkflow;
var param = {name:'hello'};
swf.client.describeDomain(param).done(function(resp){
  console.log(resp.data);
});

実行結果

{ configuration: { workflowExecutionRetentionPeriodInDays: '7' },
  domainInfo: { name: 'hello', status: 'REGISTERED' } }

まとめ

さすが公式SDKなので、ほぼ全てのメソッドが用意されています。node.jsはイベントドリブンですから、上から書いていっても順番に実行されるとは限りません。順番に実行したいのであれば、イベントハンドラ内に書く必要がありますので気をつけてください。

参考資料

AWS SDK for Node.js (Developer Preview)