サーバ構築を自動化する 〜ansible〜

29
伊藤 サーバ構築を自動化する Ansible

Upload: yui-ito

Post on 11-Apr-2017

1.029 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: サーバ構築を自動化する 〜Ansible〜

伊藤 結

サーバ構築を自動化する

〜Ansible〜

Page 2: サーバ構築を自動化する 〜Ansible〜

Ansibleってなに?

Page 3: サーバ構築を自動化する 〜Ansible〜

Ansibleとは

あーそーゆーことね。完全に理解した。 (わかってない )

Ansibleは構成管理ツールの一つである。

設定を記述しておけば、以下のようなことを複数のサーバに対して何度

も実行できる。

● サーバの設定(ツールをインストールする、設定の追加など)● デプロイ操作(サーバにファイルをコピーする、再起動するなど)

Page 4: サーバ構築を自動化する 〜Ansible〜

Ansibleの実行イメージ

①管理ホストPC(操作を行う側)からAnsibleを実行する

②各サーバに対して設定ファイル記述された操作 (ファイルコピー、コマンドなど )が実行される

SSH

Page 5: サーバ構築を自動化する 〜Ansible〜

Ansibleの設定ファイル(Inventory, Playbook)Ansibleは基本的に以下の2種類のファイルを読み込んで処理を実行します。これらのファイルは、行う操作に応じて各ユーザが作成します。

[app]

192.168.33.11 ansible_ssh_private_key_file=key1

192.168.33.12 ansible_ssh_private_key_file=key2

[balancer]

192.168.33.13 ansible_ssh_private_key_file=key3

---

- hosts: app

sudo: yes

remote_user: foo

tasks:

- name: アプリファイルをコピー

copy: src=./web dest=/home/foo/

- name: nginxをインストール

yum: name=nginx state=latest

Inventoryファイル Playbookファイル

対象のサーバの情報 (IP、sshの鍵情報)を、ini形式で記述

Inventoryファイルに記述されたサーバに行う操作(Ansibleの提供モジュール )をyml形式で記述

Page 6: サーバ構築を自動化する 〜Ansible〜

実際にAnsibleを使ってみる

Page 7: サーバ構築を自動化する 〜Ansible〜

デモのイメージ

Ansibleのデモとして、ローカルPCに仮想環境を立て、以下のようなロードバランシング環境を作成します。

ロードバランサ

Webサーバ1

Webサーバ2

ローカル仮想環境

クライアントPC(ブラウザ)

Page 8: サーバ構築を自動化する 〜Ansible〜

デモプロジェクトのフォルダ構成├── all.yml すべてのPlaybookを含んだ実行用Playbook├── apps_playbook.yml Webサーバ用のPlaybook├── balancers_playbook.yml ロードバランサ用のPlaybook├── config | ├── default.conf      ロードバランサ用のconfig  | └── nginx.conf ロードバランサ用のconfig | ├── hosts 各サーバの情報をしたInventoryファイル └── web ├── index.html Webサーバにデプロイするhtmlファイル └── simpleserver.py    Webサーバ上で動作するHTTPサーバ

コマンドラインから、hosts, all.ymlを指定して、ansible-playbookコマンドを実行すると、各サーバに対して操作が実行されます。

サンプルソース : https://github.com/yuizho/ansible_vagrant_balancer_sample

Page 9: サーバ構築を自動化する 〜Ansible〜

ansible-playbookコマンドを実行

Page 10: サーバ構築を自動化する 〜Ansible〜

hosts, all.ymlを指定して、ansible-playbookコマンドを実行

仮想環境のWebサーバ2台に対して実行(ファイルのコピ〜Httpサーバの起動 )

仮想環境のロードバランサに対して実行 (nginxインストール〜nginx再起動)

Page 11: サーバ構築を自動化する 〜Ansible〜

ロードバランサに対してアクセスしてみると……1回目 2回目

1回目はWebサーバ1の内容が表示、2回目はWebサーバ2の内容が表示され、ロードバランサと各Webサーバの動作が確認できました。このように、Ansibleを使用すれば複数のサーバに対して一度に操作、設定を実行できます。

Page 12: サーバ構築を自動化する 〜Ansible〜

Ansibleの特徴

Page 13: サーバ構築を自動化する 〜Ansible〜

冪等性(べきとうせい)がある同じPlaybookを指定してAnsibleを複数回実行した場合、基本的に1回目に実行した時と同じ結果が得られます(何度やっても同じになる)。すでに設定が入っている場合は、操作をスキップしてくれます。

1回目 2回目

Page 14: サーバ構築を自動化する 〜Ansible〜

サーバ側に特別な設定を入れる必要がない

管理ホストのPCにのみAnsibleをインストールすれば、SSH越しにサーバ側を操作できます。そのため、サーバ側に対して特別な設定を入れる必要がありません。

これらの類似ツールは、設定を加えるサーバ側にあらかじめ設定を加えておく必要があったりする。

