【読了】20160415-サーバインフラエンジニア養成本DevOps編
DevOps導入時に一番大切なこと
- 解決したい課題を確認
- 優先順位をつける
- 課題に対して決めること
- あるべき姿
- 現状分析、ゴールに対して何が足りないのか
- 解決したか判断するためのメトリクス
- スケジュール
- 体制
- 定期的に実施すること
- 現状どうなっているかメトリクスの確認
- 課題の棚卸
- 優先順位をつける
DevOps導入ツール
- コミュニケーションツール
- バージョン管理システム
- プロジェクト管理システム(チケット管理システム)
- テスト自動化
- CIツール(自動ビルドや自動テスト)
- CDツール(ボタン一つでのデプロイ)
- 開発/検証は仮想化ツールにより同じ環境で実施
- プロビジョニングツール、構成管理ツールによる構築の自動化
- 監視ツール
- ダッシュボード(様々なメトリクスを見る)
継続的インテグレーションとは?
- 目的は、テストを頻繁に実施することで早期に問題を発見し、品質向上すること
- 各モジュール間で依存関係に対しても早期に問題を発見することが可能
- バージョン管理システムより、ビルド、テストを自動化することで効率的な開発を行える
解決できる課題
- ビルド、テストを効率的に実施できる
- ビルドの属人化を排除できる
- 特定の端末でしかビルドができないということがなくなる
- 手順やドキュメントを更新せずとも、ノウハウンはCIツール上に集約できる
- CIツールより、最新のビルドバージョンをダウンロード可能
仮想サーバのテンプレートレイヤー
Instructure as Code実現のポイント
- 事前に要件を整理
- いきなりすべてを自動化しようとしない
- チームのスキルを考慮してツールを選択
- 自動化コードは常にテストする
- 自動化コードが失敗した場合に、それ以降を手作業で実施しない
- これらをチームメンバに徹底する
Immutable Infrastructure
- 一度構築したインフラは変更しない(インストールパッケージ、バージョン、設定)
- 更新する場合は、新規で1からインフラ構築しインフラごと入れ替える
- メリット
- すべてのサーバが同じ状態になることを保証
- 作りなおすことが前提となるため、バージョン差異等考慮しなくて良くなり、自動化コードがシンプルになる
- Blue/Greenデプロイを行い、切り戻しが容易になる
- 注意点
- 頻繁にサーバを作り直すので、構築が自動化されている必要がある
- 作ったサーバのテストも頻繁に実施するため、テストの自動化をする必要がある
- サーバを捨てる前提のため、ステートレスなアーキテクチャ(データをサーバに保管しない)、ログを外部保管することが必要。データベースはRDS等のマネージドサービスを利用する。