読んだ : Infrastructure As Code
インフラやっていくぞー、という気持ちで去年の中ごろに読んだ。
Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス
- 作者: Kief Morris,宮下剛輔,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/03/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
本書では最初 (第 1 部) に 「なぜ Infrastructure as Code が必要なのか」 「Infrastructure as Code とは何なのか、何を目指しているのか」 といった説明から始まり、Infrastructure as Code に関わるサービスやツールの紹介がなされる。 そして 2 部では、1 部で紹介されたツールなどを使ったサーバーの追加や変更といったインフラストラクチャの運用のパターンが紹介される。 最後の 3 部はプラクティスで、ソフトウェア工学のプラクティスを応用することや Infrastructure as Code のための組織といった部分の話がなされる。
自分は、Infrastructure as Code とはインフラ構成管理をコード化することで手順を再現できるようにしたり、バージョン管理できるようにしたり、自動化できるようにすること、というぐらいの理解しかない状態で読み始めたのだが、本書で説明される Infrastructure as Code はソフトウェア工学のプラクティスを応用するなど、もともと自分が想定していたものよりもさらに進んだものだった。 また、本書は 「なぜこういう考え方をするのか」 という思想的な部分も丁寧に説明しており、納得しやすい。 学びの多い良い本であった。
特に気になった内容のメモや感想
- Infrastructure as Code の原則
- 簡単に再現できるシステム
- 使い捨てにできるシステム
- 統一的なシステム
- 反復できるシステム
- 絶えず変化する設計
- Infrastructure as Code の原則
- 定義ファイルの利用
- 自己記述システムとプロセス
- あらゆるものをバージョン管理
- 継続的テストシステム、プロセス
- 一斉変更ではなく小刻みな変更
- 継続的にサービスを利用可能状態に保つ
- 「アンチフラジャイル」 という概念 : ストレスを受けたときに通常よりも強くなるシステム (インシデント発生時の対応として改良することをデフォルトの対応とする)
- 「スタック」 の概念 : 一つの単位として定義・変更される、インフラストラクチャ要素の集合
- スタックの単位で構造化していく : 単純な構成だとスタックへの分割の恩恵はないが、リソースの共有などをする場合には意味がある
- スタック間の情報のやり取りに構成レジストリが役に立つ
- システムの品質について、機能的な正しさの問題だと思われてしまうことが多いが、実際には変化を許すかどうかを決める鍵を握っている
- 高品質システムは従来よりも簡単かつ安全に変更できる
- 継続的なブランチのテストは継続的インテグレーションではない
- 継続的インテグレーションとは、すべての作業がトランクで行われて、すべてのコミットがテストされることが保証される。 完全にチェックされた変更だけが本番システムに適用されることを保証するためには継続的デリバリーパイプラインを使う。
- 思想としてはよいと思うが実践的にはレビュー等どうするのだ?? という気がする。 (機能を完全に実装する前の小さい変更の状態でブランチをマージしていく、ぐらいが実践的な気がする。)
- 変更パイプライン : ソフトウェアのデプロイパイプラインに相当するもの (ソフトウェアのデプロイとは違うことを区別するために著者はこう呼んでいる)
- 継続的デリバリーは継続的デプロイではない : 継続的デリバリー (CD) とは、すべての変更をすぐに本番に送り込める状態に高めること。 デプロイ判断を下したら後はツールがデプロイしていく (システムの稼働が技術的な判断になるのではなくビジネス上の判断になる)
- インフラストラクチャの変更のテストでもソフトウェアのテストと同じく、低水準のものを多く、高水準のものを少なくする (テストピラミッド)
- これに限らず、テストのプラクティスは結構ソフトウェアのテストと似ている部分が多いなーと感じた
- リリースとデプロイを切り離すというプラクティス
- 機能トグルとかゼロダウンタイム交換パターンとか
- コンシューマ主導のコントラクト (CDC) テスト
- コンシューマが提供するテストをプロバイダ側のパイプライン上で動かす
- ソフトウェア開発のクライアントとサーバー間でも使えそう
- ワークフローにガバナンスを組み込む
- 承認などのフローも自動化してログの保持などをすることで、手での承認よりも良いものになる
- ゼロダウンタイム変更のパターン
- 企業が変化するニーズに対して信頼できる高品質のサービスで応えていくための組織面での原則
- サービスの設計、実装、改良に対して継続的にアプローチしていくこと
- 継続的にサービスをデリバリー、改良する権限をチームに与えること
- 継続的にスピーディに変更をデリバリーしつつ、高い品質とコンプライアンスを保証すること
- 効果測定。 目標と状況に基づいて役に立つものを選択
- ユーザーに力を与える組織
- プラクティス
- 職能分割モデルには落とし穴がある
- 設計の細分化 : 設計と仕様が中央で作られて、実装のために様々なチームに分配される。 チームからは全体像が見えない
- 厳格な日程管理 : 各チームが複数プロジェクトに関わることになるので、日程管理が重要になってくる
- 長いリードタイム : チーム間の作業の一つ一つがオーバーヘッドを生む
監訳の宮下さんのまえがきにある 『新しい技術用語が出てくると、関連するツールやプロセスが注目され、それらを導入すれば課題は解決する、と思われがちである。 しかし、大切なのはその言葉の背後にある思想や哲学を理解し、適切に運用する人』 というのが良い#書籍 #InfrastructureAsCode
— Nobuoka Yu (@nobuoka) August 10, 2018
『多くの人々は、プラグマティズム (すなわち、仕事を終わらせること) と技術品質 (すなわち、作りの正しさ) をトレードオフと見ているが、これは誤った二分法だ』
— Nobuoka Yu (@nobuoka) August 31, 2018
基本的に設計をちゃんとしないからといって開発速度が上がるということは無いんだよね#書籍 #InfrastructureAsCode
ウケた
『同僚の Chris Bird はこれを “DevOops” と名付けた。 多くのマシンを 1 度にまとめて自動的に構成/設定できるようになると、多くのマシンを 1 度にまとめて壊すこともできるようになるのである』
— Nobuoka Yu (@nobuoka) September 10, 2018
ウケる#書籍 #InfrastructureAsCode