ansibleによるinfrastructure as code入門

31
Ansibleによる Infr astructur e as Code入門 2014/12/17 kawasaki.rb #19 @kk_Ataka

Upload: kkataka

Post on 18-Jul-2015

3.842 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: AnsibleによるInfrastructure as code入門

AnsibleによるInfrastructure as Code入門

2014/12/17 kawasaki.rb #19

@kk_Ataka

Page 2: AnsibleによるInfrastructure as code入門

自己紹介4 Twitter: @kk_Ataka

4 GitHub: gosyujin

Page 3: AnsibleによるInfrastructure as code入門

アジェンダ1. 構成管理ツールの長所/短所2. Ansibleの長所/短所3. Ansible入門

Page 4: AnsibleによるInfrastructure as code入門

話さないこと4 本格的なAnsibleの使い方4 yamlとは、yaml構文

Page 5: AnsibleによるInfrastructure as code入門

対象者1. 構成管理ツール何それな人2. サーバの構成管理を手作業で行っている人3. Ansibleを使いたいなーと思っている人

Page 6: AnsibleによるInfrastructure as code入門

構成管理ツールの長所/短所

Page 7: AnsibleによるInfrastructure as code入門

サーバの構成管理とは1. サーバを調達し、必要なMW, SWなどをインストールすること

2. 設定ファイルを適切に編集すること4 これらの作業を適切に維持、管理してくれるツールの事を「構成管理ツール」という

※ 「サーバが正しく稼動していること」の監視、確認は今回対象外

Page 8: AnsibleによるInfrastructure as code入門

サーバの構成管理の辛さ4 サーバが複数台構成になっている場合、4 サーバ間で 一部を除き 同一設定を維持しなければならない

4 設定変更が発生した場合、全てのサーバにそれを適用しなければならない

Page 9: AnsibleによるInfrastructure as code入門

サーバの構成管理の辛さ4 設定ファイルってきちんと管理なされていない印象…

4 日付管理 xxx.conf xxx.conf.20141001 xxx.conf.20141101 が多い…

4 手順(長い)があっても、それ手作業でやるの…?4 ダブルチェック?トリプルチェック?

Page 10: AnsibleによるInfrastructure as code入門

そこで構成管理ツール

Page 11: AnsibleによるInfrastructure as code入門

構成管理ツールの嬉しさ4 サーバ構築手順をコード化できる4 Infrastructure as Code

4 何度実行しても同じ結果になる4 複数のサーバに一発で環境構築できる4 コードなのでコードレビューもできる代表的なツール(独断)としてChef, Puppet, Ansibleなどが挙げられる、今回はAnsibleを使ってみようという話

Page 12: AnsibleによるInfrastructure as code入門

Ansible

4 あんしぶる4 由来はハイニッシュ・ユニバースシリーズ1に登場する超光速通信技術

4 Python製4 基本理念は シンプル

1 アーシュラ・K・ル・グウィン著

Page 13: AnsibleによるInfrastructure as code入門

Ansibleの長所/短所

Page 14: AnsibleによるInfrastructure as code入門

Ansibleの長所(構成管理ツールとして)4 べき等性(Idempotency)がある4 前述した、何度実行しても同じ結果になること

例「 `hoge.conf` の最後に "proxy=http://hoge..." を追加する」という処理をシェルでフツーに作ると、そのシェルを実行するたびに "proxy=..." が追加されてしまう…

(回避するための処理を書くのはけっこうめんどくさい)

べき等性があれば、何度やっても同じ結果に。便利!

Page 15: AnsibleによるInfrastructure as code入門

Ansibleの長所(構成管理ツールとして)4 過去の資産を活用できる4 シェルスクリプトでInfrastructure as codeっぽいことをしていたなら、それを再利用できる4 Ansibleからシェルスクリプトをサーバへ送り、実行できる機能がある

4 資産をそのまま流用するとべき等性はない2

2 うまくやればできる sh hoge.sh creates=/tmp/exist.txt でexist.txtがあればスキップ

Page 16: AnsibleによるInfrastructure as code入門

Ansibleの長所(競合ツールと比べて)4 python コマンドが実行できるサーバにSSH接続できればすぐ使える4 サーバ側に余計なツールをインストールする必要がない4 Chefなどでは基本的にサーバにもエージェントをインストールする必要がある

4 必要がファイルが少ない4 とりあえず2ファイルあればいい(後述)

Page 17: AnsibleによるInfrastructure as code入門

Ansibleの長所(競合ツールと比べて)4 処理は yamlファイル で書く4 Python製だがPythonを書く必要はない

競合ツールと比べてきわめてシンプル

Page 18: AnsibleによるInfrastructure as code入門

Ansibleの短所(構成管理ツールとして)4 学習コスト…Ansible自体, Playbookの書き方…

4 Ansibleの変更に追従していく必要あり4 これはちょっと大変かも(ハマった)

何台のサーバに何回(どのくらいの周期で)使うか、それを手作業でやって生きていけるか…天秤にかけてみる

Page 19: AnsibleによるInfrastructure as code入門

Ansibleの短所(他の競合ツールと比べて)競合ツールと比べてきわめてシンプル…とはいうものの4 大規模システムの構成管理は苦手4 複雑な処理も苦手両方ともできないことはないけど、こんなときは素直にChefなどを導入したほうが良さ気逆に小さな環境にChefを導入しようとしたらかなりToo muchかも...

Page 20: AnsibleによるInfrastructure as code入門

Ansible入門

Page 21: AnsibleによるInfrastructure as code入門

登場人物1. ホスト4 Ansible を実行するマシン4 Python 2.6 - (Python 3 未対応)

2. サーバ4 Ansible で環境を整えるマシン4 Python 2.4 -

Page 22: AnsibleによるInfrastructure as code入門

実行するために必要なファイル4 inventoryファイル4 playbookファイル

Page 23: AnsibleによるInfrastructure as code入門

inventoryファイル4 ini形式で実行対象のサーバを記述する、変数も使える[web]web01.example.comweb02.example.com

[web:vars]ansible_ssh_port=20022

[db]db01.example.com

Page 24: AnsibleによるInfrastructure as code入門

playbookファイルこんなファイル。- hosts: all sudo: yes remote_user: vagrant

vars: username: newuser

tasks: - name: ユーザを追加するよ user: name={{ username }} group=vagrant shell=/bin/bash

Page 25: AnsibleによるInfrastructure as code入門

playbookファイル 解説大きく分けて3つのセクションに分けられる4 TARGETセクション4 VARSセクション4 TASKセクション4 モジュール

Page 26: AnsibleによるInfrastructure as code入門

playbookファイル 1 TARGETセクションどこにだれがインストールするか- hosts: all # すべてのホストに sudo: yes # sudo使う remote_user: vagrant # vagrantユーザでログイン

Page 27: AnsibleによるInfrastructure as code入門

playbookファイル 2 VARSセクション変数を指定する。TASKセクションで使用する vars: username: newuser

Page 28: AnsibleによるInfrastructure as code入門

playbookファイル 3 TASKセクションどんなことをするのかモジュールを使って記述する tasks: - name: ユーザを追加するよ # taskの名前、必須ではない user: name={{ username }} group=vagrant shell=/bin/bash # モジュール

VARSで宣言した変数も使える

Page 29: AnsibleによるInfrastructure as code入門

playbookファイル 3 TASKセクション4 userモジュールを使って以下のユーザを追加している4 ユーザ名は newuser (VARSの変数から)

4 グループは vagrant でログインシェルは bash

Page 30: AnsibleによるInfrastructure as code入門

デモ

Page 31: AnsibleによるInfrastructure as code入門