45
第一回 Chef Casual Talks Kansai 2013.07.24 主催: HiganWorks LLC Wednesday, July 24, 13

Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

第一回Chef Casual Talks Kansai

2013.07.24主催: HiganWorks LLC

Wednesday, July 24, 13

Page 2: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

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

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

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

2Wednesday, July 24, 13

Page 3: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

HiganWorks, OpsRockについて

3

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

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

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

Wednesday, July 24, 13

Page 4: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

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

Wednesday, July 24, 13

Page 5: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

5Wednesday, July 24, 13

Page 6: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

6Wednesday, July 24, 13

Page 7: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

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

Wednesday, July 24, 13

Page 8: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

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

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

8Wednesday, July 24, 13

Page 9: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

• 自動化(Automation)

• 敏捷性(Agility)

• 拡張性(Scalability)

• 信頼性(Reassurance)

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

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

9Wednesday, July 24, 13

Page 10: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

Wednesday, July 24, 13

Page 11: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

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

Wednesday, July 24, 13

Page 12: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

Wednesday, July 24, 13

Page 13: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

まず何しますか?

Wednesday, July 24, 13

Page 14: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

初手、git init

※完成後のいま、93commits

Wednesday, July 24, 13

Page 15: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

bundle initvim Gemfilebundle install

Wednesday, July 24, 13

Page 16: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

librarian-chef initvim Cheffile

librarian-chef install

Wednesday, July 24, 13

Page 17: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

17

※git checkoutで調査

Wednesday, July 24, 13

Page 18: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

18Wednesday, July 24, 13

Page 19: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

$ sh README.md

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

19Wednesday, July 24, 13

Page 20: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

そしてknife cookbook create (site-cookbooks)

knife role createknife data bag create

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

solo.rb

Wednesday, July 24, 13

Page 21: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

Wednesday, July 24, 13

Page 22: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

22

HostedChef

WorkStation(MacBook)

Wednesday, July 24, 13

Page 23: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

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

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

• 用がすんだら消す

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

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

23Wednesday, July 24, 13

Page 24: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

つくるかー

Wednesday, July 24, 13

Page 25: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

knife (Iaas) createor

knife bootstrap

Wednesday, July 24, 13

Page 26: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

Cookbookへ

Wednesday, July 24, 13

Page 27: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

この頃のリポジトリ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

Page 28: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

この頃のリポジトリ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

Page 29: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

この頃のシステム構成2

29

HostedChef

WorkStation(MacBook)

開発サーバ(Joyent)

ChefClient

Wednesday, July 24, 13

Page 30: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

この頃のリポジトリ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

Page 31: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

この頃のリポジトリ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

Page 32: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

この頃のリポジトリ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

Page 33: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

Wednesday, July 24, 13

Page 34: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

knife server backupknife role(他) create

from_file

Wednesday, July 24, 13

Page 35: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

リポジトリにserverbackups/追加

env,roles,data_bags,nodes

Wednesday, July 24, 13

Page 36: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

この頃のシステム構成3

36

OSSChef

WorkStation(MacBook)

開発サーバ(Joyent)

ChefClient

Wednesday, July 24, 13

Page 37: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

このころの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

Page 38: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

Wednesday, July 24, 13

Page 39: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

この頃のシステム構成4

39

OSSChef

WorkStation(MacBook)

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

(Joyent)

Stagingサーバ群(Joyent)

Wednesday, July 24, 13

Page 40: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

更新アリ

Wednesday, July 24, 13

Page 41: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

41

Staging

CookBook更新と適用手法の例

hogebook v1.0

Production

hogebook v1.0

v1.0にpin

Wednesday, July 24, 13

Page 42: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

Page 43: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

Page 44: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

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

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

44Wednesday, July 24, 13

Page 45: Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code

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

思いました。

Wednesday, July 24, 13