Successfully reported this slideshow.
Your SlideShare is downloading. ×

6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 25 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (18)

Advertisement

Similar to 6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話 (20)

Recently uploaded (20)

Advertisement

6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話

  1. 1. 6リージョン同時75万接続のメッ セージ配信基盤を CloudFormationと Capistranoで 3日で構築した話 CM re:Growth Developers.IO Meetup 01 大瀧隆太(@takipone) 2013/12/10 classmethod.jp 1
  2. 2. 6リージョン同時75万接続のメッ セージ配信基盤を CloudFormationと Capistranoで 3日で構築した話 CM re:Growth Developers.IO Meetup 01 2013/12/10 classmethod.jp Twitter #cmdevio 大瀧隆太(@takipone) 2
  3. 3. 自己紹介 • 氏名 : 大瀧隆太 • ポジション : ソリューションアーキテクト / 研修講師 • 得意分野 : ネットワーク / デプロイツール • 好きなAWSサービス Amazon Route 53 classmethod.jp 3
  4. 4. システム概要1 • いくつかのシステムを組み合わせて構築 • 今回の担当は、75万のクライアントに データをプッシュするもの • アプリは担当外 → 3日で180台のインスタンスを デプロイしなければならない。 しかも複数リージョンなので、 単純なAutoScaling構成ともいかない。 classmethod.jp 4
  5. 5. システム概要2 Sub ×15 Client Redis on EC2 Auto scaling Pub Availability Zone Mobile Client × 750K Sub ×15 Auto scaling Availability Zone classmethod.jp Publish app on EC2 Redis on EC2
  6. 6. システム概要3 バージニア us-east-1 Client オレゴン us-west-2 東京 ap-northeast-1 Mobile Client × 750K カリフォルニア us-west-1 アイルランド eu-west-1 シンガポール ap-southeast-1 classmethod.jp Publish app on EC2
  7. 7. 時間との闘い • 実装方法は、社内にノウハウがあるもの と思いついたもので手を動かしながら検 討。 →最新のかっこいいツールを使ったわけ ではないです。 →ノウハウはベストプラクティスとは 限りません。時には、手間を惜しんで 力技に訴える場合もあります。 classmethod.jp 7
  8. 8. とはいえ... • 手作業で180台構築、しかもマルチリー ジョンは現実的ではない。 • コードが順次アップデートされ、インス タンス起動後のデプロイも必要なので、 マスター(AMIイメージ)の作成では不十分。 →ツールに頼ることにした。 classmethod.jp 8
  9. 9. ツールという翼を授かる • 今回は学習コストをかけられないので、 触ったことのあるツールから選択。 • AWS CloudFormation • Capistrano classmethod.jp 9
  10. 10. CloudFormationで マルチリージョン構成 • CloudFormationは、AWSのコンポーネント を自動作成できるAWSサービス – あらかじめJSON形式のテンプレートで記述する • リージョン毎の違いはほとんど意識しなくて よい (一部例外アリ) – 単一リージョン用のテンプレートを使い回しでき る! – Parameters/Outputsなど構成を柔軟にする機能↑ これ重要 classmethod.jp 10
  11. 11. CloudFormation活用ノウハウ1 • 全コンポーネントを単一テンプレートで記述 しない。 – 作成でコケると全部ロールバックしてしまい、な にも残らない。 – 大規模環境では、テンプレートが正しいものでも 不確定要素によってコケるケースがある。 • なんらかのリソース上限に到達 →特に、AutoScalingは上限に行ってもエラーを出さず、 上限内のインスタンス数を維持する • リージョン全体のキャパシティ不足で、インスタンス 起動に失敗 classmethod.jp 11
  12. 12. CloudFormation活用ノウハウ2 • 分割例(というか、今回使った構成) 1. 2. 3. 4. VPCとセキュリティグループ ELB【重要】→ 暖気申請 EIP【重要】 → セキュリティグループ EC2インスタンス / AutoScaling • 依存関係(作る順番)は手で管理 – テンプレートファイル名のプレフィックス に番号をつけた – Parameters/Outputsの受け渡しが必要 classmethod.jp 12
  13. 13. CloudFormation活用ノウハウ3 • 複数テンプレートを組み合わせると、 Management Consoleでの実行は 破綻する – IDの受け渡しとか無理。 – 6リージョンで6回繰り返しとか無理。 →スクリプトを組むべし。 – jq/awscli --queryと仲良くなれると 効率アップ! classmethod.jp 13
  14. 14. classmethod.jp 14
  15. 15. classmethod.jp 15
  16. 16. classmethod.jp 16
  17. 17. Capistranoでデプロイ • Capistranoは、Ruby製のデプロイツール – Ruby on Railsのデプロイで有名。 – やってることはSSH経由のコマンド実行なので、 Rails以外の用途でも汎用で使えます。 • AWS SDK for Rubyとの組み合わせが 超強力!! – ELB配下の全EC2インスタンスを動的に取得し、 同じコマンドラインが実行できる! – AutoScalingやTagづけでも夢がひろが(以下略 classmethod.jp 17
  18. 18. AWSのAPIキー ELB名の ハッシュ 定義 classmethod.jp 18
  19. 19. EC2のEIPを格納する配列を定義 ↑ELB配下のEC2のEIPを配列に追加! ロールに設定 classmethod.jp 19
  20. 20. Capistrano活用ノウハウ1 • ユーザーデータ(CloudFormation)とのユーザー権 限のバッティングに注意 – ユーザーデータはroot権限で実行される – CapistranoはSSHで接続するユーザー権限(Amazon Linuxでは非root) – コピペではまず通らない。 – ユーザーデータで作ったファイルがCapistranoで消せ ない、書き出せない事象が多発。 → su -cやsudoと仲良くなりましょう。 • 冪等性がやっぱりほすぃ...。 – 終了値0以外で全台ストップするので、ごにょごにょ classmethod.jp 20
  21. 21. classmethod.jp 21
  22. 22. Capistrano活用ノウハウ2 • User-Separatedな実行系に注意 – RubyGems/Bundler(Ruby)やnpm(nodejs)、 Composer(PHP)など →今回はnpm – ユーザーデータ/Capistranoタスクの難易度が ぐーんと上がる。 – 絶対パスやcd/sudoなどでなんとか対応した。 – Capistranoタスクであれば、Rubyシンタック ス(変数/配列の参照)を上手く使いましょう。 classmethod.jp 22
  23. 23. classmethod.jp 23
  24. 24. まとめと後日談1 • CloudFormationで自動構築、複数リー ジョン対応は強力! • CapistoranoはRails以外のデプロイでも絶 大な力を発揮する。AWS SDKとの組み合 わせが強力すぎる。 classmethod.jp 24
  25. 25. まとめと後日談2 • CloudFormationとCapistoranoが無かった と思うとゾッとします。あと、AMIリー ジョン間コピーも。 • もう、しばらくいいです・・・。 • 社内で同じような案件がゴロゴロしてい るので、ノウハウ蓄積の一助になりたい。 classmethod.jp 25

×