Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Chef(Server)と
AWS OpsWorks(tm)の比較
2013/07/06
JAWS-UG Kobe 第2回
OpsWorks(Chef)特集
Saturday, July 6, 13
自己紹介
2
• http://opsrock.in 共同開発・運営
• AWS OpsWorksとChefを主に取り扱
うソリューションを提供
• 澤登 HiganWorks合同会社の代表社員
• アプリケーションのためのプラットフォーム構築...
本日の内容
• Chefの紹介
• OpsWorksの紹介
• それぞれの目的/用途と特徴
• Chef/OpsWorks比較
• Chef/OpsWorksでのシステム構築
(Ops視点)
• OpsWorksでRailsをChef Depl...
Chefの紹介
Saturday, July 6, 13
参考スライドから簡単に
5
http://www.slideshare.net/YukihikoSawanobori/what-is-chef201303
Saturday, July 6, 13
Chefって何するツール?
• インフラ環境のメタデータ管理
• ノードの役割を定義して収束させるフレーム
ワーク
• 環境管理の作業を自動化/一般化するツール
• Infrastructure as codeの思想を補助する
6
Saturd...
泥臭いツールOhaiを中心に
プラットフォーム互換性を支える
• 設定収束のためにノード情報の収集
• ディストリビューション判断の
if elseif elseif elseif elseif ... (Ohai)
• パッケージとサービス管...
収束・冪等性
• Chef-ClientはノードをCookbookのレシピに書
いたとおりの状態に近づけます
• 何度実行しても同じ結果、同じ状態となる (冪
等) ようレシピにしておく事が重要
• このへん捕捉
• 全てのレシピを常に実行状態...
Chef形態あれこれ
• Server
• Hosted ChefServer
• OpscodeのSaaS
• Private ChefServer
• Opscodeのサービス
• OpenSource ChefServer
• Linux...
OpsWorksの紹介
Saturday, July 6, 13
こちらも参考スライドから
11
http://www.slideshare.net/YukihikoSawanobori/copy-2013-0622awsopsworksoverview
Saturday, July 6, 13
AWS OpsWorksとは?
12
Saturday, July 6, 13
AWS OpsWorksとは?
12
• アプリケーションのライフサイクル管理を一
本化するために作られたソリューション
Saturday, July 6, 13
AWS OpsWorksとは?
12
• アプリケーションのライフサイクル管理を一
本化するために作られたソリューション
• プラットフォームの自動構築
Saturday, July 6, 13
AWS OpsWorksとは?
12
• アプリケーションのライフサイクル管理を一
本化するために作られたソリューション
• プラットフォームの自動構築
• アプリケーションのdeploy(undeploy)
Saturday, July 6,...
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
13
Saturday, July 6, 13
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
13
Saturday, July 6, 13
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
13
Saturday, July 6, 13
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
13
Saturday, July 6, 13
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
13
Saturday, July 6, 13
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
14
Saturday, July 6, 13
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
14
Saturday, July 6, 13
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
14
OpsWorks Agent
Saturday, July 6, 13
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
14
OpsWorks Agent
タスク実行
Saturday, July...
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
14
OpsWorks Agent
タスク実行 タスク実行管理
Saturd...
OpsWorksを理解する用語集
• スタック
• 特定のアプリケーションシステム全体
• レイヤ
• アプリケーション動作プラットホームを役
割別に定義するインスタンスの集合
• WEB役,DB役など
• ライフサイクル (次ページへ)
15...
1.Setup
2.Configure
3.Deploy
4.UnDeploy
5.Shutdown
16
OpsWorksのライフサイクル定義
Saturday, July 6, 13
1.Setup
2.Configure
3.Deploy
4.UnDeploy
5.Shutdown
16
OpsWorksのライフサイクル定義
プラットフォーム部分
Saturday, July 6, 13
1.Setup
2.Configure
3.Deploy
4.UnDeploy
5.Shutdown
16
OpsWorksのライフサイクル定義
プラットフォーム部分
アプリケーション部分
Saturday, July 6, 13
Chef / OpsWorks
それぞれの
目的/用途と特徴
Saturday, July 6, 13
その前に...それぞれの印象
18
OpsWorks
Chef
• アプリ のデプロイ、ライ
フサイクル管理に 全力特化
•しきたりが意外と重要
•使い方は色々
• プラットフォーム を結構
広い意味で取り扱える
※発表者個人の感想です、先入観...
その前に...それぞれの印象
18
OpsWorks
Chef
• アプリ のデプロイ、ライ
フサイクル管理に 全力特化
•しきたりが意外と重要
•使い方は色々
• プラットフォーム を結構
広い意味で取り扱える
※発表者個人の感想です、先入観...
その前に...それぞれの印象
18
OpsWorks
Chef
• アプリ のデプロイ、ライ
フサイクル管理に 全力特化
•しきたりが意外と重要
•使い方は色々
• プラットフォーム を結構
広い意味で取り扱える
※発表者個人の感想です、先入観...
対応OSディストリビューション
19
OpsWorks
Chef
•AmazonLinux(CentOSベース)
•Ubuntu12.04
•redhat系、Debian系
•Windows、MacOSX
•FreeBSD、Solaris
•な...
クラウドインテグレーション
20
OpsWorks
Chef
•AWSとはそこそこ。
•ELB, CloudWatchなどとデフォルト連
携OK
•Bootstrapとプラグインで大概対応可
•サーバ調達IaaSもどこでもいい
(EC2, Op...
CookBooks管理
21
OpsWorks
Chef
•システム一式を同一リポジトリでまとめ
て管理する必要がある
•スタックへの更新は一括適用
•ChefServerにCookbookバージョン管
理の仕組みを備える
•Berkshelf...
Chefのバージョン
22
OpsWorks
Chef
•0.9.15.5(2013/07時点)
•Defenition, LibrariesとLWRPはひと通
り使えるが最近の書式に対応していない
箇所も
•11.x
•コミュニティCookb...
ChefClientの実行
23
OpsWorks
Chef
•ライフサイクルの進行ごとにChefSolo
を順次実行。(都度JSON作成)
•Chef単純にタスク実行としての意味合
いが強い
•イベント対応でオンタイム実行も
•ChefCli...
ノードのAttributes
24
OpsWorks
Chef
•スタック・レイヤの情報のみが随時更新
&構成に利用可能
•ユーザ指定はスタックの Custom Chef
Json にて
•Ohaiの収集情報がServerに集約され、
フルに活...
テストスイート
25
OpsWorks
Chef
•地味にminitest-chef-handlerが付いて
いる。
•cookbooks内に受け入れtestを書いて、
Failさせることは可能。
•ServerSpecもおそらく有効
•Vag...
Chef/OpsWorksでのシ
ステム構築
(Ops視点)
Saturday, July 6, 13
テーマは
アプリケーションの
ホスト
Saturday, July 6, 13
Chefでシステム構築例
• まず単体サーバ
• とりあえずアプリケーションを動かすところ
へ持っていく
• ミドルウェアの設定にChefを使っていく
• アプリのデプロイは場合によってツールを選
択
• 構築中:Capistrano
=> 本...
ステップ1:構築初期
29
ChefServer
DevServer
APP
ミドルウェアを
適当に設定
手動設定をCookbookに起こしな
がらDevサーバ側で実行を繰り返
して調整。
先にテストを書くのもベター。
Saturday, Ju...
ステップ2:役割定義
30
ChefServer
DevServer
APP
HTTP Proxy
アプリケーションのプラットフォーム
として、各種ミドルウェアを役割別に
分類し、グループ化する。
QueueServer
Roleとしてrun_...
ステップ3:Staging/本番展開
31
ChefServer
StagingServer1
役割(Role)はChefServer
のSearchAPIを使うか、
DataBagなどで集中管理
してそれぞれのIP(場所)を
お互い知れるよう...
Chefで構築まとめ
• 最初は開発サーバを直接適当にいじりながら
徐々にCookbookへ
• 最終的には開発サーバもChef実行で収束
するようにしておく(手作業再現)
• 手作業の代わりとしてテストが使える
※よく知っているミドルウェアが...
OpsWorksでシステム構築例
• アプリを中心に、まず必要な役割(レイヤ)を
考える
• なるべく標準レイヤでまかないつつ、無いも
のを追加していく
• レイヤは Custom Cookbook と Custom
Chef JSON で
•...
OpsWorksレイヤ追加
34
Cookbook
リポジトリ
OpsWorks
新しいレイヤ
Custom Cookbookで新しいレイ
ヤを作成。
個別設定、クレデンシャル情報な
どはCustom Chef JSONに定義
する。
Cust...
新レイヤの利用
35
Cookbook
リポジトリ
OpsWorks
新しいレイヤ
既存レイヤはOpsWorks Backendを
通じて、新しいレイヤ上インスタン
スの情報を取得。
クレデンシャル等はJSONから。
Custom Chef J...
OpsWorksで
railsを
Chef Deploy
Saturday, July 6, 13
デプロイしたRailsアプリ
• Railsリポジトリ内にChefレシピを含める
• 他のAWSと連携する
• RailsServerとは別に、ワーカーデーモンが
ひとつ
• 定期的実行するCronにジョブを登録する
• ChefのDeploy...
ChefのDeployについて
• デプロイを細かいタスクに分けて実行
• 各タスクの間にフックを仕込める
• 仕込み先は Railsプロジェクト の
リポジトリ
• migrate, symlink, restartの
それぞれberfore...
他のAWSと連携するので
コンフィグを作る
• before_restartのフックでChefる
• deploy/before_restart.rb
39
aws_configs	
  =<<__EOL__
production:
	
  	...
ワーカーデーモンを起動する 1/2
40
• 起動・終了スクリプトを設置するため
before_symlinkあたりのフックでChefる
• deploy/before_symlink.rb
sqs_start_script	
  =<<__E...
ワーカーデーモンを起動する 2/2
41
• 実際に(再)起動するため
after_restartのフックでChefる
• deploy/after_restart.rb
execute	
  'start	
  sqs_worker'	
  ...
Cronにジョブを登録する
42
• after_restartのフックでChefる
• deploy/after_restart.rb
cron	
  'add	
  sqs_scheduler'	
  do
	
  	
  action	
...
最後に
• OpsWorksの主題はアプリのライフサイクル
管理
• タスク実行にChefのレシピが使える
• 用意されているものから選択するのは楽
• ChefServerは用途色々
• 自由度が高い分、システムの目的・ノード
の役割をしっか...
OpsRock.in
44
Saturday, July 6, 13
以上
ありがとうございました
ご質問・ご相談は
適当にお越しください(^^)
Saturday, July 6, 13
Upcoming SlideShare
Loading in …5
×

Chef(Server)と AWS OpsWorks(tm)の比較

8,022 views

Published on

2013/07/06 JAWS-UG Kobe 第2回 OpsWorks(Chef)特集 発表スライド

Published in: Technology
  • Be the first to comment

Chef(Server)と AWS OpsWorks(tm)の比較

  1. 1. Chef(Server)と AWS OpsWorks(tm)の比較 2013/07/06 JAWS-UG Kobe 第2回 OpsWorks(Chef)特集 Saturday, July 6, 13
  2. 2. 自己紹介 2 • http://opsrock.in 共同開発・運営 • AWS OpsWorksとChefを主に取り扱 うソリューションを提供 • 澤登 HiganWorks合同会社の代表社員 • アプリケーションのためのプラットフォーム構築/運 用自動化をテーマに活動 Saturday, July 6, 13
  3. 3. 本日の内容 • Chefの紹介 • OpsWorksの紹介 • それぞれの目的/用途と特徴 • Chef/OpsWorks比較 • Chef/OpsWorksでのシステム構築 (Ops視点) • OpsWorksでRailsをChef Deploy 3 Saturday, July 6, 13
  4. 4. Chefの紹介 Saturday, July 6, 13
  5. 5. 参考スライドから簡単に 5 http://www.slideshare.net/YukihikoSawanobori/what-is-chef201303 Saturday, July 6, 13
  6. 6. Chefって何するツール? • インフラ環境のメタデータ管理 • ノードの役割を定義して収束させるフレーム ワーク • 環境管理の作業を自動化/一般化するツール • Infrastructure as codeの思想を補助する 6 Saturday, July 6, 13
  7. 7. 泥臭いツールOhaiを中心に プラットフォーム互換性を支える • 設定収束のためにノード情報の収集 • ディストリビューション判断の if elseif elseif elseif elseif ... (Ohai) • パッケージとサービス管理をDSL(レシピ)で 表わすためのChef::Providers(chef-client) 7 Saturday, July 6, 13
  8. 8. 収束・冪等性 • Chef-ClientはノードをCookbookのレシピに書 いたとおりの状態に近づけます • 何度実行しても同じ結果、同じ状態となる (冪 等) ようレシピにしておく事が重要 • このへん捕捉 • 全てのレシピを常に実行状態(run_list)してお く必要はない • 構成変更時専用のレシピもあり(でも冪等) 8 beki tou sei Saturday, July 6, 13
  9. 9. Chef形態あれこれ • Server • Hosted ChefServer • OpscodeのSaaS • Private ChefServer • Opscodeのサービス • OpenSource ChefServer • Linux(ほぼUbuntu)にインストールできるChefサーバ • Client • Chef-Client: Serverとセットで • Chef-Solo:単独の簡易版 9 Saturday, July 6, 13
  10. 10. OpsWorksの紹介 Saturday, July 6, 13
  11. 11. こちらも参考スライドから 11 http://www.slideshare.net/YukihikoSawanobori/copy-2013-0622awsopsworksoverview Saturday, July 6, 13
  12. 12. AWS OpsWorksとは? 12 Saturday, July 6, 13
  13. 13. AWS OpsWorksとは? 12 • アプリケーションのライフサイクル管理を一 本化するために作られたソリューション Saturday, July 6, 13
  14. 14. AWS OpsWorksとは? 12 • アプリケーションのライフサイクル管理を一 本化するために作られたソリューション • プラットフォームの自動構築 Saturday, July 6, 13
  15. 15. AWS OpsWorksとは? 12 • アプリケーションのライフサイクル管理を一 本化するために作られたソリューション • プラットフォームの自動構築 • アプリケーションのdeploy(undeploy) Saturday, July 6, 13
  16. 16. プラットフォームの自動構築 • アプリケーションが動作する プラットフォームとは? • ネットワーク環境の構築 • サーバ(インスタンス)の調達 • ミドルウェアの設定 13 Saturday, July 6, 13
  17. 17. プラットフォームの自動構築 • アプリケーションが動作する プラットフォームとは? • ネットワーク環境の構築 • サーバ(インスタンス)の調達 • ミドルウェアの設定 13 Saturday, July 6, 13
  18. 18. プラットフォームの自動構築 • アプリケーションが動作する プラットフォームとは? • ネットワーク環境の構築 • サーバ(インスタンス)の調達 • ミドルウェアの設定 13 Saturday, July 6, 13
  19. 19. プラットフォームの自動構築 • アプリケーションが動作する プラットフォームとは? • ネットワーク環境の構築 • サーバ(インスタンス)の調達 • ミドルウェアの設定 13 Saturday, July 6, 13
  20. 20. プラットフォームの自動構築 • アプリケーションが動作する プラットフォームとは? • ネットワーク環境の構築 • サーバ(インスタンス)の調達 • ミドルウェアの設定 13 Saturday, July 6, 13
  21. 21. アプリケーションのdeploy • アプリケーション ソースコード(リポジトリ) • git, svn, zip(http, s3) + 何らかの配布/ビルドの仕組み 14 Saturday, July 6, 13
  22. 22. アプリケーションのdeploy • アプリケーション ソースコード(リポジトリ) • git, svn, zip(http, s3) + 何らかの配布/ビルドの仕組み 14 Saturday, July 6, 13
  23. 23. アプリケーションのdeploy • アプリケーション ソースコード(リポジトリ) • git, svn, zip(http, s3) + 何らかの配布/ビルドの仕組み 14 OpsWorks Agent Saturday, July 6, 13
  24. 24. アプリケーションのdeploy • アプリケーション ソースコード(リポジトリ) • git, svn, zip(http, s3) + 何らかの配布/ビルドの仕組み 14 OpsWorks Agent タスク実行 Saturday, July 6, 13
  25. 25. アプリケーションのdeploy • アプリケーション ソースコード(リポジトリ) • git, svn, zip(http, s3) + 何らかの配布/ビルドの仕組み 14 OpsWorks Agent タスク実行 タスク実行管理 Saturday, July 6, 13
  26. 26. OpsWorksを理解する用語集 • スタック • 特定のアプリケーションシステム全体 • レイヤ • アプリケーション動作プラットホームを役 割別に定義するインスタンスの集合 • WEB役,DB役など • ライフサイクル (次ページへ) 15 Saturday, July 6, 13
  27. 27. 1.Setup 2.Configure 3.Deploy 4.UnDeploy 5.Shutdown 16 OpsWorksのライフサイクル定義 Saturday, July 6, 13
  28. 28. 1.Setup 2.Configure 3.Deploy 4.UnDeploy 5.Shutdown 16 OpsWorksのライフサイクル定義 プラットフォーム部分 Saturday, July 6, 13
  29. 29. 1.Setup 2.Configure 3.Deploy 4.UnDeploy 5.Shutdown 16 OpsWorksのライフサイクル定義 プラットフォーム部分 アプリケーション部分 Saturday, July 6, 13
  30. 30. Chef / OpsWorks それぞれの 目的/用途と特徴 Saturday, July 6, 13
  31. 31. その前に...それぞれの印象 18 OpsWorks Chef • アプリ のデプロイ、ライ フサイクル管理に 全力特化 •しきたりが意外と重要 •使い方は色々 • プラットフォーム を結構 広い意味で取り扱える ※発表者個人の感想です、先入観を持たないようお願いします Saturday, July 6, 13
  32. 32. その前に...それぞれの印象 18 OpsWorks Chef • アプリ のデプロイ、ライ フサイクル管理に 全力特化 •しきたりが意外と重要 •使い方は色々 • プラットフォーム を結構 広い意味で取り扱える ※発表者個人の感想です、先入観を持たないようお願いします Saturday, July 6, 13
  33. 33. その前に...それぞれの印象 18 OpsWorks Chef • アプリ のデプロイ、ライ フサイクル管理に 全力特化 •しきたりが意外と重要 •使い方は色々 • プラットフォーム を結構 広い意味で取り扱える ※発表者個人の感想です、先入観を持たないようお願いします Saturday, July 6, 13
  34. 34. 対応OSディストリビューション 19 OpsWorks Chef •AmazonLinux(CentOSベース) •Ubuntu12.04 •redhat系、Debian系 •Windows、MacOSX •FreeBSD、Solaris •などなど各種対応 Saturday, July 6, 13
  35. 35. クラウドインテグレーション 20 OpsWorks Chef •AWSとはそこそこ。 •ELB, CloudWatchなどとデフォルト連 携OK •Bootstrapとプラグインで大概対応可 •サーバ調達IaaSもどこでもいい (EC2, OpenStack,Joyent等) •そもそもIaaSをChefで構築したり (OpenCenter(OpenStack)など) Saturday, July 6, 13
  36. 36. CookBooks管理 21 OpsWorks Chef •システム一式を同一リポジトリでまとめ て管理する必要がある •スタックへの更新は一括適用 •ChefServerにCookbookバージョン管 理の仕組みを備える •Berkshelf,Librarian等、Server/Solo問 わず使いやすいツールあり Saturday, July 6, 13
  37. 37. Chefのバージョン 22 OpsWorks Chef •0.9.15.5(2013/07時点) •Defenition, LibrariesとLWRPはひと通 り使えるが最近の書式に対応していない 箇所も •11.x •コミュニティCookbooksはほぼ10以降 のバージョン用 Saturday, July 6, 13
  38. 38. ChefClientの実行 23 OpsWorks Chef •ライフサイクルの進行ごとにChefSolo を順次実行。(都度JSON作成) •Chef単純にタスク実行としての意味合 いが強い •イベント対応でオンタイム実行も •ChefClientでChefServerと通信 •基本はCronで継続的に実行 Saturday, July 6, 13
  39. 39. ノードのAttributes 24 OpsWorks Chef •スタック・レイヤの情報のみが随時更新 &構成に利用可能 •ユーザ指定はスタックの Custom Chef Json にて •Ohaiの収集情報がServerに集約され、 フルに活用できる。 •レシピ内でのSetAttribute、Role他で のAttributeマージor更新が柔軟 Saturday, July 6, 13
  40. 40. テストスイート 25 OpsWorks Chef •地味にminitest-chef-handlerが付いて いる。 •cookbooks内に受け入れtestを書いて、 Failさせることは可能。 •ServerSpecもおそらく有効 •Vagrantを軸にtest-kitchenなどのツー ルが っている •ChefSpec, FoodcriticなどCookbook ごとのテストもそこそこやりやすい Saturday, July 6, 13
  41. 41. Chef/OpsWorksでのシ ステム構築 (Ops視点) Saturday, July 6, 13
  42. 42. テーマは アプリケーションの ホスト Saturday, July 6, 13
  43. 43. Chefでシステム構築例 • まず単体サーバ • とりあえずアプリケーションを動かすところ へ持っていく • ミドルウェアの設定にChefを使っていく • アプリのデプロイは場合によってツールを選 択 • 構築中:Capistrano => 本番: CapistranoまたはChefなど 28 Saturday, July 6, 13
  44. 44. ステップ1:構築初期 29 ChefServer DevServer APP ミドルウェアを 適当に設定 手動設定をCookbookに起こしな がらDevサーバ側で実行を繰り返 して調整。 先にテストを書くのもベター。 Saturday, July 6, 13
  45. 45. ステップ2:役割定義 30 ChefServer DevServer APP HTTP Proxy アプリケーションのプラットフォーム として、各種ミドルウェアを役割別に 分類し、グループ化する。 QueueServer Roleとしてrun_listを 登録していく KVS(Cache) MailServer Database App Runtime Saturday, July 6, 13
  46. 46. ステップ3:Staging/本番展開 31 ChefServer StagingServer1 役割(Role)はChefServer のSearchAPIを使うか、 DataBagなどで集中管理 してそれぞれのIP(場所)を お互い知れるようにしてお く。 Roleのrun_listを 適用していく StagingServer2 StagingServer3 StagingServer4 StagingServer5 StagingServer6 Database MailServer QueueServer APPAPP AppRuntime AppRuntime HTTP Proxy KVS(Cache) Saturday, July 6, 13
  47. 47. Chefで構築まとめ • 最初は開発サーバを直接適当にいじりながら 徐々にCookbookへ • 最終的には開発サーバもChef実行で収束 するようにしておく(手作業再現) • 手作業の代わりとしてテストが使える ※よく知っているミドルウェアが対象なら テストファーストが効率良い • ロールの定義とChefServerへのクエリベー スの構成まで持っていけば量産体制へ 32 Saturday, July 6, 13
  48. 48. OpsWorksでシステム構築例 • アプリを中心に、まず必要な役割(レイヤ)を 考える • なるべく標準レイヤでまかないつつ、無いも のを追加していく • レイヤは Custom Cookbook と Custom Chef JSON で • アプリのデプロイはChefのDeployリソース 一択 33 Saturday, July 6, 13
  49. 49. OpsWorksレイヤ追加 34 Cookbook リポジトリ OpsWorks 新しいレイヤ Custom Cookbookで新しいレイ ヤを作成。 個別設定、クレデンシャル情報な どはCustom Chef JSONに定義 する。 Custom Chef JSON Saturday, July 6, 13
  50. 50. 新レイヤの利用 35 Cookbook リポジトリ OpsWorks 新しいレイヤ 既存レイヤはOpsWorks Backendを 通じて、新しいレイヤ上インスタン スの情報を取得。 クレデンシャル等はJSONから。 Custom Chef JSON 既存レイヤ OpsWorks Backend Saturday, July 6, 13
  51. 51. OpsWorksで railsを Chef Deploy Saturday, July 6, 13
  52. 52. デプロイしたRailsアプリ • Railsリポジトリ内にChefレシピを含める • 他のAWSと連携する • RailsServerとは別に、ワーカーデーモンが ひとつ • 定期的実行するCronにジョブを登録する • ChefのDeployリソースなのでChefServerで も大体通用 37 Saturday, July 6, 13
  53. 53. ChefのDeployについて • デプロイを細かいタスクに分けて実行 • 各タスクの間にフックを仕込める • 仕込み先は Railsプロジェクト の リポジトリ • migrate, symlink, restartの それぞれberfore/afterのタイミング 38 Saturday, July 6, 13
  54. 54. 他のAWSと連携するので コンフィグを作る • before_restartのフックでChefる • deploy/before_restart.rb 39 aws_configs  =<<__EOL__ production:    access_key_id:  "#{node[:aws_configs][:access_key_id]}"    secret_access_key:  "#{node[:aws_configs][:secret_access_key]}" __EOL__ file  ::File.expand_path('../../shared/config/aws.yml',  release_path)  do    action  :create    content  aws_configs    mode  '0660'    owner  'deploy'    group  'www-­‐data' end link  ::File.join(release_path,  'config/aws.yml')  do    to  ::File.expand_path('../../shared/config/aws.yml',  release_path)    owner  'deploy' end yamlの文字列作成 sharedの下にファイル設置 最新のアプリコードの下に リンク作成 Saturday, July 6, 13
  55. 55. ワーカーデーモンを起動する 1/2 40 • 起動・終了スクリプトを設置するため before_symlinkあたりのフックでChefる • deploy/before_symlink.rb sqs_start_script  =<<__EOL__ #!/bin/bash export  RAILS_ENV=production cd  #{::File.expand_path('../../current',  release_path)} bundle  exec  thor  sqs:start  -­‐d  -­‐-­‐pidfile  tmp/pids/sqs_worker.pid __EOL__ file  ::File.expand_path('../../shared/scripts/sqs_start',  release_path)  do    action  :create    content  sqs_start_script    mode  '0755'    owner  'deploy'    group  'www-­‐data' end 開始スクリプトの 文字列作成 実行権をつけて設置 Saturday, July 6, 13
  56. 56. ワーカーデーモンを起動する 2/2 41 • 実際に(再)起動するため after_restartのフックでChefる • deploy/after_restart.rb execute  'start  sqs_worker'  do    command  '/srv/www/rails_ses/shared/scripts/sqs_start'    action  :run end デーモン開始を execute Saturday, July 6, 13
  57. 57. Cronにジョブを登録する 42 • after_restartのフックでChefる • deploy/after_restart.rb cron  'add  sqs_scheduler'  do    action  :create    minute  '3/*'    command  ::File.expand_path('../../shared/scripts/scheduler',  release_path) end 3分置きに実行するコマンドを Cronに登録する Saturday, July 6, 13
  58. 58. 最後に • OpsWorksの主題はアプリのライフサイクル 管理 • タスク実行にChefのレシピが使える • 用意されているものから選択するのは楽 • ChefServerは用途色々 • 自由度が高い分、システムの目的・ノード の役割をしっかり定義しておかないとぐだ ります 43 Saturday, July 6, 13
  59. 59. OpsRock.in 44 Saturday, July 6, 13
  60. 60. 以上 ありがとうございました ご質問・ご相談は 適当にお越しください(^^) Saturday, July 6, 13

×