しみず @shimy_net
2013 / 5 / 11
Node.js と
Amazon Web Service 入門
- Node.js on AWS Elastic Beanstalk
- AWS SDK for Node.js!
!
" "    ー 大阪Node学園5 ー
目次
  自己紹介(LTダイジェスト)
  AWS 超入門
  Node.js on AWS Elastic Beanstalk
  AWS SDK for Node.js
自己紹介
しみず @shimy_net
Webアーキテクト
アマゾン芸人
JAWSUG 大阪
無駄に技術を使って面白いことをする
本を執筆しました
 JAWSイベント
LTダイジェスト版
本編はこちら
http://www.slideshare.net/shimy_net/awsjawsdays2013shimynet
!
!
!
えっ
私にもAWSを
使えますか?
ミクさんに仮想空間で!
サーバーを設置してもらおう
!
!
Kinect SDK	
 AWS TOOL	
Xtion & Kinect	
MMD
ラック
ミク!
Miku
Miku
Dance DataCenter
ジェスチャー判定
ラックを蹴るとサーバー起動
JointType.AnkleRight	
JointType.HipCenter
やったー
私にも
出来たぁ!
!
!
!
AWSは
誰でも使えます
本日、言いたいこと
この機会に
AWSも覚えてね
JAWS-UG 大阪
初心者向け勉強会 開催決定
6/22(土) グランフロント!!
AWS 超入門!
□提供モデル
 アプリ・ソフト
 プラットフォーム
 インフラ・NW
クラウド とは
IaaS
PaaS
SaaS
□メリット・デメリット
スモールスタートできる
エンジニアが遊ぶのにはすごく便利
クラウド とは
クラウド	
 オンプレミス	
初期コスト	
 低い	
 高い	
運用コスト	
 従量課金	
 定額	
セキュリティ	
 高い	
 あまり高くない	
性能	
 作り方しだい	
 作り方しだい	
可用性	
 作り方しだい	
 作り方しだい	
拡張性	
 高い	
 低い	
楽しさ	
 プライスレス!
AWS の主なサービス
  S3(Simple Storage Service)
・クラウドストレージ
・1Gで10円くらい
  EC2
・仮想サーバ
・インスタンスタイプはマイクロから(1500円/月くらい)
  ELB(Elastic Load Balancing)
・オートスケール
・負荷分散
  RDS(Relational Database Manegement System)
・Oracle、MySQL、SQLServer
・MultiAZ
・バックアップ
AWS の主なサービス
  DynamoDB
・分散NoSQLデータベース
・スループット
  SES(Simple Email Service)
・SMTP
・
  Elastic Beanstalk
・JavaやPHPが動作するPaaS
・Node.jsも対応
  EMR(Elastic MapReduce)
・Hadoop
・データマイング
・ウェブインデックス
AWSの利用方法
□アカウント作成
 必要なもの
   Emailアドレス、クレジットカード、電話
AWSの利用方法
□AWS Management Console(ブラウザ)
Webブラウザで
ほとんどの設定や管理ができる
初心者でも大丈夫
AWSの利用方法
□SDKs・IDE Toolkits・Command Line Tools
  → http://aws.amazon.com/jp/tools/
SDKやツールが豊富なので
開発環境に合わせて選択できる
□AWS の上で Node.js を動かす
□Node.js から AWS の各種サービスを利用する
Node.js と AWS の使いどころ
・EC2、ELB、CloudWatch
・Elastic Beanstalk
S3
SQS
DyanamoDB
まずは
AWS Elastic Beanstalk の話
AWS Elastic Beanstalk!
Node.js を AWS の上で動かす
□2つの方法
・EC2 に Node.js をインストールして環境を作る
 →手間がかかる
  自由度が高い
・AWS Elastic Beanstalk を利用する
 →とりあえず便利
  バージョン・環境の管理
AWS Elastic Beanstalk とは
□Webアプリの実行環境を構築・管理するサービス
Auto scaling Group
Instance
Instance
Amazon RDS
Elastic Load
Balancing
CloudWatch
war zip
AWS Elastic Beanstalk
AWS Elastic Beanstalk とは
□サポートする言語とスタック
・Apache Tomcat for Java
・Apache HTTP Server for PHP
・Apache HTTP Server for Python
・Nginx or Apache HTTP Server for Node.js
・Passenger for Ruby
・Microsoft IIS 7.5 for .NET
AWS Elastic Beanstalk とは
□アプリをアップロードするだけで自動的にデプロイ
・容量のプロビジョニング
・負荷分散
・Auto-Scaling
・アプリケーション状態モニタリング
□実行環境の設定
・サーバースペック
・40項目以上の設定が可能
□利用できるAPIの制約・処理時間の制約はない
AWS Elastic Beanstalk とは
□アプリのバージョン管理
・WARやZIPの世代管理が可能
・アプリのロールバック・ロールフォワードが容易
□複数環境の構築
・本番、テストなど目的によって構築できる
AWS Elastic Beanstalk とは
  Applicationの論理構成