Page 15: サーバ構築を自動化する 〜Ansible〜

一度に複数のサーバを設定できる

デモでもお見せしたように、Inventoryファイルに対して対象となるサーバをすべて記述しておけば、それらのサーバに対して一度に同じ操作を実行できます。

AnsibleのPlaybookファイルは簡単な再帰処理、分岐処理を記述できるので、サーバごとに設定の変更が必要な場合も問題なく操作を実行させることができます。

Page 16: サーバ構築を自動化する 〜Ansible〜

これらの特徴に加えて……

Page 17: サーバ構築を自動化する 〜Ansible〜

導入するとこんな利点も

バージョン管理システムの恩恵を受けやすく、アプリケーション開発と同じようなワークフローが構築できます。結果として、オペミスや手順漏れ、更新漏れが軽減されます。

Ansibleを導入すると、サーバへの作業手順そのものをPlaybook上に書くことができ、作業手順の作成を以下のようなワークフローで行うことができます。

1. 既存のPlaybookをバージョン管理システムから取得し、修正を実施2. 修正したPlaybookのレビューを実施3. 更新したPlaybookを、テスト環境に流してテストを実施4. テスト済みのPlaybookをバージョン管理システムへコミット5. テストで使用した、Playbookを本番環境で流す

Page 18: サーバ構築を自動化する 〜Ansible〜

Infrastructure as Code

"Infrastructure as Code" というのはこういうことで、単

にサーバー構成変更を自動化しましょうという話では

なく、インフラをすべてソフトウェアとして、コードで扱う

ことでアプリケーション開発で行われてきたいろいろな "ワークフロー" をインフラ作業の世界にも導入しましょ

うねと、そういうことであります。

  naoyaのはてなダイアリーよりhttp://d.hatena.ne.jp/naoya/20131215/1387090668

Page 19: サーバ構築を自動化する 〜Ansible〜

Ansibleユースケース

Page 20: サーバ構築を自動化する 〜Ansible〜

大量のサーバを構築する

同じ操作を複数のサーバに対して一気に実行できることから、大量のサーバをセットアップする必要がある場合は非常に有効です。

サーバ構築作業の効率化

Page 21: サーバ構築を自動化する 〜Ansible〜

ST/本番環境へ資材をデプロイするデプロイ時のオペミス対策

SSHを介してファイルのコピー、サーバの再起動などを行えるためデプロイ用のツールとしても使用できます。

Page 22: サーバ構築を自動化する 〜Ansible〜

開発環境を構築する

リポジトリからAnsibleの設定ファイルを各開発PCに取り込み、開発PCの仮想環境などに対してAnsibleを実行すれば開発環境の構築が容易になります。

「俺のPCだと動くよ」問題の解決

Page 23: サーバ構築を自動化する 〜Ansible〜

WindowsとAnsible

Page 24: サーバ構築を自動化する 〜Ansible〜

Ansible1.7(現在の最新バージョンは2.0)から、Windowの操作を行えるようになっています。

WindowsにはSSHサーバが備わって居ないため、WinRMを使用して管理ホストからサーバの操作を行います。そのため、Linuxサーバを操作する時と違い、サーバ側(Windows)とAnsibleの管理ホスト両方にあらかじめ設定を加える必要があります。※Windows側の設定はWindos8, Windows2012未満の場合のみ設定必要です。

WindowsをAnsibleから操作する

※詳しい設定方法については、SoftwareDesign 2016 1月号のAnsible特集 をご覧ください(すぐ読みたい方がいれば貸します)。

Page 25: サーバ構築を自動化する 〜Ansible〜

まだまだ、Linuxサーバ用のモジュールには及びませんが、Windows用の操作モジュールも増えてきています。

基本的なファイル操作、URLからのファイルダウンロード、サービスの管理などをAnsibleの操作モジュールから行えます。

また、scriptモジュールを使用すればWindowsのPowerShellを叩くこともできるので、かなりの範囲の設定を行うことができます。UI Automation PowerShell Extensionなどと組み合わせて使用すれば、GUI操作を自動化することも可能です。

WindowsをAnsibleから操作してできること

Page 26: サーバ構築を自動化する 〜Ansible〜

今回のオチ

Page 27: サーバ構築を自動化する 〜Ansible〜

現状ではWindowsをそのまま管理ホスト(操作を行う側)として扱うことはできません。

CygwinなどのUnixライクな環境をWindowsにインストールし、その上でAnsibleを動かすことは可能なようですが、情報をみていると苦労を伴うこともあるようです。

Windowsを管理ホストPCとして使用しながら、構成管理ツールを導入する必要がある場合は、Ansible以外の構成管理ツールも視野に入れて検討してください。

WindowsをAnsible管理ホストにする

Page 28: サーバ構築を自動化する 〜Ansible〜

安心してください、VMに  Linux入れれば大丈夫ですよ

Page 29: サーバ構築を自動化する 〜Ansible〜

ご静聴ありがとうございました