Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

Preview:

DESCRIPTION

http://chef-meetup-kansai.doorkeeper.jp/events/4978 第1回 Chef Casual Talks Kansai のオープニングに使ったスライドです

Citation preview

第一回Chef Casual Talks Kansai

2013.07.24主催: HiganWorks LLC

Wednesday, July 24, 13

• http://chef-meetup-kansai.doorkeeper.jp/

• Chefとかでサーバインフラ自動化全般に関わっている人で集まって情報交換しましょうというコミュニティです

• 原則、参加者全員なんでもいいから発表

• ハッシュタグ(仮): #opschef_kansai , #opschef_ja

2Wednesday, July 24, 13

HiganWorks, OpsRockについて

3

• http://opsrock.in 共同開発・運営

• AWS OpsWorksとChefを主に取り扱うソリューションを提供

• アプリケーションのためのプラットフォーム構築/運用自動化をテーマに活動

Wednesday, July 24, 13

配布資料(参加特典)TDI with chef(Ja)第一章

4注:Casualさはカケラもございません

Wednesday, July 24, 13

FYI: 先日ChefClientの11.6.0がリリース

5Wednesday, July 24, 13

リリースノートのコントリビュータにちゃっかり混ざってみました※ @urasoko 氏が言及しなかったら多分気づかず

6Wednesday, July 24, 13

インフラとしてのコード- Infrastructure as code -

Chef Casual Talks Kansai Vol.1オープニング

Wednesday, July 24, 13

Chef によるテスト駆動型インフラストラクチャ開発 より• ボタンひとつでサーバインスタンスの調達• 生産性の高いウェブ・アプリケーションフレームワークの隆盛

• インフラの抽象化、設計、実装、デプロイというニーズ

• アプリ開発の優れた手法を取り入れ

8Wednesday, July 24, 13

『コードとしてのインフラ』というアプローチがもたらす恩恵

• 自動化(Automation)

• 敏捷性(Agility)

• 拡張性(Scalability)

• 信頼性(Reassurance)

• ディザスタ・リカバリ(Disaster recovery)

• それとOpscodeが提唱する、基礎的(primitive)コンポーネントを再利用可能にする10の原則※詳しくは配布資料で。(”収束”・”冪等性”など)

9Wednesday, July 24, 13

でも実際どういうことなん?

Wednesday, July 24, 13

先日構築したシステムから、コードとしてのインフラって

“こういう事なのかもしれん”という解釈をちょっとお話します

Wednesday, July 24, 13

アプリデプロイをたのまれました

Wednesday, July 24, 13

今からインフラを構築します...

まず何しますか?

Wednesday, July 24, 13

初手、git init

※完成後のいま、93commits

Wednesday, July 24, 13

bundle initvim Gemfilebundle install

Wednesday, July 24, 13

librarian-chef initvim Cheffile

librarian-chef install

Wednesday, July 24, 13

この頃のリポジトリ├── Cheffile├── Cheffile.lock├── Gemfile├── README.md├── Rakefile├── cookbooks└── site-cookbooks

17

※git checkoutで調査

Wednesday, July 24, 13

このころのCheffile抜粋site 'http://community.opscode.com/api/v1'cookbook 'smartmachine_functions'cookbook 'monit_bin'

18Wednesday, July 24, 13

余談、Readme as systemこうやってサーバ構築する強者もいます。

$ sh README.md

中身は適当に想像して下さい。

19Wednesday, July 24, 13

そしてknife cookbook create (site-cookbooks)

knife role createknife data bag create

※適当に繰り返し確認用に vim solo.rb & chef-shell -s -c

solo.rb

Wednesday, July 24, 13

Q.サーバ無いの?A.まだありません

Wednesday, July 24, 13

この頃のシステム(?)構成

22

HostedChef

WorkStation(MacBook)

Wednesday, July 24, 13

Hosted Chefつこうてんの??• Opscode提供のSaaS

• Organizationあたり『5ノード』まで無料

• ⇒将来OSS ChefSeverに移行するの前提で開発サーバ用に使い倒す

• 用がすんだら消す

• このパスなし ✕ chef-solo => chef-server

• 捕捉: 大概ChefSoloでいいと思います。私はChefSoloに慣れてないのでClient/Serverにしてるだけ。

23Wednesday, July 24, 13

そろそろサーバインスタンス

つくるかー

Wednesday, July 24, 13

knife (Iaas) createor

knife bootstrap

Wednesday, July 24, 13

開発サーバで設定を検討しながら

Cookbookへ

Wednesday, July 24, 13

この頃のリポジトリ2 1/2├── Cheffile├── Cheffile.lock├── Gemfile

├── Gemfile.lock├── README.md├── certs├── cookbooks│ ├── chefclient_simple_cron│ ├── ipf│ ├── ipf_configure│ ├── logadm│ ├── monit_bin│ ├── partial_search

│ ├── postfix│ ├── rbac│ ├── smartmachine_functions│ └── smf

27

※git checkoutで調査

Wednesday, July 24, 13