URL
Application
Environment
Environment
Configuration
URL
Environment
Environment
Configuration
Version
war / zip
war / zip
war / zip
war / zip
開発・管理ツール
  AWS Management Console(Webブラウザ)
  AWS Elastic Beanstalk Command Line Tools
→http://aws.amazon.com/code/6752709412171743
  AWS Toolkit for Eclipse(Java)
→http://aws.amazon.com/eclipse
・AWS SDK for Java
・AWS Explorer
・AWS Elastic Beanstalk
ここからスタート
アプリと環境を作成
① Create New Application をクリック
③ Node.js を選択
④ サンプルアプリ
を選択
② アプリケーション名称 を指定
アプリと環境を作成
⑥ URL を指定
⑤ 環境名称 を指定
アプリと環境を作成
⑦ インスタンスタイプ を指定
アプリと環境を作成
⑧ 完了
アプリと環境を作成
サンプルアプリが起動
出来上がった構成は
  サンプルアプリが起動
URL
Application
Environment
Environment
Configuration
Version
war / zip
サンプルアプリ
http://XXXXX.elasticbeanstalk.com/
新しいアプリをデプロイ
  アプリを切り替える
URL
Application
Environment
Environment
Configuration
Version
war / zip
http://XXXXX.elasticbeanstalk.com/
war / zip
新しいアプリ
サンプルアプリ
新しいアプリをデプロイ
□2つの方法
 ・AWS Management Console(マネコン)から
 ・git から
URL
Application
Environment
Environment
Configuration
Version
war / zip
war / zip
URL
Application
Environment
Environment
Configuration
Version
war / zip
war / zip
$ git aws.config
AWS Access Key: AKIXXXX
AWS Secret Key: XXXXXXX
AWS Region: ap-northeast-1
AWS Elastic Beanstalk
Environment: XXXXXX
まずは
マネコンからデプロイ
マネコンからアプリをデプロイ
□別のアプリをデプロイするには
① Deploy a Different Version
をクリック
② バージョンラベル
をつける
③ アプリ を選択
④ 完了
新しいアプリをデプロイ
□2つの方法
 ・AWS Management Console(マネコン)から
 ・git から
URL
Application
Environment
Environment
Configuration
Version
war / zip
war / zip
URL
Application
Environment
Environment
Configuration
Version
war / zip
war / zip
$ git aws.config
AWS Access Key: AKIXXXX
AWS Secret Key: XXXXXXX
AWS Region: ap-northeast-1
AWS Elastic Beanstalk
Environment: XXXXXX
つぎは
gitからデプロイ
Gitからアプリをデプロイ
□必要なもの
・AWS Elastic Beanstalk Command Line Tool
  →http://aws.amazon.com/code/6752709412171743
・Git 1.6.6 or later
  →http://git-scm.com/
・Ruby version 1.8.7 or later
  →http://www.ruby-lang.org/en/
・Python 2.7 or 3.0
Gitからアプリをデプロイ
□プロジェクトを作成
□ソースコードを開発
$ mkdir helloworld
$ cd helloworld
$ git init
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(process.env.PORT || 8888);	
$ vi server.js
Gitからアプリをデプロイ
□拡張コマンドのセットアップ
□AWSの設定
$ git aws.config
AWS Access Key: AKIXXXXXXXXXXXXXXXX
AWS Secret Key: XXXXXXXXXXXXXXXXXXX
AWS Region [default to us-east-1]: ap-northeast-1
AWS Elastic Beanstalk Application: XXXXXXXXXX
AWS Elastic Beanstalk Environment: XXXXXXXXXX
$ ~/AWS-ElasticBeanstalk-CLI-2.4.0/AWSDevTools/
Linux/AWSDevTools-RepositorySetup.sh
→http://aws.amazon.com/code/6752709412171743
Security Credentials
Gitからアプリをデプロイ
□ローカルリポジトリにコミット
□AWS Elastic Beanstalk へデプロイ
$ git add server.js
$ git commit –m “initial commit”
$ git aws.push
Gitからアプリをデプロイ
□新しいアプリがデプロイされる
新しいアプリ
サンプルアプリ
アプリのバージョンを管理
Version をクリック
Version の一覧
新しい環境を追加
  Environmentを追加
URL
Application
Environment
Environment
Configuration
Version
war / zip
war / zip
テスト環境
新しい環境を追加
  Environmentを追加
