Your SlideShare is downloading. ×
Chef(Server)と AWS OpsWorks(tm)の比較
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

5,922

Published on

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

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

Published in: Technology
0 Comments
32 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,922
On Slideshare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
68
Comments
0
Likes
32
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×