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