SlideShare a Scribd company logo
Submit Search
Upload
10分で作る Node.js Auto Scale 環境 with CloudFormation
Report
Share
Kazuyuki Honda
Software Engineer at Quipper
Follow
•
19 likes
•
4,023 views
1
of
30
10分で作る Node.js Auto Scale 環境 with CloudFormation
•
19 likes
•
4,023 views
Report
Share
Download Now
Download to read offline
Technology
東京Node学園 6時限目で発表した資料です。 http://connpass.com/event/611/
Read more
Kazuyuki Honda
Software Engineer at Quipper
Follow
Recommended
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題 by
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
8.6K views
•
41 slides
Tottoruby 20110903 by
Tottoruby 20110903
Takashi SAKAGUCHI
807 views
•
35 slides
Webサーバ勉強会03 by
Webサーバ勉強会03
oranie Narut
1.7K views
•
16 slides
Puppetのススメ by
Puppetのススメ
Gosuke Miyashita
22.8K views
•
102 slides
Development app-with-elixir by
Development app-with-elixir
k1complete
1K views
•
15 slides
Scala on Hadoop by
Scala on Hadoop
Shinji Tanaka
2.5K views
•
34 slides
More Related Content
What's hot
Zabbix API by
Zabbix API
Shuhei Hayashibara
2.1K views
•
16 slides
Ansible quickstart by
Ansible quickstart
Hideki Saito
5.4K views
•
26 slides
omoon.org の裏側 〜FuelPHP の task 活用例〜 by
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
10K views
•
81 slides
Perl 非同期プログラミング by
Perl 非同期プログラミング
lestrrat
7.3K views
•
99 slides
15分でCakePHPを始める方法(Nseg 2013-11-09 ) by
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
4.4K views
•
20 slides
ChefとPuppetの比較 by
ChefとPuppetの比較
Sugawara Genki
29.4K views
•
47 slides
What's hot
(20)
Zabbix API by Shuhei Hayashibara
Zabbix API
Shuhei Hayashibara
•
2.1K views
Ansible quickstart by Hideki Saito
Ansible quickstart
Hideki Saito
•
5.4K views
omoon.org の裏側 〜FuelPHP の task 活用例〜 by Sotaro Omura
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
•
10K views
Perl 非同期プログラミング by lestrrat
Perl 非同期プログラミング
lestrrat
•
7.3K views
15分でCakePHPを始める方法(Nseg 2013-11-09 ) by hiro345
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
•
4.4K views
ChefとPuppetの比較 by Sugawara Genki
ChefとPuppetの比較
Sugawara Genki
•
29.4K views
CMSとPerlで遊ぼう by Daiki Ichinose
CMSとPerlで遊ぼう
Daiki Ichinose
•
1.9K views
Ansibleで始めるサーバ管理勉強会(2014年10月1日) by CLARA ONLINE, Inc.
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
CLARA ONLINE, Inc.
•
3K views
Using Windows Azure by Shinji Tanaka
Using Windows Azure
Shinji Tanaka
•
2.2K views
Docker+CoreOS+GCEで自動スケール分散レイトレ by peryaudo
Docker+CoreOS+GCEで自動スケール分散レイトレ
peryaudo
•
15.1K views
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT by Masahiro Nagano
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Masahiro Nagano
•
38.8K views
Ansible入門 by Daiki Hayakawa
Ansible入門
Daiki Hayakawa
•
936 views
Webサーバのチューニング by Yu Komiya
Webサーバのチューニング
Yu Komiya
•
9.6K views
Web技術勉強会23回目 by 龍一 田中
Web技術勉強会23回目
龍一 田中
•
776 views
成長を加速する minne の技術基盤戦略 by Hiroshi SHIBATA
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
•
9.4K views
Ansible 2.0を使って組む kubernetesクラスタ vol.1 by Hidetoshi Hirokawa
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Hidetoshi Hirokawa
•
11.7K views
今日から使い始めるChef by Masahiro NAKAYAMA
今日から使い始めるChef
Masahiro NAKAYAMA
•
7.6K views
AWSとGCPを使用したインフラ環境 by Katsutoshi Nagaoka
AWSとGCPを使用したインフラ環境
Katsutoshi Nagaoka
•
17.4K views
Ansible入門...? by shirou wakayama
Ansible入門...?
shirou wakayama
•
9.5K views
Ansible handson by Hideki Saito
Ansible handson
Hideki Saito
•
2.2K views
Viewers also liked
Exifの画像方向情報 by
Exifの画像方向情報
Atsushi Matsuo
2.1K views
•
16 slides
INTER-Mediator 5.0 by
INTER-Mediator 5.0
Atsushi Matsuo
1.9K views
•
25 slides
INTER-Mediator 5.1の新機能 by
INTER-Mediator 5.1の新機能
Atsushi Matsuo
1.7K views
•
17 slides
INTER-Mediatorのポータルアクセスモード by
INTER-Mediatorのポータルアクセスモード
Atsushi Matsuo
1.9K views
•
10 slides
IMCakeの現状と今後 by
IMCakeの現状と今後
Atsushi Matsuo
1.5K views
•
7 slides
INTER-MediatorによるWebアプリケーション開発入門 by
INTER-MediatorによるWebアプリケーション開発入門
Atsushi Matsuo
2.7K views
•
22 slides
Viewers also liked
(9)
Exifの画像方向情報 by Atsushi Matsuo
Exifの画像方向情報
Atsushi Matsuo
•
2.1K views
INTER-Mediator 5.0 by Atsushi Matsuo
INTER-Mediator 5.0
Atsushi Matsuo
•
1.9K views
INTER-Mediator 5.1の新機能 by Atsushi Matsuo
INTER-Mediator 5.1の新機能
Atsushi Matsuo
•
1.7K views
INTER-Mediatorのポータルアクセスモード by Atsushi Matsuo
INTER-Mediatorのポータルアクセスモード
Atsushi Matsuo
•
1.9K views
IMCakeの現状と今後 by Atsushi Matsuo
IMCakeの現状と今後
Atsushi Matsuo
•
1.5K views
INTER-MediatorによるWebアプリケーション開発入門 by Atsushi Matsuo
INTER-MediatorによるWebアプリケーション開発入門
Atsushi Matsuo
•
2.7K views
INTER-MediatorによるWebアプリケーション開発入門(2014年版) by Atsushi Matsuo
INTER-MediatorによるWebアプリケーション開発入門(2014年版)
Atsushi Matsuo
•
1.5K views
FMPress Publisher 3 by Atsushi Matsuo
FMPress Publisher 3
Atsushi Matsuo
•
1K views
FileMaker Server 15の新機能と改善点 by Atsushi Matsuo
FileMaker Server 15の新機能と改善点
Atsushi Matsuo
•
3K views
Similar to 10分で作る Node.js Auto Scale 環境 with CloudFormation
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel- by
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
靖 小田島
1.5K views
•
26 slides
densan2014-late01 by
densan2014-late01
Takenori Nakagawa
537 views
•
32 slides
13016 n分で作るtype scriptでnodejs by
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
2.3K views
•
27 slides
BCPに活かせ!一撃 CloudFormation by
BCPに活かせ!一撃 CloudFormation
真吾 吉田
2.9K views
•
33 slides
Nginx by
Nginx
Yoshikazu Torimoto
2.2K views
•
10 slides
OpenStack + Common Lisp by
OpenStack + Common Lisp
irix_jp
4.6K views
•
44 slides
Similar to 10分で作る Node.js Auto Scale 環境 with CloudFormation
(20)
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel- by 靖 小田島
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
靖 小田島
•
1.5K views
densan2014-late01 by Takenori Nakagawa
densan2014-late01
Takenori Nakagawa
•
537 views
13016 n分で作るtype scriptでnodejs by Takayoshi Tanaka
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
•
2.3K views
BCPに活かせ!一撃 CloudFormation by 真吾 吉田
BCPに活かせ!一撃 CloudFormation
真吾 吉田
•
2.9K views
Nginx by Yoshikazu Torimoto
Nginx
Yoshikazu Torimoto
•
2.2K views
OpenStack + Common Lisp by irix_jp
OpenStack + Common Lisp
irix_jp
•
4.6K views
Azure で Serverless 初心者向けタッチ&トライ by Masanobu Sato
Azure で Serverless 初心者向けタッチ&トライ
Masanobu Sato
•
2.4K views
Nodejs by Masanobu Masuda
Nodejs
Masanobu Masuda
•
522 views
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk by Amazon Web Services Japan
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
Amazon Web Services Japan
•
21K views
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた by Yuki Takei
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
Yuki Takei
•
21.3K views
当社のawsへの取組 by Mercari Inc.
当社のawsへの取組
Mercari Inc.
•
3.3K views
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for... by Naoya Ito
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
•
5.5K views
Cinnamon - simple deploy tool by Yuki Shibazaki
Cinnamon - simple deploy tool
Yuki Shibazaki
•
3K views
ネットワークエンジニアのための Puppet / Chef by npsg
ネットワークエンジニアのための Puppet / Chef
npsg
•
8.1K views
現場的!AWSとオンプレの違い(赤べこバージョン) by 真吾 吉田
現場的!AWSとオンプレの違い(赤べこバージョン)
真吾 吉田
•
2.7K views
恋に落ちるデプロイツール by totty jp
恋に落ちるデプロイツール
totty jp
•
5.1K views
OpenStack API by Akira Yoshiyama
OpenStack API
Akira Yoshiyama
•
6.5K views
社内勉強会資料(Varnish Module) by Iwana Chan
社内勉強会資料(Varnish Module)
Iwana Chan
•
7K views
EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成 by Kiyoshi Sawada
EWD 3トレーニング・コース #4 ewd-xpressのインストールと構成
Kiyoshi Sawada
•
236 views
WDD2012_SC-004 by Kuninobu SaSaki
WDD2012_SC-004
Kuninobu SaSaki
•
515 views
More from Kazuyuki Honda
5分でできる ebfly by
5分でできる ebfly
Kazuyuki Honda
6.5K views
•
15 slides
東の方からきました@鹿駆動勉強会 by
東の方からきました@鹿駆動勉強会
Kazuyuki Honda
959 views
•
9 slides
Run Multi Version of Node.js on Heroku by
Run Multi Version of Node.js on Heroku
Kazuyuki Honda
1.1K views
•
14 slides
Noder が Titanium Mobile で 作ってみた by
Noder が Titanium Mobile で 作ってみた
Kazuyuki Honda
4.1K views
•
24 slides
初心者の初心者による初心者のための JavaScript ゲーム開発入門 by
初心者の初心者による初心者のための JavaScript ゲーム開発入門
Kazuyuki Honda
2.6K views
•
42 slides
enchant.js source reading by
enchant.js source reading
Kazuyuki Honda
3.2K views
•
25 slides
More from Kazuyuki Honda
(7)
5分でできる ebfly by Kazuyuki Honda
5分でできる ebfly
Kazuyuki Honda
•
6.5K views
東の方からきました@鹿駆動勉強会 by Kazuyuki Honda
東の方からきました@鹿駆動勉強会
Kazuyuki Honda
•
959 views
Run Multi Version of Node.js on Heroku by Kazuyuki Honda
Run Multi Version of Node.js on Heroku
Kazuyuki Honda
•
1.1K views
Noder が Titanium Mobile で 作ってみた by Kazuyuki Honda
Noder が Titanium Mobile で 作ってみた
Kazuyuki Honda
•
4.1K views
初心者の初心者による初心者のための JavaScript ゲーム開発入門 by Kazuyuki Honda
初心者の初心者による初心者のための JavaScript ゲーム開発入門
Kazuyuki Honda
•
2.6K views
enchant.js source reading by Kazuyuki Honda
enchant.js source reading
Kazuyuki Honda
•
3.2K views
Kinect de-theremin by Kazuyuki Honda
Kinect de-theremin
Kazuyuki Honda
•
1.4K views
Recently uploaded
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料) by
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
217 views
•
33 slides
JJUG CCC.pptx by
JJUG CCC.pptx
Kanta Sasaki
6 views
•
14 slides
概念モデリングワークショップ 基礎編 by
概念モデリングワークショップ 基礎編
Knowledge & Experience
19 views
•
71 slides
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化 by
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
8 views
•
34 slides
概念モデリングワークショップ 設計編 by
概念モデリングワークショップ 設計編
Knowledge & Experience
10 views
•
37 slides
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料) by
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
185 views
•
63 slides
Recently uploaded
(8)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
217 views
JJUG CCC.pptx by Kanta Sasaki
JJUG CCC.pptx
Kanta Sasaki
•
6 views
概念モデリングワークショップ 基礎編 by Knowledge & Experience
概念モデリングワークショップ 基礎編
Knowledge & Experience
•
19 views
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化 by Knowledge & Experience
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
•
8 views
概念モデリングワークショップ 設計編 by Knowledge & Experience
概念モデリングワークショップ 設計編
Knowledge & Experience
•
10 views
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
185 views
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023
法林浩之
•
83 views
01Booster Studio ご紹介資料 by ssusere7a2172
01Booster Studio ご紹介資料
ssusere7a2172
•
220 views
10分で作る Node.js Auto Scale 環境 with CloudFormation
1.
Node.js Auto Scaling
in 10 minutes with AWS CloudFormation 2012/6/28 東京Node学園 6時限目 @hakobera
2.
Question AWSでNode.jsを何ノードま で動かしたことありますか?
3.
Node.jsで1億リクエスト/日 1億リクエスト/日 =>
417万リクエスト/時 => 7万リクエスト/分 => 1200リクエスト/秒
4.
AWS なら簡単
5.
AWS なら簡単 EC2
AMI (VMイメージ)の作成 Node.js 、依存パッケージのインストール セキュリティグループ ポート番号や接続制限 ELB プロトコルとポート番号 Auto Scale CloudWatch の設定 Auto Scale Group ポリシーの設定 アプリケーションのDeployとUpdate
6.
AWS なら簡単 EC2
AMI (VMイメージ)の作成 Node.js 、依存パッケージのインストール セキュリティグループ ポート番号や接続制限 ELB じゃなかった orz プロトコルとポート番号 Auto Scale CloudWatch の設定 Auto Scale Group ポリシーの設定 アプリケーションのDeployとUpdate
7.
そこで AWS CloudFormation
の出番 http://aws.amazon.com/jp/cloudformation/ AWS インフラ構成のテンプレート 設定の一部をパラメータ化できる JSON 形式 (Noder にはお馴染み) DynamoDBとCloudFront の先週からサポート開始 詳細はこちらを参照
8.
自分だけの PaaS が
簡単に作れる
9.
とりあえずやってみる Tempalte: https://cf-templates-for-nodejs.s3.amazonaws.com/cf-node-autoscale-tmpl.json App: https://github.com/hakobera/tng6_sample/zipball/master GitHub:
https://github.com/hakobera/tng6_sample
10.
Node.js と CloudFormation
の勘所 Node.js の AutoScale インストール Elastic Load アプリの Balancer と Deploy と Update WebSocket
11.
Node.js のインストール
12.
Node.jsのインストール バイナリパッケージを使おう
∵ micro インスタンスで Node.js のビルドが遅い Installing Node.js via package manager https://github.com/joyent/node/wiki/Installing-Node.js- via-package-manager $ sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/amzn1/nodejs-stable-release.noarch.rpm $ sudo yum install nodejs-compat-symlinks npm 残念ながら v0.8 はまだない
13.
Node.jsのインストール Cloud Init でパッケージ指定 "AppServerLaunchConfig":
{ "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata": { "AWS::CloudFormation::Init": { "config": { "packages": { "rpm" : { "nodejs" : "http://nodejs.tchol.org/repocfg/amzn1/nodejs-stable-release.noarch.rpm" }, "yum": { "gcc-c++": [], "make": [], "git" : [], "nodejs-compat-symlinks": [], "npm": [] } }, "sources" : { "/var/opt/app" : { "Ref": "AppURL" } } }, ...
14.
Node.jsのインストール
Cloud Init の起動設定 "Properties": { (省略) "UserData": { "Fn::Base64": { "Fn::Base64": { "Fn::Join": ["", [ "#!/bin/bash -vn", "yum update -y aws-cfn-bootstrapn", "# Helper functionn", "function error_exitn", "{n", " /opt/aws/bin/cfn-signal -e 1 -r "$1" '", { "Ref": "WaitHandle" }, "'n", " exit 1n", "}n", "# Install packagesn", "/opt/aws/bin/cfn-init -s ", { "Ref": "AWS::StackName" }, " -r AppServerLaunchConfig ", " --access-key ", { "Ref": "HostKeys" }, " --secret-key ", { "Fn::GetAtt": ["HostKeys", "SecretAccessKey"] }, " --region ", { "Ref": "AWS::Region" }, " || error_exit 'Failed to run cfn-init'n",
15.
Auto Scale
16.
Cloud Watch
http://aws.amazon.com/jp/cloudwatch/ http://aws.amazon.com/jp/autoscaling/ Auto Scale の条件(拡張・縮小のトリガー)は、 Cloud Watch のアラームで実現している アプリの特性の応じて、チェックする対象を変更 CPUUtilization, DiskReadBytes, DiskReadOps, DiskWriteBytes, DiskWriteOps, NetworkIn, NetworkOut Node.js だと、CPUUtilization か NetworkOut のどちらかで大体OK
17.
設定例: CPUUtilization
"AppServerScaleUpPolicy" : { "Type" : "AWS::AutoScaling::ScalingPolicy", "Properties" : { "AdjustmentType" : "ChangeInCapacity", "AutoScalingGroupName" : { "Ref" : "AppServerGroup" }, "Cooldown" : "60", "ScalingAdjustment" : "2" } }, "CPUAlarmHigh": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmDescription": "Scale-up if CPU > 90% for 10 minutes", "MetricName": "CPUUtilization", "Namespace": "AWS/EC2", "Statistic": "Average", "Period": "300", "EvaluationPeriods": "2", "Threshold": "90", "AlarmActions": [ { "Ref": "AppServerScaleUpPolicy" } ], "Dimensions": [ { "Name": "AutoScalingGroupName", "Value": { "Ref": "AppServerGroup" } } ],
18.
アプリの Deploy と
Update
19.
アプリのDeploy
"AppServerLaunchConfig": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata": { "AWS::CloudFormation::Init": { "sources" : { "/var/opt/app" : { "Ref": "AppURL" } } }, ... 指定したフォルダにダウンロード、展開してくれる } }, "Properties": { "UserData": { zipball または tarball のURL "Fn::Base64": { "Fn::Base64": { "Fn::Join": ["", [ "# Start applicationn", "cd /var/opt/appn", "npm config set PORT ", { "Ref": "AppServerPort" }, "n", "npm install --productionn", "NODE_ENV=production npm start > app.log 2>&1 &n", npm start で起動できるアプリならなんでもOK
20.
環境変数の取得 /**
NPM package config * Returns a value related by given key. * This method search following priority. NPM config (global) * process.env * 1. NPM package config * 2. NPM config の順で環境変数を解決する * 3. process.env * * @param {String} key Environment key * @param {String} [defaultValue] Default value if key not found. * @return {String} */ module.exports = function (key, defaultValue) { var NPM_PACKAGE_PREFIX = 'npm_package_config_'; var NPM_PREFIX = 'npm_config_'; var value = process.env[NPM_PACKAGE_PREFIX + key]; if (!value) { value = process.env[NPM_PREFIX + key]; if (!value) { value = process.env[key]; } } value = (!value && defaultValue) ? defaultValue : value; return value; };
21.
環境変数の取得
開発時は package.json を参照 { var http = require('http'), "name": "harite", env = require(‘./env’); "version": "0.1.0", "scripts": { var server = http.createServer(function (req, res) { "start": "node app.js", res.writeHead(200, { 'Content-Type': 'text/plain' }); "test": "make test" res.end('hello'); }, }); "config": { server.listen(env(‘PORT’), function () { "PORT": 5100, console.log('Server is running on port %d', server.address().port); "REDIS_URL": "redis://localhost" }); } } "npm config set harite:HOST_NAME `curl http://169.254.169.254/latest/meta-data/public-hostname`", "n", "npm config set harite:PORT ", { "Ref": "HariteServerPort" }, "n", "npm config set harite:REDIS_URL ", { "Fn::Join" : [ "", [ "redis://", { "Fn::GetAtt" : [ "RedisServer", "PrivateIp" ]}, n", "npm install --productionn", AWS ではCloudInit で指定 "NODE_ENV=production npm start > harite.log 2>&1 &n", 参考資料: http://d.hatena.ne.jp/sugyan/20110909/1315575343 http://d.hatena.ne.jp/Jxck/20120410/1334071898
22.
Github の場合 Branch 単位で
zipball が取得できる https://github.com/hakobera/tng6_sample/zipball/master リポジトリ ブランチ名
23.
アプリのUpdate Update Stack =>
LoadBalancer から現行バージョン のサーバを徐々に切り離す AutoScale の最低サーバ数以下に なると、新規サーバが起動 新規サーバは新しいアプリが zipball または tarball のURLを更新 デプロイされた状態で起動する (今回のテンプレートはなっていな いが)タグにアプリケーションの バージョンを仕込んでおいて、API 経由で判定 => 停止などやれば自動 化できるかも
24.
WebSocket
25.
ELBと相性が悪い プロトコルでHTTPを選択すると、HTTP1.1 のUpdate リクエストが通らないので、WebSocket がつながらな い プロトコルをTCPを選択すれば接続はできるが、接続先 サーバを固定できない
(Socket.IO で苦労する) 60秒で必ずタイムアウトする(設定の変更はできない) 参考: Socket.IO or WebSocket を AmazonELB でバランスする検証 http://d.hatena.ne.jp/Jxck/20120228/1330444857
26.
AutoScaleと相性が悪い AutoScale は WebSocket
がつながっていても縮退し てしまう クライアント側での再接続処理が必要 ただし、普通に再接続すると、EC2インスタンス自体が 落ちているので、つながらない
27.
回避策 WebSocket の URL
を返す API に ELB 経由でアクセス (HTTPヘッダで返すのでも良い) EC2 の Public DNS名は curl http://169.254.169.254/latest/meta-data/public-hostname で取得可能 クライアントは各EC2インスタンスと直接接続する 再接続時には、また ELB 経由で新しい WebSocket サーバのURLを取得 これを実現するクライアントライブラリ(WebSocketラッパー)を作成する
28.
閑話休題
29.
Pusher クローン作ってます https://github.com/hakobera/tuppari
来週公開予定 https://github.com/hakobera/tuppari-servers CloudFormation のテンプレートも配布
30.
Any Question ?