エンジニアの独り言

勉強会のメモとか、日々感じたことを忘れないように

13-b-2 グリーにおけるChef導入事例~既存の資産を活かし新しい技術を導入する~

このセクションを選んだ動機

同一チームでChefベースで構築されているImmutableなインフラがあるが、
自分が担当している方にも展開できるようにまずは基礎知識として蓄えたいと思った

Chefとは?
  • Chef is Infrastracture as a Code
  • 冪等性が担保されている(何も入っていない別のサーバに対して実行する場合の話のはず)
    • altertableとかまでChefで行う場合は別テーブルに回避して、importするとかの処理を入れないといけない)
  • Mutable-Infrastractureと相性良い(Immutable-Infrastractureであっても十分有用性はある)
導入背景
  • Chefによる効率化
  • オペミスの回避
  • リードタイム改善(インフラチームに発注してからサーバをアプリチームに提供できるまで)
導入前の状態
  • GreeではDebianを使用
  • サーバ別のメタパッケージがそれぞれ存在し設定ファイルはスクリプトで生成していた
    • 各設定値パッケージ内部 or サーバ管理システムに問い合わせ
  • 既存のサーバ管理システムをそのまま使いたい
    • 上記の様な制限があるとchefを導入する際の障壁になることがあるので注意
    • 運用スクリプトがサーバ管理システムに依存しているため、構築済みのサーバはいままで通り運用
      • 既存サーバに関しては臨機応変さが必要。(JUnitなどと同じく管理対象外のものに対していきなり全展開をするのは厳しさがあるようで、追加分から始める方が良さそうに感じた)
導入
  • 構成


chef
|- role
|- cookbookA
|- cookbookB
|- nodeの属性

テストを書く
  • テストの方法
  • テストを書く理由
    • TDD的な開発の後押し
    • リグレッションを防ぐ
    • ドキュメント代わり
    • 本番サーバの構築テスト
  • TestKitchen
    • 単体test環境みたいなもの?
  • [WIP](=進行中の作業)でPullRequestを投げる
    • github - jenkins - ChefBridge で自動テスト
  • 共通node設定はYAMLjsonに変換して使用
事件:Jenkinsサーバに繋がらなくなった
  • VertualBoxのHost-Only-Networkのルーティングが変わったため
    • Chefで更新をかけるときは要注意
テストに時間がかかると...
  • いろいろ手を抜く -> cookpadのプレゼンでも似たようなことを言っていた気がする。
    • vmロールバック
      • sahara
      • TestKitchenドライバー
    • chefSpec
      • TestKitchenと同じ内容は書かないことでテスト時間の短縮
    • FoodCrinic
      • Lintツール
Chef導入により改善された運用
  • 何かしら障害があり、構築logが見たい場合
    • 以前:screenコマンドで手動保存したものを検索
    • Chef導入後 : 実行logはDBに保存(Chefのレポートハンドラ -> fluentd -> DB)
Chefを使うことによる利点として感じたこと
  • インフラ構築の高速化
  • インフラドキュメント= テストコード
  • Chefにすれば、vagrantで同じ環境作りやすそう。

(ただ、その環境を使ってアプリの単体試験をするとなると、ローカルPCのスペックが要求される)

  • Chef導入する際に、それにより何がデキるようになるのか?を意識してログやテスト方法を設計されていた?