dshimizu/blog

アルファ版

「Ansible実践ガイド 第2版」を読んだメモ

Ansibleを触っているが、思い返すとあんまりちゃんと勉強せずに使っているような気がしていて、ちゃんと学びたかったのでAnsible実践ガイド 第2版を読んだ。 オライリーの「初めてのAnsible」も気になっているが、こちらのほうがなんとなくとっつきやすそうに思ったのとKindle版があったので読んでみた。

Ansibleを使い始めたばかりの人が読むとより理解が深まるのではないかと思った。初級者、中級者向けの本という印象。

序盤はAnsibleの概要や内部構成、Ansibleのインストール方法といった基礎的なところに加えて、DevOps/IaCやそもそも構成管理とは、といったことに関する説明がされていて、概念の抑えるのには良かった。 中盤はAnsibeを使ったWordPressの構築、具体的にはCentOS 7.4へのMariaDB, HAProxy, KeepAlived, Nginx, PHP-FPM, WordPressでの環境構築、及びLinux系OSの基本設定を行うPlaybookが紹介されていて、タイトルの通りAnsibleを実践する、といった内容だった。MariaDBはGalera Clusterになっており、MariaDBやNginxへのアクセスもHAProxy, KeepAlivedを使った冗長化構成になっていたりと、思ったよりもしっかりとした構成でのPlaybookは参考になった。また、スケールアウトやローリングアップデートのPlaybookも紹介されており、運用を見据えたPlaybookについて考えさせられた。 最後のほうはDockerやOpenStack環境での使い方(ブートストラッピング)やCIツール、AWXなどを用いた様々な環境でのAnsibleの利用、トラブルシューティングやパフォーマンスチューニングなどが記載されており、応用編のような感じだった。 YAMLに関することとかも書かれていて、雰囲気で使っていたところの理解を深められたのも良かった。 サンプルPlaybookや環境に応じてXXしたほうが良いといった補足説明があるので、悩みがちなAnsibleディレクトリ構成や雑に作っていたPlaybookの記載方法に関して、チームで管理する上でより良い書き方をするにあたってのヒントが得られた。またパフォーマンスチューニングのところは初めて知る部分も多く勉強になった。 また、ところどころに、どこまでを自動化すべきかを組織やチーム、ビジネスに合わせて見極めることが大事(ニュアンスは違うかもしれないが)、といった記載が出てきており、何でも自動化しようとするようなアンチパターン?に陥らないようにしたいと思った。

メモ

---第1章---
  構成管理の定義の違い
    ITサービスとしての構成管理
    オペレーション自動化としての構成管理
  DevOps
    本書における定義
    DevOpsの構成要素
      CLAMS(Culture, Lean, Automation, Measurement, Sharing)
    10+ Deploys Per Day: Dev and Ops Cooperation at Flickr https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr
  IaC
    IaCの効果
    自動化の成熟度モデル
      組織の現状に合わせて標準化・自動化が可能な分野を特定して進めていく、ということを表した図 
  構成管理ツールのアーキテクや
    プル型
    プッシュ型

---第2章---
    コントロールノード…Ansibleを実行するサーバ
    ターゲットノード…変更を加える対象のサーバ
  基本動作
    インベントリ
      ターゲットノードを記載しておくファイル。インベントリに記載されたホストが実行対象となる。
    プレイブック
      ターゲットノードで実行したい処理の流れを記載するファイル。プレイブックに記載されたタスクが、インベントリに記載されたホストで実行される。
  Ansibleの実行処理について
    1. インベントリの中からホストパターンに合うターゲットノードをリストアップする。
    2. コントロールノードでプレイブック(各モジュール)をPythonの実行コードへ変換する。
    3. コントロールノードからターゲットノードにSSH接続を確立し、Python実行コードをターゲットノードへsftpで送信する。
    4. ターゲットノード側でPythonの実行コードを実行し、処理した結果をコントロールノードへ返す。
    ※エージェントレスだが、Python実行環境が必要。
  Ansibleの内部コンポーネント
    以下Ansibleのコアエンジンと呼ばれるものをプレイブックや設定ファイルから呼び出すことで、処理が実行される。
    - Ansibleコアエンジン
      - Module
      - Playbook
      - Inventory
      - Plugin
      - Python API
      - Ansible CLI
  インストール方法
    OSパッケージマネージャ
    vituralenv+pip
    ソース

---第3章---
  主にはインベントリやプレイブックの記述方法についてだった。
  YAMLに関することが書かれていたのは良かった。
  YAMLの基本
  - データ形式
    以下を組み合わせてデータを表現する。
    - インデントによって階層構造を示す「コレクション」
      「コレクション」は「シーケンス(≒配列)」と「マッピング(≒連想配列/ハッシュ)」と呼ばれる配列のデータ形式を持つ。
       設定ファイルの書式みたいなもの。スペースによるインデントを正確に行わなう必要があるということ。タブを利用するとエラーになる。
      コレクションの書式)
        シーケンスの書式) - value (ハイフン+スペース+値)
        [例]
        - ansible
        - hogehoge
        - foobar
        マッピングの書式) key: value (キー+コロン+スペース+値)
        apple: リンゴ
        hogehoge: ほげほげ

    - それ以外のデータを示す「スカラースカラーの書式) データ
      [例]
      2019-02-28
      true
      '文字列'

   - 表記方法
    YAMLにはインデントと改行を利用して構造を表現するブロックスタイルと、「{}」や「[]」などのJSONスタイルで構造を表現するフロースタイルがある。
    プレイブックでは両方利用可能だが、通常はブロックスタイルが使われる。

   - YAMLのバージョン
     YAMLもバージョンがあるが、Ansibleでは内部構造でPyYAMLが使われている。内部的にはlibyamlが使われており、ここで使われているYAMLのバージョンが使われる。

   - コメント
     # で行末までコメントとして扱われる。範囲指定はできない
     
   - 開始、終了
     YAMLの定義文は、開始は「---」(ダッシュ3つ)で、終了は「...」(ドット3つ)とする構造になっている。なくても動くが開始の「---」はつけたほうが良い。

---第4章---
  実際にWordPressの構築、およびその後の疑似運用を見据えたデプロイをAnsibleを使って行う方法が記載されていた。
  一通りやれば小~中規模環境でのAnsibleの利用のイメージが湧く。

  章末のコラム コマンドモジュール群の使い分け
  - shellモジュール
    ターゲットノードのシェルを利用する。そのためパイプやリダイレクトを実行可能。ただし、コマンドラインからシェルスクリプトが呼び出されるため、ログインシェルとしては認識されないため、実行ユーザの環境変数を利用する場合には注意が必要($HOME/.bashrcなどが読み込まれない)。
  - commandモジュール
    ターゲットノードのシェルを使わずに処理が行われる。環境に依存しない。
  - rawモジュール
    ターゲットノードのPythonを使わず、SSH経由で直接コマンドが実行される。基本的にPython2.4以前やPythonがインストールされていない環境に対して使う。

---第5章---
  Linuxの基本環境の構築(OSユーザ、パッケージ、リゾルバ、ネットワークなど)やWindows環境についてのプレイブック紹介。

---第6章---
  ブートストラップについて。具体的にはAnsibleとkickstartクラウドAPIなどを組み合わせて環境構築する方法が紹介されていた。
  
---第7章---
  AWXについて書かれていた。
  以前にインストールしただけで終わっていたので折をみて手を動かしていきたい。