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

11,369 views

Published on

大阪Node学園5で発表した資料です。
AWS初心者向けに、AWS Elastic BeanstalkとAWS SDK をNode.jsと合わせて解説します。

Published in: Technology

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

  1. 1. しみず @shimy_net2013 / 5 / 11Node.js とAmazon Web Service 入門- Node.js on AWS Elastic Beanstalk- AWS SDK for Node.js!!" "    ー 大阪Node学園5 ー
  2. 2. 目次  自己紹介(LTダイジェスト)  AWS 超入門  Node.js on AWS Elastic Beanstalk  AWS SDK for Node.js
  3. 3. 自己紹介しみず @shimy_netWebアーキテクトアマゾン芸人JAWSUG 大阪無駄に技術を使って面白いことをする
  4. 4. 本を執筆しました
  5. 5.  JAWSイベントLTダイジェスト版本編はこちらhttp://www.slideshare.net/shimy_net/awsjawsdays2013shimynet
  6. 6. !!!えっ私にもAWSを使えますか?
  7. 7. ミクさんに仮想空間で!サーバーを設置してもらおう!!Kinect SDK AWS TOOL Xtion & Kinect MMD
  8. 8. ラックミク!MikuMikuDance DataCenter
  9. 9. ジェスチャー判定ラックを蹴るとサーバー起動JointType.AnkleRight JointType.HipCenter
  10. 10. やったー私にも出来たぁ!
  11. 11. !!!AWSは誰でも使えます本日、言いたいこと
  12. 12. この機会にAWSも覚えてね
  13. 13. JAWS-UG 大阪初心者向け勉強会 開催決定6/22(土) グランフロント!!
  14. 14. AWS 超入門!
  15. 15. □提供モデル アプリ・ソフト プラットフォーム インフラ・NWクラウド とはIaaSPaaSSaaS
  16. 16. □メリット・デメリットスモールスタートできるエンジニアが遊ぶのにはすごく便利クラウド とはクラウド オンプレミス 初期コスト 低い 高い 運用コスト 従量課金 定額 セキュリティ 高い あまり高くない 性能 作り方しだい 作り方しだい 可用性 作り方しだい 作り方しだい 拡張性 高い 低い 楽しさ プライスレス!
  17. 17. AWS の主なサービス  S3(Simple Storage Service)・クラウドストレージ・1Gで10円くらい  EC2・仮想サーバ・インスタンスタイプはマイクロから(1500円/月くらい)  ELB(Elastic Load Balancing)・オートスケール・負荷分散  RDS(Relational Database Manegement System)・Oracle、MySQL、SQLServer・MultiAZ・バックアップ
  18. 18. AWS の主なサービス  DynamoDB・分散NoSQLデータベース・スループット  SES(Simple Email Service)・SMTP・  Elastic Beanstalk・JavaやPHPが動作するPaaS・Node.jsも対応  EMR(Elastic MapReduce)・Hadoop・データマイング・ウェブインデックス
  19. 19. AWSの利用方法□アカウント作成 必要なもの   Emailアドレス、クレジットカード、電話
  20. 20. AWSの利用方法□AWS Management Console(ブラウザ)Webブラウザでほとんどの設定や管理ができる初心者でも大丈夫
  21. 21. AWSの利用方法□SDKs・IDE Toolkits・Command Line Tools  → http://aws.amazon.com/jp/tools/SDKやツールが豊富なので開発環境に合わせて選択できる
  22. 22. □AWS の上で Node.js を動かす□Node.js から AWS の各種サービスを利用するNode.js と AWS の使いどころ・EC2、ELB、CloudWatch・Elastic BeanstalkS3SQSDyanamoDBまずはAWS Elastic Beanstalk の話
  23. 23. AWS Elastic Beanstalk!
  24. 24. Node.js を AWS の上で動かす□2つの方法・EC2 に Node.js をインストールして環境を作る →手間がかかる  自由度が高い・AWS Elastic Beanstalk を利用する →とりあえず便利  バージョン・環境の管理
  25. 25. AWS Elastic Beanstalk とは□Webアプリの実行環境を構築・管理するサービスAuto scaling GroupInstanceInstanceAmazon RDSElastic LoadBalancingCloudWatchwar zipAWS Elastic Beanstalk
  26. 26. 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
  27. 27. AWS Elastic Beanstalk とは□アプリをアップロードするだけで自動的にデプロイ・容量のプロビジョニング・負荷分散・Auto-Scaling・アプリケーション状態モニタリング□実行環境の設定・サーバースペック・40項目以上の設定が可能□利用できるAPIの制約・処理時間の制約はない
  28. 28. AWS Elastic Beanstalk とは□アプリのバージョン管理・WARやZIPの世代管理が可能・アプリのロールバック・ロールフォワードが容易□複数環境の構築・本番、テストなど目的によって構築できる
  29. 29. AWS Elastic Beanstalk とは  Applicationの論理構成URLApplicationEnvironmentEnvironmentConfigurationURLEnvironmentEnvironmentConfigurationVersionwar / zipwar / zipwar / zipwar / zip
  30. 30. 開発・管理ツール  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ここからスタート
  31. 31. アプリと環境を作成① Create New Application をクリック③ Node.js を選択④ サンプルアプリを選択② アプリケーション名称 を指定
  32. 32. アプリと環境を作成⑥ URL を指定⑤ 環境名称 を指定
  33. 33. アプリと環境を作成⑦ インスタンスタイプ を指定
  34. 34. アプリと環境を作成⑧ 完了
  35. 35. アプリと環境を作成サンプルアプリが起動
  36. 36. 出来上がった構成は  サンプルアプリが起動URLApplicationEnvironmentEnvironmentConfigurationVersionwar / zipサンプルアプリhttp://XXXXX.elasticbeanstalk.com/
  37. 37. 新しいアプリをデプロイ  アプリを切り替えるURLApplicationEnvironmentEnvironmentConfigurationVersionwar / ziphttp://XXXXX.elasticbeanstalk.com/war / zip新しいアプリサンプルアプリ
  38. 38. 新しいアプリをデプロイ□2つの方法 ・AWS Management Console(マネコン)から ・git からURLApplicationEnvironmentEnvironmentConfigurationVersionwar / zipwar / zipURLApplicationEnvironmentEnvironmentConfigurationVersionwar / zipwar / zip$ git aws.configAWS Access Key: AKIXXXXAWS Secret Key: XXXXXXXAWS Region: ap-northeast-1AWS Elastic BeanstalkEnvironment: XXXXXXまずはマネコンからデプロイ
  39. 39. マネコンからアプリをデプロイ□別のアプリをデプロイするには① Deploy a Different Versionをクリック② バージョンラベルをつける③ アプリ を選択④ 完了
  40. 40. 新しいアプリをデプロイ□2つの方法 ・AWS Management Console(マネコン)から ・git からURLApplicationEnvironmentEnvironmentConfigurationVersionwar / zipwar / zipURLApplicationEnvironmentEnvironmentConfigurationVersionwar / zipwar / zip$ git aws.configAWS Access Key: AKIXXXXAWS Secret Key: XXXXXXXAWS Region: ap-northeast-1AWS Elastic BeanstalkEnvironment: XXXXXXつぎはgitからデプロイ
  41. 41. 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
  42. 42. Gitからアプリをデプロイ□プロジェクトを作成□ソースコードを開発$ mkdir helloworld$ cd helloworld$ git initvar 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
  43. 43. Gitからアプリをデプロイ□拡張コマンドのセットアップ□AWSの設定$ git aws.configAWS Access Key: AKIXXXXXXXXXXXXXXXXAWS Secret Key: XXXXXXXXXXXXXXXXXXXAWS Region [default to us-east-1]: ap-northeast-1AWS Elastic Beanstalk Application: XXXXXXXXXXAWS Elastic Beanstalk Environment: XXXXXXXXXX$ ~/AWS-ElasticBeanstalk-CLI-2.4.0/AWSDevTools/Linux/AWSDevTools-RepositorySetup.sh→http://aws.amazon.com/code/6752709412171743Security Credentials
  44. 44. Gitからアプリをデプロイ□ローカルリポジトリにコミット□AWS Elastic Beanstalk へデプロイ$ git add server.js$ git commit –m “initial commit”$ git aws.push
  45. 45. Gitからアプリをデプロイ□新しいアプリがデプロイされる新しいアプリサンプルアプリ
  46. 46. アプリのバージョンを管理Version をクリックVersion の一覧
  47. 47. 新しい環境を追加  Environmentを追加URLApplicationEnvironmentEnvironmentConfigurationVersionwar / zipwar / zipテスト環境
  48. 48. 新しい環境を追加  Environmentを追加URLApplicationEnvironmentEnvironmentConfigurationVersionwar / zipwar / zipURLNew EnvironmentEnvironmentConfigurationテスト環境本番環境
  49. 49. 新しい環境を追加① Launch New Environment をクリック③ URL を指定② 環境名称 を指定④ アプリ を指定⑤ Node.js を選択
  50. 50. 新しい環境を追加⑥ インスタンスタイプ を選択
  51. 51. 新しい環境を追加⑦ 完了
  52. 52. 新しい環境を追加
  53. 53. 環境の設定を管理Edit Configuration をクリック設定項目の一覧
  54. 54. AWS Elastic Beanstalk まとめ□アプリをアップロードするだけで自動的にデプロイ□実行環境の設定が柔軟□アプリのバージョン管理ができる□複数環境の管理ができる□使い方がわかれば便利
  55. 55. □AWS の上で Node.js を動かす□Node.js から AWS の各種サービスを利用するNode.js と AWS の使いどころ・EC2、ELB、CloudWatch・Elastic BeanstalkS3SQSDyanamoDBつぎはAWS SDK for Node.js の話
  56. 56. AWS SDK for Node.js
  57. 57. SDK正式版の一般公開が開始   AWS SDK for Node.js5/6 SDK正式版の一般公開を開始
  58. 58. AWS SDK for Node.jsとは□AWSのサービスを利用するためのライブラリ  →http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/index.htmlDynamoDBS3 BucketAmazon SESAmazon SQSAWS SDKアプリ ElastiCache
  59. 59. AWS SDK for Node.jsとは□サポートしているサービス
  60. 60. SDKのインストール□npm でインストール□AWS パッケージを require する$ npm install aws-sdkvar AWS = require("aws-sdk");NEW
  61. 61. SDKの設定□2つの方法・AWS.config でグローバルに設定  →簡単に設定できる・各サービスのオブジェクトごとに設定  →サービスごとに細かく制御できる
  62. 62. SDKの設定□おもな設定項目・accessKeyId アクセスキー・secretAccessKey シークレットキー・region リージョン・sslEnabled (optional) SSL を有効にするかどうか・maxRetries (optional) リクエストのリトライ回数□ハードコーディングで設定AWS.config.update({   "accessKeyId": "AKIXXXXXXXXXX",   "secretAccessKey": "XXXXXXXXXXXX",   "region": "ap-northeast-1" });
  63. 63. SDKの設定□ハードコーディング以外の方法・JSONファイルから・環境変数から・EC2メタデータから□JSONファイルから読み込み{"accessKeyId": "AKIXXXXXXXXXX","secretAccessKey": "XXXXXXXXXXXX","region": "ap-northeast-1"}AWS.config.loadFromPath("./config.json");
  64. 64. SDKの設定□その他の設定項目・APIバージョン・プロキシAWS.config.apiVersions = {dynamodb: "2011-12-05",redshift: "latest"}AWS.config.update({httpOptions: {proxy: "http://localhost:8080"}});
  65. 65. Amazon S3□拡張性・信頼性が高いクラウドストレージ□S3の利用Bucketの一覧BucketObjectvar s3 = new AWS.S3();
  66. 66. 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.jsBucket: a-bucketBucket: b-bucket・・・
  67. 67. 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 }
  68. 68. 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 }
  69. 69. Amazon S3ファイルの中身Objectが作成されているBucketが作成されている
  70. 70. 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$ lsnode.jpgあらかじめアップしておいたJPGファイルがローカルディスクにダウンロードされ保存される
  71. 71. 他にも相性が良さそうなサービス□S3、EC2、ELB、DynamoDB、SQS、SES、SNS・・・□もっと詳しくhttp://docs.aws.amazon.com/AWSJavaScriptSDK/guide/index.html↑ここを読むべし
  72. 72. AWS SDK for Node.jsまとめ□AWSのサービスを利用するためのライブラリ群□AWSの信頼性と拡張性が高いサービスをすぐ利用できる□使い方も簡単(ドキュメントも豊富)
  73. 73. 全体 まとめ□Node.jsを動かすプラットフォームとしてのAWS  →AWS Elastic Beanstalk□Node.jsからすぐ利用できる機能としてAWS  →AWS SDK for Node.js□Node.jsやると英語ドキュメントばかり  →あきらめて読む□発表の活動限界は  →5分 (*́Д`)
  74. 74. !    以上!ありがとうございました!

×