23
3/21 10:00 - 12:00 Ansible 勉勉勉

Ansible 勉強会

Embed Size (px)

Citation preview

Page 1: Ansible 勉強会

3/21 10:00 - 12:00

Ansible 勉強会

Page 2: Ansible 勉強会

はじめに# この会の目的について コンセプトは 「興味を持った技術を、みんなで集まって触ろう!」

いろいろな人が実際に触って ・どのように利用ができるか? ・こういう使い方ができる! という意見を募りたい →  実際に業務の改善につなげたい 新しいサービスに利用したい 今後は、月1程度に定期的な開催を行いたい

Page 3: Ansible 勉強会

アジェンダ### 導入編* Ansible って何?* なんでこれを使うの?* ツールの特徴        などを紹介します ### 実践編* playbook を作ってみる* 要件に即した playbook をみんなで作ってみよう

Page 4: Ansible 勉強会

導入編             /)           ///)          / ,.= ゙ ''" /   /     i f   ,. r='"-‐' つ___ _    こまけぇこたぁいいんだよ!!   /       /     _ ,. - ‐' ~ /⌒  ⌒\    /    ,i     , 二ニ⊃( ●) .  (●)\    /     ノ    il ゙フ :::::: ⌒ ( __ 人 __ )⌒ ::::: \       , イ「ト、   , !,!|       |r┬-|       |      /   i トヽヽ _/ ィ " \      ` ー '´     /

小難しい話は抜きにして、何が便利なのか説明するよ!

Page 5: Ansible 勉強会

そもそも Ansible ってなに?* 最近流行りの『構成管理ツール』の一つだよ。

* サーバーの構築を、コマンド入力するのではなくて、プログラミングのようにコードにして管理するツールだよ。

* " プレイブック " と呼ばれるコード集をホスト側から実行するだけで、クライアントのサーバーを構成してくれるよ。

Page 6: Ansible 勉強会

"Infrustructure as a Code" という考え方* プログラミング開発で使われているツールや手法を用いて、インフラ開発も効率的にやっていこうぜ!という考え方。

* 本日紹介する、 Ansible,Git,Vagrant はこの概念を実現するためのツールにすぎない!

Page 7: Ansible 勉強会

各ツールの機能と役割・ Ansible( インフラ構成をコードに落とし込む )・ Git( コードをバージョン管理する、みんなでシェアする )・ Vagrant (テスト環境をすぐに立てられる)

自動化すげー! Ansible すげー!ってよりは、いろいろな手法を組み合わせて、「効率化」するという点が一番のメリットだと思います。

Page 8: Ansible 勉強会

Ansible の特徴* べき等性 - playbook は何度実行しても必ず定義された状態になる。(どこかでコマンドが落ちても、再実行時に他のコマンドが2重で実行されない)

* agent レス - ホストに Ansible が入っており、構築先に SSH できる状態であれば agent は不要。実行先を同時に複数選択することも可能

* インストールが簡単 - RedHat の標準リポジトリに入っているので、標準で yum からインストール可能

* OS を問わない - windows,mac,linux など複数の OSに対応している

Page 9: Ansible 勉強会

Git って何?* ファイルを誰が、いつ、どこを変更したか、で管理するツールのことだよ

* ファイルを過去の状態に戻せたり、同時編集したり、それをマージしたり…自由自在にできる。

* ↓ こういうのよく見ませんか?hoge.txthoge.txr.20151002hoge.txr.20151002_2hoge.txt - コピー $hoge.txt.20151002… どれが最新?誰が編集してるの?

Page 10: Ansible 勉強会

分散型バージョン管理各クライアントでリポジトリを持って、ローカルにクローンして、バージョン管理する。SSH か HTTPS でアクセスすることができれば、どこにでもクローン可能

参考:第 2 回 ハックガールズが教える, Git の基礎知識http://gihyo.jp/dev/serial/01/hackgirlsgit/0002

Page 11: Ansible 勉強会

どんないいことがあるの?

Ansible のメリット

* 構築時の手順ミスを無くせる→ そもそも「作業」が発生しない

* 端末にログインせずにコマンドを実行することができる

* 一度に大量のコマンドを同時に実行できる→ セキュリティパッチの適用や、 agent の必要なソフトのインストールなどに効果を発揮

Page 12: Ansible 勉強会

どんないいことがあるの?

Git のメリット

* サーバー構成(プレイブック)を使い回すことができる

* 同時編集でも問題なくマージ可能

* ファイルのデグレードが起きない

Page 13: Ansible 勉強会

実演

Page 14: Ansible 勉強会

なにをやったの?

①  Vagrant を用いてローカル開発環境を用意し、

②  GitHub で公開しているプレイブックをダウンロードして

③ それを Ansible で適用しました。

Page 15: Ansible 勉強会

実践編

それじゃあ、やっと本題に入ります

Page 16: Ansible 勉強会

プレイブックを書いてみる

* yml 形式のファイルを作成します* プレイブックは複数のモジュールで構成されています1 モジュール = 1 コマンド に相当します

Module Index— Ansible Documentationhttp://docs.ansible.com/ansible/modules_by_category.ht

ml

Page 17: Ansible 勉強会

プレイブックの例--- - name: Install libselinux-pythonyum: name=libselinux-python state=present- name: Check status of selinuxshell: getenforce- name: Permissive selinuxselinux: policy=targeted state=permissive- name: reboot!command: shutdown -r now

* yml形式なので一番上は - (ハイフン) 3 つ* - name: はプレイブック実行時に表示される文字列。(進捗がわかるように)* モジュールは公式ページを参照* command: モジュールは Linux のコマンドをそのまま使える。ただしべき等性は失われるので最終手段とするる。

Page 18: Ansible 勉強会

SSH周りの設定* ansible は SSH さえつながれば実行することができる。 公開鍵認証方式の利用を推奨している。[Ansible Host 側の設定 ]> ssh-keygen

で、鍵ペアを作成。初期状態だと、 ~/.ssh / 配下に id_rsa (秘密鍵)とid_rsa.pub( 公開鍵 ) が作成される。> ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] これで、 agent 側に鍵を渡すことができました!

Page 19: Ansible 勉強会

hosts の設定

ansible では hosts というファイルをおいてサーバーをグループで管理することができます。例hosts[wordpress-server]xx.xx.xx.xx ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_ssh_user=root

解説:鍵の場所を指定したりどのユーザーで ssh をつなぐかなどのオプション設定もここに追加することができます

Page 20: Ansible 勉強会

playbook のテスト## playbook の実行の前に、 ansible 上で agent と接続が取れているかの pingを打ってみます。> ansible -m ping -i hosts XX.XX.XX.XX下のように帰って来れば OK です。192.168.33.12| success >> {"changed": false, "ping" : "pong”}

Page 21: Ansible 勉強会

ansible の実行

接続が OK だったら、いよいよ実行!> ansible-playbook init.yml -i hosts

Page 22: Ansible 勉強会

実践

Page 23: Ansible 勉強会

要件- Vagrant でローカル開発環境を2つ用意するOS:CentOS6.7 Host名: ansible-host と ansible-agentIP アドレス : 同じセグメント上の 2 つのアドレスを指定

- SSH を設定するプレイブックを作る* 要件 1 : SSH のポートを 22 から 2222 に変える* 要件 2 : SSH から rootユーザーのログインができない* 要件 3 : SSH 用ユーザーを新規作成する* 要件 4 : SElinux を OFF にする* 要件 5 : 各種ファイアーウォールの設定

- GitLab に、作成した playbook をアップロードする