この頃のリポジトリ2 2/2├── data_bags│ ├── README.md│ └── postgresql├── site-cookbooks│ ├── ipf_settings│ ├── postfix_envs│ ├── postgresql-for-some_app│ └── redis-for-some_app└── solo.rb

28

※git checkoutで調査

Wednesday, July 24, 13

この頃のシステム構成2

29

HostedChef

WorkStation(MacBook)

開発サーバ(Joyent)

ChefClient

Wednesday, July 24, 13

この頃のリポジトリ2 1/3├── Cheffile├── Cheffile.lock├── Gemfile├── Gemfile.lock├── README.md├── certs├── cookbooks│ ├── chefclient_simple_cron│ ├── ipf│ ├── ipf_configure│ ├── logadm│ ├── monit_bin│ ├── partial_search│ ├── postfix│ ├── rbac│ ├── smartmachine_functions│ └── smf

30

※git checkoutで調査

Wednesday, July 24, 13

この頃のリポジトリ2 2/3├── data_bags│ ├── README.md│ ├── certs│ ├── deploy│ ├── domains│ ├── postfix_env│ └── postgresql├── roles│ ├── app_server_common.json│ ├── base_smartos.json│ ├── chef-client_cron.json│ ├── some_app.json│ ├── monit_smartos.json│ ├── patchjob_update_certs.json│ ├── postfix_server.json│ ├── postgres-client.json│ ├── postgres-server.json

31

※git checkoutで調査

Wednesday, July 24, 13

この頃のリポジトリ2 3/3│ ├── redis-client.json│ └── redis-server.json├── site-cookbooks│ ├── ipf_settings│ ├── some_app_deploy│ ├── nginx_upstream│ ├── postfix_envs│ ├── postgresql-for-some_app│ └── redis-for-some_app└── solo.rb

32

※git checkoutで調査

Wednesday, July 24, 13

そろそろOSS Chefサーバに移行

Wednesday, July 24, 13

knife server backupknife role(他) create

from_file

Wednesday, July 24, 13

リポジトリにserverbackups/追加

env,roles,data_bags,nodes

Wednesday, July 24, 13

この頃のシステム構成3

36

OSSChef

WorkStation(MacBook)

開発サーバ(Joyent)

ChefClient

Wednesday, July 24, 13

このころのCheffile抜粋 2cookbook 'partial_search'cookbook 'smartmachine_functions'cookbook 'monit_bin'

# Github## modcloth-cookbookscookbook 'ipf', :git => 'https://github.com/modcloth-cookbooks/ipf.git'cookbook 'logadm', :git => 'https://github.com/modcloth-cookbooks/logadm.git'

## higanworks-cookbookscookbook 'ipf_configure'cookbook 'chefclient_simple_cron', :git => 'https://github.com/higanworks-cookbooks/chefclient_simple_cron.git'

## modified community cookbooks.cookbook 'postfix', :git => 'https://github.com/ZCloud-Firstserver/postfix.git', :ref => 'respond_to_smartos'

37

コミュニティCookbooks※自作もの多い

他所様の汎用的なCookbook※ そこそこプルリクしてる

自作Cookbook※ site-cookbookからpublicに昇格

改造したコミュニティCookbooks※結局後でプルリク

Wednesday, July 24, 13

これで大体完了、あとは適当に展開

Wednesday, July 24, 13

この頃のシステム構成4

39

OSSChef

WorkStation(MacBook)

開発サーバ(Joyent)Stagingサーバ群

(Joyent)

Stagingサーバ群(Joyent)

Wednesday, July 24, 13

更新アリ

Wednesday, July 24, 13

1. env[production]でhogebookの現行バージョンを pinする ※指定無しならlatest

41

Staging

CookBook更新と適用手法の例

hogebook v1.0

Production

hogebook v1.0

v1.0にpin

Wednesday, July 24, 13

1. env[production]でhogebookの現行バージョンを pinする ※指定無しならlatest

2. 新しいバージョンをChefServerにアップ

42

Staging

CookBook更新と適用手法の例

hogebook v1.1

Production

hogebook v1.0

次回コンバージョンでv1.1が適用される

こちらpinされたバージョンのまま

Wednesday, July 24, 13

1. env[production]でhogebookの現行バージョンを pinする ※指定無しならlatest

2. 新しいバージョンをChefServerにアップ3. OKならpinをはずす

43

Staging

CookBook更新と適用手法の例

hogebook v1.1

Production

hogebook v1.1

新バージョンが適用される

Wednesday, July 24, 13

• システム構築にあたって、アプリに必要なれいやをゆっくり考えつつコード(再現可能)に落としこむ

• 決めた役割を与えるため、適当に調達したサーバインスタンス上で収束用クライアント(Chefなど)を走らせる

• 一発構築はあまり必要ない• ノードを支配下においてねっとりと操ったり簡単に棄てる

44Wednesday, July 24, 13

コードとしてのインフラってだいたいこんな感じだと

思いました。

Wednesday, July 24, 13