DevOpsにおけるAnsibleの
立ち位置と使い所
廣川英寿@株式会社リアルグローブ
Feb 27, 2017 『Ansible徹底入門』出版イベント
自己紹介
廣川英寿 (github: @h-hirokawa)
株式会社リアルグローブ所属 主幹技師
Pythonメイン使いのソフトウェアエンジニア
Webアプリ、PaaS基盤、機械学習、言語処理、 etc…
『Ansible徹底入門』では 1 ~ 5章とコラム類の執筆を担当
DevOps とはなんだったのか?
DevOps とは
1. システム運用にソフトウェア開発プラクティスを導入し
2. 開発(Dev)と運用(Ops)のサイクルを連携させることで
3. スピーディかつ柔軟なITビジネス展開を実現すること
※個人の感想です
DevOpsの連携イメージ
Dev
Ops
Biz
理想的なDevOpsによるビジネス加速の
ためには、
 DevとOps双方が効率化/短サイクル
化されていなければならない
→ ex. Ops部門へのAgile導入
 単なる部門単位の効率化ではなく、
DevがOpsを駆動するしくみ作りが重
要
→ ex. CIによる自動連携
Infrastructure as Codeの必要性
先述した「OpsへのAgile導入」や「CI連携」のためには、以下の条件を満たす必要がある
ソフトウェアのソースと同手法でシステムのインフラを管理できる
各種インフラ操作を自動で行うことができる
この両方の条件を満たすために必要とされるのが、
Infrastructure as Code
Infrastructure as Codeとは
インフラの設定/状態を自動実行可能なコードとして記述すること
Infrastructure as Codeの発想自体はDevOpsより古くからある
 この系統で最も古くからあるソフトウェア CFEngine は 1993年に登場
導入メリットは、効率アップ、安全性アップなどなど
DevOps的な文脈で重要なのは以下
 ソフトウェアのソースと全く同様にバージョン管理できる
 自動テストを行うことができる
 コマンドラインやAPIを用いての外部連携が容易 = CI連携可能
AnsibleもInfrastructure as Codeを
実現するソフトウェアの1つ。
Ansibleのコード = Playbook
Ansibleはどこに使えるのか
Develop
VersionControl
CI
Orchestration
Configuration
Monitoring
DevOpsワークフロー例
Develop
VersionControl
CI
Orchestration
Configuration
Monitoring
DevOpsワークフロー例
Ansibleはこれら全ての工程と
組み合わせて活用することができる
活用パターン 1. 開発
開発環境の構築をAnsibleから行うことで、開発者間で環境を揃えること
が容易になるとともに、環境依存の不具合などが事後的に発覚するリス
クを低減できる。
リリース時にまとめて手順を作るのではなく、開発段階で都度システム
が正しく動くようにPlaybookを書き換えていくことになるため、よりAgile的。
活用パターン 1. 開発
開発環境をVagrantから操作する場合であれば、Ansibleプロビジョナー
が組み込みで備わっており、簡単に連携可能。
Dockerコンテナを使うのであればAnsible Containerでコンテナ・イメー
ジをビルドすることができる。非コンテナ環境で使っているRoleを使いま
わせるなど、通常のDockerfileにはない特徴を持っている。
詳細は『徹底入門』 9章を参照のこと
活用パターン 2-3. バージョン管理、 CI連携
AnsibleのPlaybookは他のソースコード同様にgitなどでバージョン管理
することができる
Playbookは常にバージョン管理しておくのがBest Practice.
github や bitbucketのWebhook機能を使えば、JenkinsやTravisなどの
CIツールを介した「コードプッシュ → 環境デプロイ」までを自動化できる。
Ansible Tower(公式Web GUI/API)を導入する場合、自動デプロイを他
のCIツールなしで構築可能。
活用パターン 4. オーケストレーション
Ansibleには豊富なCloud操作モジュールが組み込まれており、多くのクラウド
基盤でVMやネットワーク周りのオーケストレーション操作を行うことができる。
 特にOpenStackやAWSについてはモジュールが充実している
最近でもネットワーク機器操作モジュールやKubernetes操作モジュールが追加
されており、オーケストレーションの対応範囲は拡大中。
オーケストレーションで出来上がった新規マシン内をそのままセットアップするこ
ともできる。複数の作業工程をワンストップで実行できるのはAnsibleの大きな
特徴。
活用パターン 4. オーケストレーション
留意点
例えばAzure系モジュールだと、現時点ではVM作成はできるが可用性
セットは取り扱えないなど、操作できる機能が限られている。
柔軟なオーケストレーションをAnsible経由で実行したい場合は、Azure ARM
Templateなどの専用機能と連携させることになる。詳しくは『徹底入門』8章参照。
クラウドのオーケストレーションに関してはTerraformのような機能特化
したソフトウェアに分がある場合も。
Terraformなら前回デプロイ時点の情報を記憶することで適切な差分更新を行える
Ansibleの場合、例えばマシンを減らす場合は削除タスクを明示する必要あり
Terraformに比べてAnsibleの方がより慎重とも言える、一長一短
活用パターン 5. 設定管理
マシン内をネットワーク経由(SSH/WinRM)でセットアップする設定管理
(Configuration)は、Ansibleの一番の基本機能かつ最も得意な分野。
550種類ほどあるAnsible組み込みモジュールのうち、大半が設定管理
用のモジュール。OSの基本操作から各ミドルウェアに特化した便利モ
ジュールまで、多数の機能が揃っている。
Chef, Puppetとの最も大きな違いはAnsibleがエージェントレスで動く点。
エージェント型として動かしたい場合は ansible-pull を使う。自動スケーリング時
のマシン初期セットアップを行いたい場合などに便利。
活用パターン 6. モニタリング
Ansible自体は常駐プロセスを持たず、モニタリング自体をAnsibleから
行うことはできない。
Ansibleからセットアップしたマシンを監視登録するなど、モニタリング・シ
ステムをAnsibleから操作することができる。モニタリング・モジュール、ク
ラスタリング・モジュール一覧を参照。
モニタリング・システムからAnsibleを起動して、障害発生時の一次対応
を自動化するなどの応用もできる。
どこに使うのがベスト?
おすすめパターン
マシン内のConfigurationについては、Ansible一番の得意分野。開発環境、稼
働環境を問わず定型作業はどんどんAnsibleで自動化しちゃいましょう。
Orchestrationについては、複雑な処理を必要とする場合はAnsibleだけでは不
十分となることも多い。ただし、OrchestrationとConfigurationをシームレスに
実行するといった、繋ぎこみの部分で使うだけでもAnsibleは便利。
各種CIツールや監視システムとの連携を組むことで、テスト実行や障害対応な
ど、通常のシステム・セットアップに止まらない活用ができる。
まとめ + 補足
Ansibleとは、DevOps実現のために必要とされる要素の一つである
Infrastructure as Code のためのソフトウェア
Ansibleからはマシン内設定以外に各種オーケストレーション制御も可能
が、オーケストレーション系については、まだモジュールが出揃っていない部分あり
やろうと思えば大概のことが実現可能ではある
command(実コマンド操作)、uri(APIキック)を使えば出来ない事はほぼない
モジュールも自前実装可能(Python以外でもOK、Goとかでも書ける)
無理して全てAnsible化する必要はない、より便利な方法を使いましょう
その「便利な方法」自体をAnsibleから操作するのはアリ!
Ansibleとともに素敵な DevOps ライフを!

DevOpsにおけるAnsibleの立ち位置と使い所