Jのブログ

人生の記録

【読了】20160415-サーバインフラエンジニア養成本DevOps編

サーバ/インフラエンジニア養成読本 DevOps編 [Infrastructure as Code を実践するノウハウが満載! ] (Software Design plus)

DevOps導入時に一番大切なこと

  • 解決したい課題を確認
  • 優先順位をつける
  • 課題に対して決めること
    • あるべき姿
    • 現状分析、ゴールに対して何が足りないのか
    • 解決したか判断するためのメトリクス
    • スケジュール
    • 体制
  • 定期的に実施すること
    • 現状どうなっているかメトリクスの確認
    • 課題の棚卸
    • 優先順位をつける

DevOps導入ツール

  • コミュニケーションツール
  • バージョン管理システム
  • プロジェクト管理システム(チケット管理システム)
  • テスト自動化
  • CIツール(自動ビルドや自動テスト)
  • CDツール(ボタン一つでのデプロイ)
  • 開発/検証は仮想化ツールにより同じ環境で実施
  • プロビジョニングツール、構成管理ツールによる構築の自動化
  • 監視ツール
  • ダッシュボード(様々なメトリクスを見る)

継続的インテグレーションとは?

  • 目的は、テストを頻繁に実施することで早期に問題を発見し、品質向上すること
  • 各モジュール間で依存関係に対しても早期に問題を発見することが可能
  • バージョン管理システムより、ビルド、テストを自動化することで効率的な開発を行える

解決できる課題

  • ビルド、テストを効率的に実施できる
  • ビルドの属人化を排除できる
  • 特定の端末でしかビルドができないということがなくなる
  • 手順やドキュメントを更新せずとも、ノウハウンはCIツール上に集約できる
  • CIツールより、最新のビルドバージョンをダウンロード可能

仮想サーバのテンプレートレイヤー

Instructure as Code実現のポイント

  • 事前に要件を整理
  • いきなりすべてを自動化しようとしない
  • チームのスキルを考慮してツールを選択
  • 自動化コードは常にテストする
  • 自動化コードが失敗した場合に、それ以降を手作業で実施しない
  • これらをチームメンバに徹底する

Immutable Infrastructure

  • 一度構築したインフラは変更しない(インストールパッケージ、バージョン、設定)
    • 更新する場合は、新規で1からインフラ構築しインフラごと入れ替える
  • メリット
    • すべてのサーバが同じ状態になることを保証
    • 作りなおすことが前提となるため、バージョン差異等考慮しなくて良くなり、自動化コードがシンプルになる
    • Blue/Greenデプロイを行い、切り戻しが容易になる
  • 注意点
    • 頻繁にサーバを作り直すので、構築が自動化されている必要がある
    • 作ったサーバのテストも頻繁に実施するため、テストの自動化をする必要がある
    • サーバを捨てる前提のため、ステートレスなアーキテクチャ(データをサーバに保管しない)、ログを外部保管することが必要。データベースはRDS等のマネージドサービスを利用する。