13-b-2 グリーにおけるChef導入事例~既存の資産を活かし新しい技術を導入する~
このセクションを選んだ動機
同一チームでChefベースで構築されているImmutableなインフラがあるが、
自分が担当している方にも展開できるようにまずは基礎知識として蓄えたいと思った
Chefとは?
- Chef is Infrastracture as a Code
- 冪等性が担保されている(何も入っていない別のサーバに対して実行する場合の話のはず)
- altertableとかまでChefで行う場合は別テーブルに回避して、importするとかの処理を入れないといけない)
- Mutable-Infrastractureと相性良い(Immutable-Infrastractureであっても十分有用性はある)
導入背景
- Chefによる効率化
- オペミスの回避
- リードタイム改善(インフラチームに発注してからサーバをアプリチームに提供できるまで)
導入前の状態
導入
- 構成
chef
|- role
|- cookbookA
|- cookbookB
|- nodeの属性
- ChefSoloとChefServerの選択について
- 内製したChefBridgeについて
- nginxがstaticなファイルを提供
- GreeChefClient = ChefSoloのラッパーも準備している
- 自動テスト機能付き
- 汎用的につくられているだけあり、複雑
- 自社でCookbookを作成(以下により使える人を育成)
- 学習コストが高いが、Chef使える人を増やしていった(入門ChefSoloと初心者Chefアンチパターンは必読)
- 入門Chef Solo - Infrastructure as Code
- [和訳] 初心者Chefアンチパターン by Julian Dunn #opschef_ja « CREATIONLINE, INC.
- 社内用チュートリアル ... これはさすがに見つからない…
- 公式 docs.opscode.com 特にResources and Providers Reference — Chef Single-page Topics らしい
- 学習コストが高いが、Chef使える人を増やしていった(入門ChefSoloと初心者Chefアンチパターンは必読)
テストを書く
- テストの方法
- Serverspec/TestKitchen : ブラックボックステスト
- chefspec : ホワイトボックステスト
- FoodCrinic : Lintツール
- テストを書く理由
- TDD的な開発の後押し
- リグレッションを防ぐ
- ドキュメント代わり
- 本番サーバの構築テスト
- TestKitchen
- 単体test環境みたいなもの?
- [WIP](=進行中の作業)でPullRequestを投げる
- github - jenkins - ChefBridge で自動テスト
- 共通node設定はYAMLでjsonに変換して使用
事件:Jenkinsサーバに繋がらなくなった
- VertualBoxのHost-Only-Networkのルーティングが変わったため
- Chefで更新をかけるときは要注意
テストに時間がかかると...
Chef導入により改善された運用
- 何かしら障害があり、構築logが見たい場合
- 以前:screenコマンドで手動保存したものを検索
- Chef導入後 : 実行logはDBに保存(Chefのレポートハンドラ -> fluentd -> DB)
Chefを使うことによる利点として感じたこと
- インフラ構築の高速化
- インフラドキュメント= テストコード
- Chefにすれば、vagrantで同じ環境作りやすそう。
(ただ、その環境を使ってアプリの単体試験をするとなると、ローカルPCのスペックが要求される)
- Chef導入する際に、それにより何がデキるようになるのか?を意識してログやテスト方法を設計されていた?