URL
Application
Environment
Environment
Configuration
Version
war / zip
war / zip
URL
New Environment
Environment
Configuration
テスト環境
本番環境
新しい環境を追加
① Launch New Environment をクリック
③ URL を指定
② 環境名称 を指定
④ アプリ を指定
⑤ Node.js を選択
新しい環境を追加
⑥ インスタンスタイプ を選択
新しい環境を追加
⑦ 完了
新しい環境を追加
環境の設定を管理
Edit Configuration をクリック
設定項目の一覧
AWS Elastic Beanstalk まとめ
□アプリをアップロードするだけで自動的にデプロイ
□実行環境の設定が柔軟
□アプリのバージョン管理ができる
□複数環境の管理ができる
□使い方がわかれば便利
□AWS の上で Node.js を動かす
□Node.js から AWS の各種サービスを利用する
Node.js と AWS の使いどころ
・EC2、ELB、CloudWatch
・Elastic Beanstalk
S3
SQS
DyanamoDB
つぎは
AWS SDK for Node.js の話
AWS SDK for Node.js
SDK正式版の一般公開が開始
   AWS SDK for Node.js
5/6 SDK正式版の一般公開を開始
AWS SDK for Node.jsとは
□AWSのサービスを利用するためのライブラリ
  →http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/index.html
DynamoDBS3 Bucket
Amazon SES
Amazon SQS
AWS SDK
アプリ	
ElastiCache
AWS SDK for Node.jsとは
□サポートしているサービス
SDKのインストール
□npm でインストール
□AWS パッケージを require する
$ npm install aws-sdk
var AWS = require("aws-sdk");
NEW
SDKの設定
□2つの方法
・AWS.config でグローバルに設定
  →簡単に設定できる
・各サービスのオブジェクトごとに設定
  →サービスごとに細かく制御できる
SDKの設定
□おもな設定項目
・accessKeyId アクセスキー
・secretAccessKey シークレットキー
・region リージョン
・sslEnabled (optional) SSL を有効にするかどうか
・maxRetries (optional) リクエストのリトライ回数
□ハードコーディングで設定
AWS.config.update({
   "accessKeyId": "AKIXXXXXXXXXX",
   "secretAccessKey": "XXXXXXXXXXXX",
   "region": "ap-northeast-1" });
SDKの設定
□ハードコーディング以外の方法
・JSONファイルから
・環境変数から
・EC2メタデータから
□JSONファイルから読み込み
{
"accessKeyId": "AKIXXXXXXXXXX",
"secretAccessKey": "XXXXXXXXXXXX",
"region": "ap-northeast-1"
}
AWS.config.loadFromPath("./config.json");
SDKの設定
□その他の設定項目
・APIバージョン
・プロキシ
AWS.config.apiVersions = {
dynamodb: "2011-12-05",
redshift: "latest"
}
AWS.config.update({
httpOptions: {
proxy: "http://localhost:8080"
}
});
Amazon S3
□拡張性・信頼性が高いクラウドストレージ
□S3の利用
Bucketの一覧
Bucket
Object
var s3 = new AWS.S3();
Amazon S3
□Bucket の一覧取得
→実行結果
s3.listBuckets(function(err, data) {
for (var index in data.Buckets) {
var bucket = data.Buckets[index];
console.log("Bucket:", bucket.Name);
}
});
$ node s3-bucket-list.js
Bucket: a-bucket
Bucket: b-bucket
・・・
Amazon S3
□Bucket の作成
→実行結果
var params = {Bucket: "node-gakuen"};
s3.createBucket(params,function(err, data) {
console.log(data);
});
$ node s3-bucket-create.js
{ Location: 'http://node-gakuen.s3.amazonaws.com/',
RequestId: 'FB6A4464A19092AC' }
Amazon S3
□Object を Bucket へ登録
→実行結果
var params = {Bucket:"node-gakuen", Key: "node-key",
Body: "HelloWorld"};
s3.putObject(params,function(err, data) {
console.log(data);
});
$ node s3-object-put.js
{ ETag: '"68e109f0f40ca72a15e05cc22786f8e6"',
RequestId: 'A1CB2F81D19A5389' }
Amazon S3
ファイルの中身
Objectが作成されている
Bucketが作成されている
Amazon S3
□S3にある Object をファイルに保存
→実行結果
var params = {Bucket:"node-gakuen", Key: "node.jpg"};
var file = require("fs").createWriteStream("./node.jpg");
s3.getObject(params).createReadStream().pipe(file);
$ node s3-object-get.js
$ ls
node.jpg
あらかじめアップしておいたJPGファイルが
ローカルディスクにダウンロードされ保存される
他にも相性が良さそうなサービス
□S3、EC2、ELB、DynamoDB、SQS、SES、SNS・・・
□もっと詳しく
http://docs.aws.amazon.com/AWSJavaScriptSDK/
guide/index.html
↑ここを読むべし
AWS SDK for Node.jsまとめ
□AWSのサービスを利用するためのライブラリ群
□AWSの信頼性と拡張性が高いサービスをすぐ利用できる
□使い方も簡単(ドキュメントも豊富)
全体 まとめ
□Node.jsを動かすプラットフォームとしてのAWS
  →AWS Elastic Beanstalk
□Node.jsからすぐ利用できる機能としてAWS
  →AWS SDK for Node.js
□Node.jsやると英語ドキュメントばかり
  →あきらめて読む
□発表の活動限界は
  →5分 (*́Д`)
!
    以上!
ありがとうございました!

Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)